relationalai 0.12.13__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 -209
- 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 -769
- 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/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/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/azure.py +0 -477
- relationalai/clients/client.py +0 -912
- relationalai/clients/config.py +0 -673
- relationalai/clients/direct_access_client.py +0 -118
- relationalai/clients/export_procedure.py.jinja +0 -249
- relationalai/clients/hash_util.py +0 -31
- relationalai/clients/local.py +0 -571
- relationalai/clients/profile_polling.py +0 -73
- relationalai/clients/result_helpers.py +0 -420
- relationalai/clients/snowflake.py +0 -3869
- relationalai/clients/types.py +0 -113
- relationalai/clients/use_index_poller.py +0 -980
- 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 -104
- 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 -2455
- 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 -536
- 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 -324
- 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 -839
- 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 -449
- 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 -549
- 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/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 -9020
- 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 -359
- 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 -145
- 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 -1940
- relationalai/tools/cli_controls.py +0 -1826
- relationalai/tools/cli_helpers.py +0 -390
- 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 -25
- 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.12.13.dist-info/METADATA +0 -74
- relationalai-0.12.13.dist-info/RECORD +0 -449
- relationalai-0.12.13.dist-info/WHEEL +0 -4
- relationalai-0.12.13.dist-info/entry_points.txt +0 -3
- relationalai-0.12.13.dist-info/licenses/LICENSE +0 -202
- relationalai_test_util/__init__.py +0 -4
- relationalai_test_util/fixtures.py +0 -228
- 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 → v0/relationalai}/clients/__init__.py +0 -0
- {relationalai → 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/util.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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from v0.relationalai.early_access.dsl.core.types import Type
|
|
4
|
+
from v0.relationalai.early_access.dsl.core.types.constrained import ConstrainedValueType
|
|
5
|
+
|
|
6
|
+
class Concept(ConstrainedValueType):
|
|
7
|
+
|
|
8
|
+
def __init__(self, name: str, extends: Optional[Type]=None):
|
|
9
|
+
super().__init__(name)
|
|
10
|
+
self._name = name
|
|
11
|
+
self._types = []
|
|
12
|
+
if extends is not None:
|
|
13
|
+
self._types.append(extends)
|
|
14
|
+
|
|
15
|
+
for t in self._types:
|
|
16
|
+
self.build_scalar_variable([t], {})
|
|
17
|
+
self.name_type_variables()
|
|
18
|
+
|
|
19
|
+
def build_scalar_variable(self, args, kwargs):
|
|
20
|
+
if len(args) == 0:
|
|
21
|
+
raise Exception(f"Unexpected error in Concept {self.display()}")
|
|
22
|
+
|
|
23
|
+
if len(kwargs) != 0:
|
|
24
|
+
raise Exception(
|
|
25
|
+
f"Cannot use keyword arguments when instantiating a type parameter for Concept {self.display()}")
|
|
26
|
+
|
|
27
|
+
p_type = args[0]
|
|
28
|
+
if len(args) == 1:
|
|
29
|
+
|
|
30
|
+
# Then we are instantiating T to create a new TypeVariable that will parameterize
|
|
31
|
+
# this Concept (self)
|
|
32
|
+
#
|
|
33
|
+
self._parent = p_type
|
|
34
|
+
tv = p_type.ranges_over()
|
|
35
|
+
self.addparam(tv)
|
|
36
|
+
return tv
|
|
37
|
+
else:
|
|
38
|
+
self._type_constraints.add_atomic_constraint(self.build_atom(p_type, args[1:]))
|
|
39
|
+
|
|
40
|
+
def build_relation_variable(self, args, kwargs):
|
|
41
|
+
if len(args) == 0:
|
|
42
|
+
raise Exception(f"Unexpected error in Concept {self.display()}")
|
|
43
|
+
|
|
44
|
+
if len(args) > 1:
|
|
45
|
+
raise Exception(f"Cannot declare type variable of Concept {self.display()} by supplying more than a type")
|
|
46
|
+
|
|
47
|
+
if len(kwargs) != 0:
|
|
48
|
+
raise Exception(
|
|
49
|
+
f"Cannot use keyword arguments when instantiating a type parameter for Concept {self.display()}")
|
|
50
|
+
|
|
51
|
+
self._parent = args[0]
|
|
52
|
+
|
|
53
|
+
tvar = self._parent.ranges_over()
|
|
54
|
+
self._params.append(tvar)
|
|
55
|
+
|
|
56
|
+
return tvar.typevar_tuple()
|
|
57
|
+
|
|
58
|
+
# Add TypeVariable *tv* as a parameter to this type
|
|
59
|
+
#
|
|
60
|
+
def addparam(self, tv):
|
|
61
|
+
self._params.append(tv)
|
|
62
|
+
return tv
|
|
63
|
+
|
|
64
|
+
def arity(self) -> int:
|
|
65
|
+
if self._parent is None:
|
|
66
|
+
return len(self._params)
|
|
67
|
+
else:
|
|
68
|
+
return self._parent.arity()
|
|
69
|
+
|
|
70
|
+
# Returns True if this type is an EntityType or one of its subtypes
|
|
71
|
+
# and False otherwise
|
|
72
|
+
#
|
|
73
|
+
def entity(self) -> bool:
|
|
74
|
+
return False
|
|
75
|
+
|
|
76
|
+
# Returns the Rel required to instantiate an instance of this Type
|
|
77
|
+
# from a given value val. By default, just return val; subclasses
|
|
78
|
+
# will override as appropriate
|
|
79
|
+
#
|
|
80
|
+
def instantiate(self, *val):
|
|
81
|
+
if self._parent is None:
|
|
82
|
+
return val[0]
|
|
83
|
+
else:
|
|
84
|
+
return self._parent.instantiate(val[0])
|
|
85
|
+
|
|
86
|
+
def ranges_over(self):
|
|
87
|
+
# If this type is not nominal, then it should have exactly one
|
|
88
|
+
# TypeVariable parameter, which we can dupe and then extend
|
|
89
|
+
# with any additional scalar constraints declared by this type.
|
|
90
|
+
#
|
|
91
|
+
lone_type_var = self._params[0]
|
|
92
|
+
|
|
93
|
+
(tvar, vmap) = lone_type_var.dupe()
|
|
94
|
+
vmap[id(lone_type_var)] = tvar
|
|
95
|
+
# tvar._vmap = vmap
|
|
96
|
+
tvar.decl = self
|
|
97
|
+
for c in self._type_constraints._sconstraints.values():
|
|
98
|
+
cnew = c.revar(vmap)
|
|
99
|
+
tvar._cset._sconstraints[id(cnew)] = cnew
|
|
100
|
+
return tvar
|
|
101
|
+
|
|
102
|
+
def head_display(self):
|
|
103
|
+
headvars = []
|
|
104
|
+
for v in self._params:
|
|
105
|
+
vt = v.typeof()
|
|
106
|
+
if vt == self._parent:
|
|
107
|
+
headvars.append(f"{v.display()}")
|
|
108
|
+
else:
|
|
109
|
+
headvars.append(f"{v.display()} in {vt.display()}")
|
|
110
|
+
head = ", ".join(headvars)
|
|
111
|
+
if self._parent is None:
|
|
112
|
+
return f"value type {self.display()}({head})"
|
|
113
|
+
else:
|
|
114
|
+
return f"value type {self.display()} <: {self._parent.display()}({head})"
|
|
115
|
+
|
|
116
|
+
def root_nominal_type(self): # type: ignore
|
|
117
|
+
if self._parent is None:
|
|
118
|
+
return self
|
|
119
|
+
else:
|
|
120
|
+
return self._parent.root_nominal_type()
|
|
121
|
+
|
|
122
|
+
# A non-composite Concept can have a root unconstrained type.
|
|
123
|
+
#
|
|
124
|
+
def root_unconstrained_type(self):
|
|
125
|
+
if self.arity() == 1:
|
|
126
|
+
return self._params[0].typeof().root_unconstrained_type()
|
|
127
|
+
else:
|
|
128
|
+
raise Exception(f"Composite nominal type {self.display()} has no root unconstrained type")
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
|
|
3
|
+
from v0.relationalai.early_access.dsl.core.builders.logic import ScalarConstraintBuilder, LogicBuilder
|
|
4
|
+
from v0.relationalai.early_access.dsl.core.cset import ConstraintSet
|
|
5
|
+
from v0.relationalai.early_access.dsl.core.exprs.scalar import ScalarExprBuilder, box_number
|
|
6
|
+
from v0.relationalai.early_access.dsl.core.relations import RelationSignature, ExternalRelation
|
|
7
|
+
from v0.relationalai.early_access.dsl.core.types import AbstractValueType
|
|
8
|
+
from v0.relationalai.early_access.dsl.core.types.variables import UnstableConstraintSet, NominalTypeVariable, \
|
|
9
|
+
BasicTypeVariable, TypeVariable
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# A ConstrainedValueType:
|
|
13
|
+
#
|
|
14
|
+
# * is identified by a *name*,
|
|
15
|
+
# * is parameterized by a sequence *params* of TypeVariables
|
|
16
|
+
# * has a set *constraints* of ScalarConstraints
|
|
17
|
+
#
|
|
18
|
+
# We implement constraint sets using an int-keyed dictionary to simplify
|
|
19
|
+
# duplicate constraint removal.
|
|
20
|
+
#
|
|
21
|
+
class ConstrainedValueType(AbstractValueType, ScalarExprBuilder, LogicBuilder):
|
|
22
|
+
|
|
23
|
+
def __enter__(self): # type: ignore
|
|
24
|
+
super().__enter__()
|
|
25
|
+
return self.typevar_tuple()
|
|
26
|
+
|
|
27
|
+
def __exit__(self, exc_type, exc_value, traceback):
|
|
28
|
+
super().__exit__(exc_type, exc_value, traceback)
|
|
29
|
+
self.name_type_variables()
|
|
30
|
+
|
|
31
|
+
def __init__(self, nm):
|
|
32
|
+
AbstractValueType.__init__(self, nm)
|
|
33
|
+
self._params = []
|
|
34
|
+
self._type_constraints = UnstableConstraintSet()
|
|
35
|
+
self._constructor = None
|
|
36
|
+
|
|
37
|
+
def __xor__(self, args):
|
|
38
|
+
return self.constructor()(*args)
|
|
39
|
+
|
|
40
|
+
def build_comparison(self, left, op, right):
|
|
41
|
+
c = ScalarConstraintBuilder.build_comparison(self, left, op, right)
|
|
42
|
+
tc = self._type_constraints
|
|
43
|
+
tc.add_scalar_constraint(c)
|
|
44
|
+
return c
|
|
45
|
+
|
|
46
|
+
# Generates a string that displays the TypeVariable constraints (one per line)
|
|
47
|
+
# declared by this ConstrainedValueType
|
|
48
|
+
#
|
|
49
|
+
def constraint_display(self):
|
|
50
|
+
exists = []
|
|
51
|
+
for v in self._params:
|
|
52
|
+
if isinstance(v, NominalTypeVariable):
|
|
53
|
+
exists.append(v.all_constraint_display())
|
|
54
|
+
exists_atoms = "\n".join(exists)
|
|
55
|
+
exists_ppr = exists_atoms + "\n" if exists_atoms != "" else ""
|
|
56
|
+
|
|
57
|
+
constraints = [f" {c.pprint()}" for c in self.denotes().values()]
|
|
58
|
+
if exists_ppr != "":
|
|
59
|
+
return exists_ppr + "\n" + "\n".join(constraints)
|
|
60
|
+
else:
|
|
61
|
+
return "\n".join(constraints)
|
|
62
|
+
|
|
63
|
+
def constructor(self):
|
|
64
|
+
if self._constructor is None:
|
|
65
|
+
# Create a constructor function (relation) for this ValueType
|
|
66
|
+
ctortype = [item.typeof() for item in self.ctordomain()]
|
|
67
|
+
ctortype.append(self)
|
|
68
|
+
self._constructor = ExternalRelation(self.namespace(),
|
|
69
|
+
self.ctor_name(),
|
|
70
|
+
RelationSignature(*tuple(ctortype)))
|
|
71
|
+
return self._constructor
|
|
72
|
+
|
|
73
|
+
# Returns True if the Python constant `val` is an instance of this ValueType
|
|
74
|
+
def contains(self, val):
|
|
75
|
+
|
|
76
|
+
if self.signature_arity() != 1:
|
|
77
|
+
raise Exception(
|
|
78
|
+
f"NOT IMPLEMENTED: Check containment of values in ({self.display()}) which is not unary")
|
|
79
|
+
|
|
80
|
+
# Get the lone type variable over which `self` imposes additional constraints
|
|
81
|
+
tvar = self._params[0]
|
|
82
|
+
if tvar.decl.contains(val) and isinstance(self._type_constraints, ConstraintSet):
|
|
83
|
+
return self._type_constraints.evaluate({tvar.varname(): box_number(val)}) is not None
|
|
84
|
+
|
|
85
|
+
return False
|
|
86
|
+
|
|
87
|
+
def ctordomain(self):
|
|
88
|
+
return self._params
|
|
89
|
+
|
|
90
|
+
def ctor_name(self):
|
|
91
|
+
return f"^{self.display()}"
|
|
92
|
+
|
|
93
|
+
# Returns what ORM would consider to be the "DataType" of this AbstractValueType, if it makes sense.
|
|
94
|
+
#
|
|
95
|
+
def datatype(self):
|
|
96
|
+
if not self.unary():
|
|
97
|
+
raise Exception(
|
|
98
|
+
f"Cannot infer an ORM datatype from AbstractValueType {self.display()}, which is not a "
|
|
99
|
+
f"ConstrainedUnaryValueType")
|
|
100
|
+
|
|
101
|
+
return self._params[0].typeof()
|
|
102
|
+
|
|
103
|
+
# Assemble the set of constraints that are either declared or inherited by
|
|
104
|
+
# this ConstrainedValueType. This method does not attempt to minimize constraints,
|
|
105
|
+
# in contrast with verifies.
|
|
106
|
+
#
|
|
107
|
+
def denotes(self):
|
|
108
|
+
C = self._type_constraints._sconstraints.copy()
|
|
109
|
+
for ac in self._type_constraints._atoms.values():
|
|
110
|
+
scs = self.interpret_type_atom(ac)
|
|
111
|
+
for s in scs:
|
|
112
|
+
if s not in C:
|
|
113
|
+
C[s] = scs[s]
|
|
114
|
+
|
|
115
|
+
for p in self._params:
|
|
116
|
+
C = p.denotes(C)
|
|
117
|
+
|
|
118
|
+
return C
|
|
119
|
+
|
|
120
|
+
# Generates the headline declaration of this ConstrainedValueType, separately
|
|
121
|
+
# form the constraints, as the structure of this headline varies based on
|
|
122
|
+
# whether this is a ValueType or a ValueSubtype
|
|
123
|
+
#
|
|
124
|
+
@abstractmethod
|
|
125
|
+
def head_display(self) -> str: pass
|
|
126
|
+
|
|
127
|
+
# Interpret Atom ac as an AtomicConstraint of the form:
|
|
128
|
+
#
|
|
129
|
+
# T(x)
|
|
130
|
+
#
|
|
131
|
+
# where T is a ConstrainedValueType and x is a TypeVariable.
|
|
132
|
+
#
|
|
133
|
+
# Checks that the type of x conforms to that of the lone TypeVariable
|
|
134
|
+
# that parameterizes T and returns all ScalarConstraints that T imposes
|
|
135
|
+
# on those variables.
|
|
136
|
+
#
|
|
137
|
+
def interpret_type_atom(self, ac):
|
|
138
|
+
|
|
139
|
+
T = ac.relation()
|
|
140
|
+
args = ac.args
|
|
141
|
+
|
|
142
|
+
if len(args) > 1:
|
|
143
|
+
raise Exception(f"Cannot apply ValueSubtype constraint ({T.display()}) to more than one TypeVariable")
|
|
144
|
+
|
|
145
|
+
vmap = {}
|
|
146
|
+
tv = args[0]
|
|
147
|
+
if isinstance(tv, BasicTypeVariable):
|
|
148
|
+
if T.nominal():
|
|
149
|
+
raise Exception(
|
|
150
|
+
f"Argument mismatch when using type {T.display()} as an AtomicConstraint in context of ValueType {self.display()}")
|
|
151
|
+
|
|
152
|
+
if T.root_unconstrained_type() != tv.decl.root_unconstrained_type():
|
|
153
|
+
raise Exception(
|
|
154
|
+
f"Applying type constraint {T.display()} to variable of incompatible unconstrained "
|
|
155
|
+
f"type {tv.decl.physical_typeof().pprint()}")
|
|
156
|
+
|
|
157
|
+
vmap[id(T._params[0])] = tv
|
|
158
|
+
else:
|
|
159
|
+
# tv is a NominalTypeVariable
|
|
160
|
+
|
|
161
|
+
ttup = flatten_typevar_tuple([], T.typevar_tuple())
|
|
162
|
+
tvtup = flatten_typevar_tuple([], tv.typevar_tuple())
|
|
163
|
+
|
|
164
|
+
if len(ttup) != len(tvtup):
|
|
165
|
+
raise Exception(
|
|
166
|
+
f"Argument mismatch when using type {T.display()} as an AtomicConstraint in context of ValueType {self.display()}")
|
|
167
|
+
|
|
168
|
+
for i in range(len(ttup)):
|
|
169
|
+
if not isinstance(tvtup[i], TypeVariable):
|
|
170
|
+
raise Exception(
|
|
171
|
+
f"When using type {T.display()} as an AtomicConstraint in context of ValueType {self.display()}, {i}-th "
|
|
172
|
+
f"argument is not a TypeVariable")
|
|
173
|
+
|
|
174
|
+
tup_basic_type = ttup[i].physical_typeof()
|
|
175
|
+
tvtup_basic_type = tvtup[i].physical_typeof()
|
|
176
|
+
|
|
177
|
+
# Validate that tup_basic_type and arg_basic_type are compatible
|
|
178
|
+
|
|
179
|
+
if tup_basic_type != tvtup_basic_type:
|
|
180
|
+
raise Exception(
|
|
181
|
+
f"Applying basic type constraint {T.display()} to variable of incompatible unconstrained "
|
|
182
|
+
f"type {tvtup_basic_type.pprint()}")
|
|
183
|
+
|
|
184
|
+
vmap[id(ttup[i])] = tvtup[i]
|
|
185
|
+
|
|
186
|
+
rv = {}
|
|
187
|
+
constraints = T.denotes()
|
|
188
|
+
for cindex in constraints:
|
|
189
|
+
c = constraints[cindex]
|
|
190
|
+
dupc = c.revar(vmap)
|
|
191
|
+
rv[dupc.entityid()] = dupc
|
|
192
|
+
return rv
|
|
193
|
+
|
|
194
|
+
# Assign a unique number to each type variable (including the parts of nominal type variables,
|
|
195
|
+
# recursively) so that each type variable in the signature of this ConstrainedValueType will
|
|
196
|
+
# have a unique name to use in interpreting type constraints.
|
|
197
|
+
#
|
|
198
|
+
def name_type_variables(self, initial_pos=0):
|
|
199
|
+
pos = initial_pos
|
|
200
|
+
for v in self._params:
|
|
201
|
+
pos = v.setpos(pos)
|
|
202
|
+
self._type_constraints = self._type_constraints.stabilize()
|
|
203
|
+
|
|
204
|
+
def pprint(self):
|
|
205
|
+
body = self.constraint_display()
|
|
206
|
+
if body != "":
|
|
207
|
+
return self.head_display() + ":\n" + body
|
|
208
|
+
else:
|
|
209
|
+
return self.head_display()
|
|
210
|
+
|
|
211
|
+
def signature_arity(self):
|
|
212
|
+
sum = 0
|
|
213
|
+
for v in self._params:
|
|
214
|
+
sum = sum + v.typeof().signature_arity()
|
|
215
|
+
return sum
|
|
216
|
+
|
|
217
|
+
# Returns the (possibly nested) tuple of BasicTypeVariables over which this ConstrainedValueType
|
|
218
|
+
# ranges. This is useful when instantiating this type, as the calling context will often need to
|
|
219
|
+
# directly reference these BasicTypeVariables. So, for instance, using this facility, we can
|
|
220
|
+
# write code like:
|
|
221
|
+
#
|
|
222
|
+
# ((x, y), (w, z)) = DoubleInterval.typevar_tuple()
|
|
223
|
+
#
|
|
224
|
+
# The flatten_typevar_tuple function can be used to flatten these tuples into an array, in this
|
|
225
|
+
# case:
|
|
226
|
+
#
|
|
227
|
+
# [ x, y, w, z ]
|
|
228
|
+
#
|
|
229
|
+
def typevar_tuple(self):
|
|
230
|
+
tvars = []
|
|
231
|
+
for tvar in self._params:
|
|
232
|
+
tp = tvar.typeof()
|
|
233
|
+
if tp.nominal():
|
|
234
|
+
tvars.append(tvar.typevar_tuple())
|
|
235
|
+
else:
|
|
236
|
+
tvars.append(tvar)
|
|
237
|
+
if len(tvars) == 1:
|
|
238
|
+
return tvars[0]
|
|
239
|
+
else:
|
|
240
|
+
return tuple(tvars)
|
|
241
|
+
|
|
242
|
+
# Helper method that returns the UnconstrainedSignature of this ConstrainedValueType
|
|
243
|
+
# in the special case where that tuple is a single BasicTypeVariable, raising
|
|
244
|
+
# an exception otherwise.
|
|
245
|
+
#
|
|
246
|
+
def value(self):
|
|
247
|
+
if self.signature_arity() != 1:
|
|
248
|
+
raise Exception(
|
|
249
|
+
f"Cannot refer to singleton value type variable for non-unary AbstractValueType {self.display()}")
|
|
250
|
+
else:
|
|
251
|
+
return self.typevar_tuple()
|
|
252
|
+
|
|
253
|
+
def constraint(self) -> bool:
|
|
254
|
+
return True
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def flatten_typevar_tuple(seq, tup):
|
|
258
|
+
if type(tup) is tuple:
|
|
259
|
+
for v in tup:
|
|
260
|
+
if tuple(v):
|
|
261
|
+
seq = flatten_typevar_tuple(seq, v)
|
|
262
|
+
else:
|
|
263
|
+
seq.append(v)
|
|
264
|
+
else:
|
|
265
|
+
seq.append(tup)
|
|
266
|
+
|
|
267
|
+
return seq
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
from v0.relationalai.early_access.dsl.core.instances import Instance, ValueTypeInstance
|
|
2
|
+
from v0.relationalai.early_access.dsl.core.types import Type
|
|
3
|
+
from v0.relationalai.early_access.dsl.core.types.constrained import ConstrainedValueType
|
|
4
|
+
from v0.relationalai.early_access.dsl.core.types.variables import NominalTypeVariable
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ValueType(ConstrainedValueType):
|
|
8
|
+
|
|
9
|
+
def __init__(self, nm, *args):
|
|
10
|
+
super().__init__(nm)
|
|
11
|
+
self._types = args
|
|
12
|
+
for arg in args:
|
|
13
|
+
self.build_scalar_variable([arg], {})
|
|
14
|
+
self.name_type_variables()
|
|
15
|
+
|
|
16
|
+
# Add TypeVariable *tv* as a parameter to this type
|
|
17
|
+
#
|
|
18
|
+
def addparam(self, tv):
|
|
19
|
+
self._params.append(tv)
|
|
20
|
+
return tv
|
|
21
|
+
|
|
22
|
+
def arity(self) -> int:
|
|
23
|
+
return len(self._params)
|
|
24
|
+
|
|
25
|
+
def build_scalar_variable(self, args, kwargs):
|
|
26
|
+
if len(args) == 0:
|
|
27
|
+
raise Exception(f"Unexpected error in ValueType {self.display()}")
|
|
28
|
+
|
|
29
|
+
if len(kwargs) != 0:
|
|
30
|
+
raise Exception(
|
|
31
|
+
f"Cannot use keyword arguments when instantiating a type parameter for ValueSubtype {self.display()}")
|
|
32
|
+
|
|
33
|
+
T = args[0]
|
|
34
|
+
if len(args) == 1:
|
|
35
|
+
|
|
36
|
+
# Then we are instantiating T to create a new TypeVariable that will parameterize
|
|
37
|
+
# this ValueType (self)
|
|
38
|
+
#
|
|
39
|
+
tv = T.ranges_over()
|
|
40
|
+
self.addparam(tv)
|
|
41
|
+
return tv
|
|
42
|
+
else:
|
|
43
|
+
self._type_constraints.add_atomic_constraint(self.build_atom(T, args[1:]))
|
|
44
|
+
|
|
45
|
+
def build_relation_variable(self, args, kwargs):
|
|
46
|
+
if len(args) == 0:
|
|
47
|
+
raise Exception(f"Unexpected error in ValueType {self.display()}")
|
|
48
|
+
|
|
49
|
+
if len(kwargs) != 0:
|
|
50
|
+
raise Exception(
|
|
51
|
+
f"Cannot use keyword arguments when instantiating a type parameter for ValueSubtype {self.display()}")
|
|
52
|
+
|
|
53
|
+
T = args[0]
|
|
54
|
+
if not isinstance(T, Type):
|
|
55
|
+
raise Exception("When an AtomicConstraint is asserted in context of a ValueType, the predicate must name a Type")
|
|
56
|
+
|
|
57
|
+
if len(args) == 1:
|
|
58
|
+
# Then we are instantiating T to create a new TypeVariable that will parameterize
|
|
59
|
+
# this ValueType (self)
|
|
60
|
+
#
|
|
61
|
+
|
|
62
|
+
tvar = T.ranges_over() # type: ignore
|
|
63
|
+
self.addparam(tvar)
|
|
64
|
+
|
|
65
|
+
return tvar.typevar_tuple()
|
|
66
|
+
|
|
67
|
+
else:
|
|
68
|
+
# Otherwise, we expect T to behave as a type predicate that is applied to a tuple
|
|
69
|
+
# (args[1:]) of BasicTypeVariables for the purpose of imposing T's constraints
|
|
70
|
+
# on those variables. We implement this by creating a renaming using tuple args[1:]
|
|
71
|
+
# and then applying that renaming to each constraint that T verifies, adding the
|
|
72
|
+
# result to the constraints declared by self.
|
|
73
|
+
#
|
|
74
|
+
self._type_constraints.add_atomic_constraint(self.build_atom(T, args[1:]))
|
|
75
|
+
|
|
76
|
+
# Generates the string used to display the opening declaration for this ValueType
|
|
77
|
+
#
|
|
78
|
+
def head_display(self):
|
|
79
|
+
headvars = []
|
|
80
|
+
for v in self._params:
|
|
81
|
+
vt = v.typeof()
|
|
82
|
+
headvars.append(f"{v.display()} in {vt.display()}")
|
|
83
|
+
head = ", ".join(headvars)
|
|
84
|
+
return f"value type {self.display()}({head})"
|
|
85
|
+
|
|
86
|
+
def instantiate(self, *tup):
|
|
87
|
+
|
|
88
|
+
cvars = self._params
|
|
89
|
+
if len(tup) != len(cvars):
|
|
90
|
+
raise Exception(
|
|
91
|
+
f"ValueType {self.display()} constructor expects {len(cvars)} arguments but was instantiated with {len(tup)}")
|
|
92
|
+
|
|
93
|
+
params = []
|
|
94
|
+
for i in range(len(cvars)):
|
|
95
|
+
arg = tup[i]
|
|
96
|
+
tp = cvars[i].decl
|
|
97
|
+
if isinstance(arg, Instance) or not tp.nominal():
|
|
98
|
+
params.append(arg)
|
|
99
|
+
else:
|
|
100
|
+
params.append(tp.instantiate(arg))
|
|
101
|
+
return ValueTypeInstance(self, params)
|
|
102
|
+
|
|
103
|
+
def nominal(self) -> bool:
|
|
104
|
+
return True
|
|
105
|
+
|
|
106
|
+
# Return a fresh type variable that ranges over this nominal ValueType
|
|
107
|
+
#
|
|
108
|
+
def ranges_over(self):
|
|
109
|
+
tvar = NominalTypeVariable(self)
|
|
110
|
+
|
|
111
|
+
# For each TypeVariable that parameterizes self, duplicate
|
|
112
|
+
# it to form a part of tvar
|
|
113
|
+
#
|
|
114
|
+
vmap = {}
|
|
115
|
+
for p in self._params:
|
|
116
|
+
(pprime, vmap) = p.dupe(vmap)
|
|
117
|
+
tvar._parts.append(pprime)
|
|
118
|
+
tvar._vmap = vmap
|
|
119
|
+
|
|
120
|
+
# Instantiate all scalar constraints from self using vmap
|
|
121
|
+
|
|
122
|
+
for c in self._type_constraints._sconstraints.values():
|
|
123
|
+
cnew = c.revar(vmap)
|
|
124
|
+
tvar._cset._sconstraints[id(cnew)] = cnew
|
|
125
|
+
|
|
126
|
+
for c in self._type_constraints._atoms:
|
|
127
|
+
cnew = c.revar(vmap)
|
|
128
|
+
tvar._cset._atoms[id(cnew)] = cnew
|
|
129
|
+
|
|
130
|
+
return tvar
|
|
131
|
+
|
|
132
|
+
def root_nominal_type(self): return self # type: ignore
|
|
133
|
+
|
|
134
|
+
# A non-composite ValueType can have a root unconstrained type.
|
|
135
|
+
#
|
|
136
|
+
def root_unconstrained_type(self):
|
|
137
|
+
if self.arity() == 1:
|
|
138
|
+
return self._params[0].typeof().root_unconstrained_type()
|
|
139
|
+
else:
|
|
140
|
+
raise Exception(f"Composite nominal type {self.display()} has no root unconstrained type")
|
|
141
|
+
|
|
142
|
+
def __str__(self):
|
|
143
|
+
return f"ValueType({self.display()})"
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
from v0.relationalai.early_access.dsl.core.types.constrained import ConstrainedValueType
|
|
2
|
+
from v0.relationalai.early_access.dsl.core.types.variables import NominalTypeVariable
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ValueSubtype(ConstrainedValueType):
|
|
6
|
+
|
|
7
|
+
def __init__(self, nm, *args):
|
|
8
|
+
super().__init__(nm)
|
|
9
|
+
for arg in args:
|
|
10
|
+
self.build_scalar_variable([arg], {})
|
|
11
|
+
self.name_type_variables()
|
|
12
|
+
|
|
13
|
+
def arity(self):
|
|
14
|
+
return self._parent.arity()
|
|
15
|
+
|
|
16
|
+
def build_scalar_variable(self, args, kwargs):
|
|
17
|
+
if len(args) == 0:
|
|
18
|
+
raise Exception(f"Unexpected error in ValueSubtype {self.display()}")
|
|
19
|
+
|
|
20
|
+
if len(kwargs) != 0:
|
|
21
|
+
raise Exception(
|
|
22
|
+
f"Cannot use keyword arguments when instantiating a type parameter for ValueSubtype {self.display()}")
|
|
23
|
+
|
|
24
|
+
ptype = args[0]
|
|
25
|
+
if len(args) == 1:
|
|
26
|
+
self._parent = ptype
|
|
27
|
+
tvar = ptype.ranges_over()
|
|
28
|
+
self._params = [tvar]
|
|
29
|
+
return self.typevar_tuple()
|
|
30
|
+
else:
|
|
31
|
+
self._type_constraints.add_atomic_constraint(self.build_atom(ptype, args[1:]))
|
|
32
|
+
|
|
33
|
+
def build_relation_variable(self, args, kwargs):
|
|
34
|
+
if len(args) == 0:
|
|
35
|
+
raise Exception(f"Unexpected error in ValueSubtype {self.display()}")
|
|
36
|
+
|
|
37
|
+
if len(args) > 1:
|
|
38
|
+
raise Exception(f"Cannot declare type variable of ValueSubtype {self.display()} by supplying more than a type")
|
|
39
|
+
|
|
40
|
+
if len(kwargs) != 0:
|
|
41
|
+
raise Exception(
|
|
42
|
+
f"Cannot use keyword arguments when instantiating a type parameter for ValueSubtype {self.display()}")
|
|
43
|
+
|
|
44
|
+
vtype = args[0]
|
|
45
|
+
self._parent = vtype
|
|
46
|
+
|
|
47
|
+
tvar = vtype.ranges_over()
|
|
48
|
+
self._params.append(tvar)
|
|
49
|
+
|
|
50
|
+
return tvar.typevar_tuple()
|
|
51
|
+
|
|
52
|
+
def instantiate(self, *val):
|
|
53
|
+
return self._parent.instantiate(val[0])
|
|
54
|
+
|
|
55
|
+
def nominal(self):
|
|
56
|
+
return self._parent.nominal()
|
|
57
|
+
|
|
58
|
+
# Return a fresh type variable that ranges over this ValueSubtype
|
|
59
|
+
#
|
|
60
|
+
def ranges_over(self):
|
|
61
|
+
|
|
62
|
+
# Self is a ValueSubtype, which is either nominal or not
|
|
63
|
+
|
|
64
|
+
if self.nominal():
|
|
65
|
+
# If nominal, then the variable that ranges over self must be a NominalTypeVariable
|
|
66
|
+
tvar = NominalTypeVariable(self)
|
|
67
|
+
tvar._parts = []
|
|
68
|
+
vmap = {}
|
|
69
|
+
selfparts = self._params[0]._parts
|
|
70
|
+
for p in selfparts:
|
|
71
|
+
(pprime, vmap) = p.dupe(vmap)
|
|
72
|
+
tvar._parts.append(pprime)
|
|
73
|
+
tvar._vmap = vmap
|
|
74
|
+
|
|
75
|
+
# Because tvar might have multiple part variables, any subtype constraints that constrain
|
|
76
|
+
# self will need to apply not to tvar.
|
|
77
|
+
|
|
78
|
+
# Instantiate all scalar constraints from vt using vmap
|
|
79
|
+
for c in self._type_constraints._sconstraints.values():
|
|
80
|
+
cnew = c.revar(vmap)
|
|
81
|
+
tvar._cset._sconstraints[id(cnew)] = cnew
|
|
82
|
+
|
|
83
|
+
for c in self._type_constraints._atoms:
|
|
84
|
+
cnew = c.revar(vmap)
|
|
85
|
+
tvar._cset._atoms[id(cnew)] = cnew
|
|
86
|
+
|
|
87
|
+
return tvar
|
|
88
|
+
|
|
89
|
+
else:
|
|
90
|
+
# If this type is not nominal, then it should have exactly one
|
|
91
|
+
# TypeVariable parameter, which we can dupe and then extend
|
|
92
|
+
# with any additional scalar constraints declared by this type.
|
|
93
|
+
#
|
|
94
|
+
lone_type_var = self._params[0]
|
|
95
|
+
|
|
96
|
+
(tvar, vmap) = lone_type_var.dupe()
|
|
97
|
+
vmap[id(lone_type_var)] = tvar
|
|
98
|
+
# tvar._vmap = vmap
|
|
99
|
+
tvar.decl = self
|
|
100
|
+
for c in self._type_constraints._sconstraints.values():
|
|
101
|
+
cnew = c.revar(vmap)
|
|
102
|
+
tvar._cset._sconstraints[id(cnew)] = cnew
|
|
103
|
+
return tvar
|
|
104
|
+
|
|
105
|
+
def head_display(self):
|
|
106
|
+
parent = self.parent()
|
|
107
|
+
headvars = []
|
|
108
|
+
for v in self._params:
|
|
109
|
+
vt = v.typeof()
|
|
110
|
+
if vt == parent:
|
|
111
|
+
headvars.append(f"{v.display()}")
|
|
112
|
+
else:
|
|
113
|
+
headvars.append(f"{v.display()} in {vt.display()}")
|
|
114
|
+
head = ", ".join(headvars)
|
|
115
|
+
return f"value type {self.display()} <: {parent.display()}({head})"
|
|
116
|
+
|
|
117
|
+
def parent(self):
|
|
118
|
+
return self._parent
|
|
119
|
+
|
|
120
|
+
def root_nominal_type(self):
|
|
121
|
+
return self._parent.root_nominal_type()
|
|
122
|
+
|
|
123
|
+
def root_unconstrained_type(self):
|
|
124
|
+
return self._parent.root_unconstrained_type()
|