relationalai 0.13.5__py3-none-any.whl → 1.0.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- relationalai/__init__.py +1 -256
- relationalai/config/__init__.py +56 -0
- relationalai/config/config.py +289 -0
- relationalai/config/config_fields.py +86 -0
- relationalai/config/connections/__init__.py +46 -0
- relationalai/config/connections/base.py +23 -0
- relationalai/config/connections/duckdb.py +29 -0
- relationalai/config/connections/snowflake.py +243 -0
- relationalai/config/external/__init__.py +17 -0
- relationalai/config/external/dbt_converter.py +101 -0
- relationalai/config/external/dbt_models.py +93 -0
- relationalai/config/external/snowflake_converter.py +41 -0
- relationalai/config/external/snowflake_models.py +85 -0
- relationalai/config/external/utils.py +19 -0
- relationalai/config/shims.py +1 -0
- relationalai/semantics/__init__.py +146 -22
- relationalai/semantics/backends/lqp/annotations.py +11 -0
- relationalai/semantics/backends/sql/sql_compiler.py +327 -0
- relationalai/semantics/frontend/base.py +1716 -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 -772
- 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 +1186 -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 +101 -46
- relationalai/shims/executor.py +161 -0
- relationalai/shims/helpers.py +126 -0
- relationalai/shims/hoister.py +221 -0
- relationalai/shims/mm2v0.py +1324 -0
- relationalai/tools/cli/__init__.py +6 -0
- relationalai/tools/cli/cli.py +90 -0
- relationalai/tools/cli/components/__init__.py +5 -0
- relationalai/tools/cli/components/progress_reader.py +1524 -0
- relationalai/tools/cli/components/utils.py +58 -0
- relationalai/tools/cli/config_template.py +45 -0
- relationalai/tools/cli/dev.py +19 -0
- relationalai/tools/debugger.py +289 -183
- relationalai/tools/typer_debugger.py +93 -0
- relationalai/util/dataclasses.py +43 -0
- relationalai/util/docutils.py +40 -0
- relationalai/util/error.py +199 -0
- relationalai/util/format.py +48 -109
- relationalai/util/naming.py +145 -0
- relationalai/util/python.py +35 -0
- relationalai/util/runtime.py +156 -0
- relationalai/util/schema.py +197 -0
- relationalai/util/source.py +185 -0
- relationalai/util/structures.py +163 -0
- relationalai/util/tracing.py +261 -0
- relationalai-1.0.0a1.dist-info/METADATA +44 -0
- relationalai-1.0.0a1.dist-info/RECORD +489 -0
- relationalai-1.0.0a1.dist-info/WHEEL +5 -0
- relationalai-1.0.0a1.dist-info/entry_points.txt +3 -0
- relationalai-1.0.0a1.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/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/ir.py +124 -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/__init__.py +18 -0
- v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +57 -0
- v0/relationalai/semantics/lqp/rewrite/cdc.py +216 -0
- v0/relationalai/semantics/lqp/rewrite/extract_common.py +338 -0
- v0/relationalai/semantics/lqp/rewrite/extract_keys.py +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/ir.py +923 -0
- v0/relationalai/semantics/metamodel/rewrite/__init__.py +7 -0
- v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +39 -0
- v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +210 -0
- v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +78 -0
- v0/relationalai/semantics/metamodel/rewrite/flatten.py +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/metamodel/visitor.py +944 -0
- v0/relationalai/semantics/reasoners/__init__.py +10 -0
- v0/relationalai/semantics/reasoners/graph/__init__.py +37 -0
- v0/relationalai/semantics/reasoners/graph/core.py +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 -946
- relationalai/clients/config.py +0 -673
- relationalai/clients/direct_access_client.py +0 -118
- relationalai/clients/exec_txn_poller.py +0 -153
- relationalai/clients/hash_util.py +0 -31
- relationalai/clients/local.py +0 -594
- relationalai/clients/profile_polling.py +0 -73
- relationalai/clients/resources/__init__.py +0 -8
- relationalai/clients/resources/azure/azure.py +0 -502
- relationalai/clients/resources/snowflake/__init__.py +0 -20
- relationalai/clients/resources/snowflake/cli_resources.py +0 -98
- relationalai/clients/resources/snowflake/direct_access_resources.py +0 -739
- relationalai/clients/resources/snowflake/engine_service.py +0 -381
- relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -315
- relationalai/clients/resources/snowflake/error_handlers.py +0 -240
- relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -249
- relationalai/clients/resources/snowflake/resources_factory.py +0 -99
- relationalai/clients/resources/snowflake/snowflake.py +0 -3193
- relationalai/clients/resources/snowflake/use_index_poller.py +0 -1019
- relationalai/clients/resources/snowflake/use_index_resources.py +0 -188
- relationalai/clients/resources/snowflake/util.py +0 -387
- relationalai/clients/result_helpers.py +0 -420
- relationalai/clients/types.py +0 -118
- relationalai/clients/util.py +0 -356
- relationalai/debugging.py +0 -389
- relationalai/dsl.py +0 -1749
- relationalai/early_access/builder/__init__.py +0 -30
- relationalai/early_access/builder/builder/__init__.py +0 -35
- relationalai/early_access/builder/snowflake/__init__.py +0 -12
- relationalai/early_access/builder/std/__init__.py +0 -25
- relationalai/early_access/builder/std/decimals/__init__.py +0 -12
- relationalai/early_access/builder/std/integers/__init__.py +0 -12
- relationalai/early_access/builder/std/math/__init__.py +0 -12
- relationalai/early_access/builder/std/strings/__init__.py +0 -14
- relationalai/early_access/devtools/__init__.py +0 -12
- relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -12
- relationalai/early_access/devtools/extract_lqp/__init__.py +0 -12
- relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -427
- relationalai/early_access/dsl/adapters/orm/parser.py +0 -636
- relationalai/early_access/dsl/adapters/owl/adapter.py +0 -176
- relationalai/early_access/dsl/adapters/owl/parser.py +0 -160
- relationalai/early_access/dsl/bindings/common.py +0 -402
- relationalai/early_access/dsl/bindings/csv.py +0 -170
- relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -143
- relationalai/early_access/dsl/bindings/snowflake.py +0 -64
- relationalai/early_access/dsl/codegen/binder.py +0 -411
- relationalai/early_access/dsl/codegen/common.py +0 -79
- relationalai/early_access/dsl/codegen/helpers.py +0 -23
- relationalai/early_access/dsl/codegen/relations.py +0 -700
- relationalai/early_access/dsl/codegen/weaver.py +0 -417
- relationalai/early_access/dsl/core/builders/__init__.py +0 -47
- relationalai/early_access/dsl/core/builders/logic.py +0 -19
- relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -11
- relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -455
- relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -73
- relationalai/early_access/dsl/core/constraints/scalar.py +0 -310
- relationalai/early_access/dsl/core/context.py +0 -13
- relationalai/early_access/dsl/core/cset.py +0 -132
- relationalai/early_access/dsl/core/exprs/__init__.py +0 -116
- relationalai/early_access/dsl/core/exprs/relational.py +0 -18
- relationalai/early_access/dsl/core/exprs/scalar.py +0 -412
- relationalai/early_access/dsl/core/instances.py +0 -44
- relationalai/early_access/dsl/core/logic/__init__.py +0 -193
- relationalai/early_access/dsl/core/logic/aggregation.py +0 -98
- relationalai/early_access/dsl/core/logic/exists.py +0 -223
- relationalai/early_access/dsl/core/logic/helper.py +0 -163
- relationalai/early_access/dsl/core/namespaces.py +0 -32
- relationalai/early_access/dsl/core/relations.py +0 -276
- relationalai/early_access/dsl/core/rules.py +0 -112
- relationalai/early_access/dsl/core/std/__init__.py +0 -45
- relationalai/early_access/dsl/core/temporal/recall.py +0 -6
- relationalai/early_access/dsl/core/types/__init__.py +0 -270
- relationalai/early_access/dsl/core/types/concepts.py +0 -128
- relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -267
- relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -143
- relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -124
- relationalai/early_access/dsl/core/types/standard.py +0 -92
- relationalai/early_access/dsl/core/types/unconstrained.py +0 -50
- relationalai/early_access/dsl/core/types/variables.py +0 -203
- relationalai/early_access/dsl/ir/compiler.py +0 -318
- relationalai/early_access/dsl/ir/executor.py +0 -260
- relationalai/early_access/dsl/ontologies/constraints.py +0 -88
- relationalai/early_access/dsl/ontologies/export.py +0 -30
- relationalai/early_access/dsl/ontologies/models.py +0 -453
- relationalai/early_access/dsl/ontologies/python_printer.py +0 -303
- relationalai/early_access/dsl/ontologies/readings.py +0 -60
- relationalai/early_access/dsl/ontologies/relationships.py +0 -322
- relationalai/early_access/dsl/ontologies/roles.py +0 -87
- relationalai/early_access/dsl/ontologies/subtyping.py +0 -55
- relationalai/early_access/dsl/orm/constraints.py +0 -438
- relationalai/early_access/dsl/orm/measures/dimensions.py +0 -200
- relationalai/early_access/dsl/orm/measures/initializer.py +0 -16
- relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -275
- relationalai/early_access/dsl/orm/measures/measures.py +0 -299
- relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -268
- relationalai/early_access/dsl/orm/models.py +0 -256
- relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -344
- relationalai/early_access/dsl/orm/printer.py +0 -469
- relationalai/early_access/dsl/orm/reasoners.py +0 -480
- relationalai/early_access/dsl/orm/relations.py +0 -19
- relationalai/early_access/dsl/orm/relationships.py +0 -251
- relationalai/early_access/dsl/orm/types.py +0 -42
- relationalai/early_access/dsl/orm/utils.py +0 -79
- relationalai/early_access/dsl/orm/verb.py +0 -204
- relationalai/early_access/dsl/physical_metadata/tables.py +0 -133
- relationalai/early_access/dsl/relations.py +0 -170
- relationalai/early_access/dsl/rulesets.py +0 -69
- relationalai/early_access/dsl/schemas/__init__.py +0 -450
- relationalai/early_access/dsl/schemas/builder.py +0 -48
- relationalai/early_access/dsl/schemas/comp_names.py +0 -51
- relationalai/early_access/dsl/schemas/components.py +0 -203
- relationalai/early_access/dsl/schemas/contexts.py +0 -156
- relationalai/early_access/dsl/schemas/exprs.py +0 -89
- relationalai/early_access/dsl/schemas/fragments.py +0 -464
- relationalai/early_access/dsl/serialization.py +0 -79
- relationalai/early_access/dsl/serialize/exporter.py +0 -163
- relationalai/early_access/dsl/snow/api.py +0 -105
- relationalai/early_access/dsl/snow/common.py +0 -76
- relationalai/early_access/dsl/state_mgmt/__init__.py +0 -129
- relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -125
- relationalai/early_access/dsl/state_mgmt/transitions.py +0 -130
- relationalai/early_access/dsl/types/__init__.py +0 -40
- relationalai/early_access/dsl/types/concepts.py +0 -12
- relationalai/early_access/dsl/types/entities.py +0 -135
- relationalai/early_access/dsl/types/values.py +0 -17
- relationalai/early_access/dsl/utils.py +0 -102
- relationalai/early_access/graphs/__init__.py +0 -13
- relationalai/early_access/lqp/__init__.py +0 -12
- relationalai/early_access/lqp/compiler/__init__.py +0 -12
- relationalai/early_access/lqp/constructors/__init__.py +0 -18
- relationalai/early_access/lqp/executor/__init__.py +0 -12
- relationalai/early_access/lqp/ir/__init__.py +0 -12
- relationalai/early_access/lqp/passes/__init__.py +0 -12
- relationalai/early_access/lqp/pragmas/__init__.py +0 -12
- relationalai/early_access/lqp/primitives/__init__.py +0 -12
- relationalai/early_access/lqp/types/__init__.py +0 -12
- relationalai/early_access/lqp/utils/__init__.py +0 -12
- relationalai/early_access/lqp/validators/__init__.py +0 -12
- relationalai/early_access/metamodel/__init__.py +0 -58
- relationalai/early_access/metamodel/builtins/__init__.py +0 -12
- relationalai/early_access/metamodel/compiler/__init__.py +0 -12
- relationalai/early_access/metamodel/dependency/__init__.py +0 -12
- relationalai/early_access/metamodel/factory/__init__.py +0 -17
- relationalai/early_access/metamodel/helpers/__init__.py +0 -12
- relationalai/early_access/metamodel/ir/__init__.py +0 -14
- relationalai/early_access/metamodel/rewrite/__init__.py +0 -7
- relationalai/early_access/metamodel/typer/__init__.py +0 -3
- relationalai/early_access/metamodel/typer/typer/__init__.py +0 -12
- relationalai/early_access/metamodel/types/__init__.py +0 -15
- relationalai/early_access/metamodel/util/__init__.py +0 -15
- relationalai/early_access/metamodel/visitor/__init__.py +0 -12
- relationalai/early_access/rel/__init__.py +0 -12
- relationalai/early_access/rel/executor/__init__.py +0 -12
- relationalai/early_access/rel/rel_utils/__init__.py +0 -12
- relationalai/early_access/rel/rewrite/__init__.py +0 -7
- relationalai/early_access/solvers/__init__.py +0 -19
- relationalai/early_access/sql/__init__.py +0 -11
- relationalai/early_access/sql/executor/__init__.py +0 -3
- relationalai/early_access/sql/rewrite/__init__.py +0 -3
- relationalai/early_access/tests/logging/__init__.py +0 -12
- relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -12
- relationalai/early_access/tests/utils/__init__.py +0 -12
- relationalai/environments/__init__.py +0 -35
- relationalai/environments/base.py +0 -381
- relationalai/environments/colab.py +0 -14
- relationalai/environments/generic.py +0 -71
- relationalai/environments/ipython.py +0 -68
- relationalai/environments/jupyter.py +0 -9
- relationalai/environments/snowbook.py +0 -169
- relationalai/errors.py +0 -2496
- relationalai/experimental/SF.py +0 -38
- relationalai/experimental/inspect.py +0 -47
- relationalai/experimental/pathfinder/__init__.py +0 -158
- relationalai/experimental/pathfinder/api.py +0 -160
- relationalai/experimental/pathfinder/automaton.py +0 -584
- relationalai/experimental/pathfinder/bridge.py +0 -226
- relationalai/experimental/pathfinder/compiler.py +0 -416
- relationalai/experimental/pathfinder/datalog.py +0 -214
- relationalai/experimental/pathfinder/diagnostics.py +0 -56
- relationalai/experimental/pathfinder/filter.py +0 -236
- relationalai/experimental/pathfinder/glushkov.py +0 -439
- relationalai/experimental/pathfinder/options.py +0 -265
- relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -1951
- relationalai/experimental/pathfinder/rpq.py +0 -344
- relationalai/experimental/pathfinder/transition.py +0 -200
- relationalai/experimental/pathfinder/utils.py +0 -26
- relationalai/experimental/paths/README.md +0 -107
- relationalai/experimental/paths/api.py +0 -143
- relationalai/experimental/paths/benchmarks/grid_graph.py +0 -37
- relationalai/experimental/paths/code_organization.md +0 -2
- relationalai/experimental/paths/examples/Movies.ipynb +0 -16328
- relationalai/experimental/paths/examples/basic_example.py +0 -40
- relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -3
- relationalai/experimental/paths/examples/movie_example.py +0 -77
- relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -193
- relationalai/experimental/paths/examples/movies_data/directed.csv +0 -45
- relationalai/experimental/paths/examples/movies_data/follows.csv +0 -7
- relationalai/experimental/paths/examples/movies_data/movies.csv +0 -39
- relationalai/experimental/paths/examples/movies_data/person.csv +0 -134
- relationalai/experimental/paths/examples/movies_data/produced.csv +0 -16
- relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -10
- relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -11
- relationalai/experimental/paths/examples/paths_benchmark.py +0 -115
- relationalai/experimental/paths/examples/paths_example.py +0 -116
- relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -28
- relationalai/experimental/paths/find_paths_via_automaton.py +0 -85
- relationalai/experimental/paths/graph.py +0 -185
- relationalai/experimental/paths/path_algorithms/find_paths.py +0 -280
- relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -26
- relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -111
- relationalai/experimental/paths/path_algorithms/single.py +0 -59
- relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -39
- relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -103
- relationalai/experimental/paths/path_algorithms/usp-old.py +0 -130
- relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -183
- relationalai/experimental/paths/path_algorithms/usp.py +0 -150
- relationalai/experimental/paths/product_graph.py +0 -93
- relationalai/experimental/paths/rpq/automaton.py +0 -584
- relationalai/experimental/paths/rpq/diagnostics.py +0 -56
- relationalai/experimental/paths/rpq/rpq.py +0 -378
- relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -90
- relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -119
- relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -104
- relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -113
- relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -149
- relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -70
- relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -64
- relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -115
- relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -75
- relationalai/experimental/paths/tests/tests_single_paths.py +0 -152
- relationalai/experimental/paths/tests/tests_single_walks.py +0 -208
- relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -297
- relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -107
- relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -76
- relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -76
- relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -110
- relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -229
- relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -108
- relationalai/experimental/paths/tree_agg.py +0 -168
- relationalai/experimental/paths/utilities/iterators.py +0 -27
- relationalai/experimental/paths/utilities/prefix_sum.py +0 -91
- relationalai/experimental/solvers.py +0 -1095
- relationalai/loaders/csv.py +0 -195
- relationalai/loaders/loader.py +0 -177
- relationalai/loaders/types.py +0 -23
- relationalai/rel_emitter.py +0 -373
- relationalai/rel_utils.py +0 -185
- relationalai/semantics/designs/query_builder/identify_by.md +0 -106
- relationalai/semantics/devtools/benchmark_lqp.py +0 -535
- relationalai/semantics/devtools/compilation_manager.py +0 -294
- relationalai/semantics/devtools/extract_lqp.py +0 -110
- relationalai/semantics/internal/internal.py +0 -3785
- relationalai/semantics/internal/snowflake.py +0 -329
- relationalai/semantics/lqp/README.md +0 -34
- relationalai/semantics/lqp/algorithms.py +0 -173
- relationalai/semantics/lqp/builtins.py +0 -213
- relationalai/semantics/lqp/compiler.py +0 -22
- relationalai/semantics/lqp/constructors.py +0 -68
- relationalai/semantics/lqp/executor.py +0 -518
- relationalai/semantics/lqp/export_rewriter.py +0 -40
- relationalai/semantics/lqp/intrinsics.py +0 -24
- relationalai/semantics/lqp/ir.py +0 -150
- relationalai/semantics/lqp/model2lqp.py +0 -1056
- relationalai/semantics/lqp/passes.py +0 -38
- relationalai/semantics/lqp/primitives.py +0 -252
- relationalai/semantics/lqp/result_helpers.py +0 -266
- relationalai/semantics/lqp/rewrite/__init__.py +0 -32
- relationalai/semantics/lqp/rewrite/algorithm.py +0 -385
- relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -69
- relationalai/semantics/lqp/rewrite/cdc.py +0 -216
- relationalai/semantics/lqp/rewrite/constants_to_vars.py +0 -70
- relationalai/semantics/lqp/rewrite/deduplicate_vars.py +0 -104
- relationalai/semantics/lqp/rewrite/eliminate_data.py +0 -108
- relationalai/semantics/lqp/rewrite/extract_common.py +0 -340
- relationalai/semantics/lqp/rewrite/extract_keys.py +0 -577
- relationalai/semantics/lqp/rewrite/flatten_script.py +0 -301
- relationalai/semantics/lqp/rewrite/function_annotations.py +0 -114
- relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -348
- relationalai/semantics/lqp/rewrite/period_math.py +0 -77
- relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -339
- relationalai/semantics/lqp/rewrite/splinter.py +0 -76
- relationalai/semantics/lqp/rewrite/unify_definitions.py +0 -323
- relationalai/semantics/lqp/types.py +0 -101
- relationalai/semantics/lqp/utils.py +0 -170
- relationalai/semantics/lqp/validators.py +0 -70
- relationalai/semantics/metamodel/compiler.py +0 -134
- relationalai/semantics/metamodel/dependency.py +0 -880
- relationalai/semantics/metamodel/executor.py +0 -78
- relationalai/semantics/metamodel/factory.py +0 -287
- relationalai/semantics/metamodel/helpers.py +0 -368
- relationalai/semantics/metamodel/ir.py +0 -924
- relationalai/semantics/metamodel/rewrite/__init__.py +0 -8
- relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -39
- relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -220
- relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -78
- relationalai/semantics/metamodel/rewrite/flatten.py +0 -590
- relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -256
- relationalai/semantics/metamodel/rewrite/handle_aggregations_and_ranks.py +0 -237
- relationalai/semantics/metamodel/typer/checker.py +0 -355
- relationalai/semantics/metamodel/typer/typer.py +0 -1396
- relationalai/semantics/metamodel/util.py +0 -506
- relationalai/semantics/metamodel/visitor.py +0 -945
- relationalai/semantics/reasoners/__init__.py +0 -10
- relationalai/semantics/reasoners/graph/README.md +0 -620
- relationalai/semantics/reasoners/graph/__init__.py +0 -37
- relationalai/semantics/reasoners/graph/core.py +0 -9019
- relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -797
- relationalai/semantics/reasoners/graph/tests/README.md +0 -21
- relationalai/semantics/reasoners/optimization/__init__.py +0 -68
- relationalai/semantics/reasoners/optimization/common.py +0 -88
- relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -568
- relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -1407
- relationalai/semantics/rel/builtins.py +0 -40
- relationalai/semantics/rel/compiler.py +0 -994
- relationalai/semantics/rel/executor.py +0 -363
- relationalai/semantics/rel/rel.py +0 -482
- relationalai/semantics/rel/rel_utils.py +0 -276
- relationalai/semantics/snowflake/__init__.py +0 -3
- relationalai/semantics/sql/compiler.py +0 -2503
- relationalai/semantics/sql/executor/duck_db.py +0 -52
- relationalai/semantics/sql/executor/result_helpers.py +0 -64
- relationalai/semantics/sql/executor/snowflake.py +0 -149
- relationalai/semantics/sql/rewrite/denormalize.py +0 -222
- relationalai/semantics/sql/rewrite/double_negation.py +0 -49
- relationalai/semantics/sql/rewrite/recursive_union.py +0 -127
- relationalai/semantics/sql/rewrite/sort_output_query.py +0 -246
- relationalai/semantics/sql/sql.py +0 -504
- relationalai/semantics/std/pragmas.py +0 -11
- relationalai/semantics/std/std.py +0 -14
- relationalai/semantics/tests/lqp/algorithms.py +0 -345
- relationalai/semantics/tests/test_snapshot_abstract.py +0 -144
- relationalai/semantics/tests/test_snapshot_base.py +0 -9
- relationalai/semantics/tests/utils.py +0 -46
- relationalai/std/__init__.py +0 -70
- relationalai/tools/cli.py +0 -2089
- relationalai/tools/cli_controls.py +0 -1975
- relationalai/tools/cli_helpers.py +0 -802
- relationalai/tools/debugger_client.py +0 -109
- relationalai/tools/debugger_server.py +0 -302
- relationalai/tools/dev.py +0 -685
- relationalai/tools/notes +0 -7
- relationalai/tools/qb_debugger.py +0 -425
- relationalai/tools/txn_progress.py +0 -188
- relationalai/util/clean_up_databases.py +0 -95
- relationalai/util/list_databases.py +0 -9
- relationalai/util/otel_configuration.py +0 -26
- relationalai/util/otel_handler.py +0 -484
- relationalai/util/snowflake_handler.py +0 -88
- relationalai/util/span_format_test.py +0 -43
- relationalai/util/span_tracker.py +0 -207
- relationalai/util/spans_file_handler.py +0 -72
- relationalai/util/tracing_handler.py +0 -34
- relationalai-0.13.5.dist-info/METADATA +0 -74
- relationalai-0.13.5.dist-info/RECORD +0 -473
- relationalai-0.13.5.dist-info/WHEEL +0 -4
- relationalai-0.13.5.dist-info/entry_points.txt +0 -3
- relationalai-0.13.5.dist-info/licenses/LICENSE +0 -202
- relationalai_test_util/__init__.py +0 -4
- relationalai_test_util/fixtures.py +0 -233
- relationalai_test_util/snapshot.py +0 -252
- relationalai_test_util/traceback.py +0 -118
- /relationalai/{analysis → semantics/frontend}/__init__.py +0 -0
- /relationalai/{auth/__init__.py → semantics/metamodel/metamodel_compiler.py} +0 -0
- /relationalai/{early_access → shims}/__init__.py +0 -0
- {relationalai/early_access/dsl/adapters → v0/relationalai/analysis}/__init__.py +0 -0
- {relationalai → v0/relationalai}/analysis/mechanistic.py +0 -0
- {relationalai → v0/relationalai}/analysis/whynot.py +0 -0
- {relationalai/early_access/dsl/adapters/orm → v0/relationalai/auth}/__init__.py +0 -0
- {relationalai → v0/relationalai}/auth/jwt_generator.py +0 -0
- {relationalai → v0/relationalai}/auth/oauth_callback_server.py +0 -0
- {relationalai → v0/relationalai}/auth/token_handler.py +0 -0
- {relationalai → v0/relationalai}/auth/util.py +0 -0
- {relationalai/clients/resources/snowflake → v0/relationalai/clients}/cache_store.py +0 -0
- {relationalai → v0/relationalai}/compiler.py +0 -0
- {relationalai → v0/relationalai}/dependencies.py +0 -0
- {relationalai → v0/relationalai}/docutils.py +0 -0
- {relationalai/early_access/dsl/adapters/owl → v0/relationalai/early_access}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/__init__.py +0 -0
- {relationalai/early_access/dsl/bindings → v0/relationalai/early_access/dsl/adapters}/__init__.py +0 -0
- {relationalai/early_access/dsl/bindings/legacy → v0/relationalai/early_access/dsl/adapters/orm}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai/early_access/dsl/codegen → v0/relationalai/early_access/dsl/adapters/owl}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai/early_access/dsl/core/temporal → v0/relationalai/early_access/dsl/bindings}/__init__.py +0 -0
- {relationalai/early_access/dsl/ir → v0/relationalai/early_access/dsl/bindings/legacy}/__init__.py +0 -0
- {relationalai/early_access/dsl/ontologies → v0/relationalai/early_access/dsl/codegen}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/constants.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/stack.py +0 -0
- {relationalai/early_access/dsl/orm → v0/relationalai/early_access/dsl/core/temporal}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/core/utils.py +0 -0
- {relationalai/early_access/dsl/orm/measures → v0/relationalai/early_access/dsl/ir}/__init__.py +0 -0
- {relationalai/early_access/dsl/physical_metadata → v0/relationalai/early_access/dsl/ontologies}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai/early_access/dsl/serialize → v0/relationalai/early_access/dsl/orm}/__init__.py +0 -0
- {relationalai/early_access/dsl/snow → v0/relationalai/early_access/dsl/orm/measures}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai/loaders → v0/relationalai/early_access/dsl/physical_metadata}/__init__.py +0 -0
- {relationalai/semantics/tests → v0/relationalai/early_access/dsl/serialize}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai → v0/relationalai}/early_access/dsl/serialize/model.py +0 -0
- {relationalai/semantics/tests/lqp → v0/relationalai/early_access/dsl/snow}/__init__.py +0 -0
- {relationalai → v0/relationalai}/early_access/tests/__init__.py +0 -0
- {relationalai → v0/relationalai}/environments/ci.py +0 -0
- {relationalai → v0/relationalai}/environments/hex.py +0 -0
- {relationalai → v0/relationalai}/environments/terminal.py +0 -0
- {relationalai → v0/relationalai}/experimental/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/graphs.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/filter.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/rpq/transition.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/utilities/__init__.py +0 -0
- {relationalai → v0/relationalai}/experimental/paths/utilities/utilities.py +0 -0
- {relationalai/tools → v0/relationalai/loaders}/__init__.py +0 -0
- {relationalai → v0/relationalai}/metagen.py +0 -0
- {relationalai → v0/relationalai}/metamodel.py +0 -0
- {relationalai → v0/relationalai}/rel.py +0 -0
- {relationalai → v0/relationalai}/semantics/devtools/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/internal/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/internal/annotations.py +0 -0
- {relationalai → v0/relationalai}/semantics/lqp/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/lqp/pragmas.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/dataflow.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/metamodel/types.py +0 -0
- {relationalai → v0/relationalai}/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/rel/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/sql/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/sql/executor/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai → v0/relationalai}/semantics/tests/logging.py +0 -0
- {relationalai → v0/relationalai}/std/aggregates.py +0 -0
- {relationalai → v0/relationalai}/std/dates.py +0 -0
- {relationalai → v0/relationalai}/std/graphs.py +0 -0
- {relationalai → v0/relationalai}/std/inspect.py +0 -0
- {relationalai → v0/relationalai}/std/math.py +0 -0
- {relationalai → v0/relationalai}/std/re.py +0 -0
- {relationalai → v0/relationalai}/std/strings.py +0 -0
- {relationalai → v0/relationalai}/tools/cleanup_snapshots.py +0 -0
- {relationalai → v0/relationalai}/tools/constants.py +0 -0
- {relationalai → v0/relationalai}/tools/query_utils.py +0 -0
- {relationalai → v0/relationalai}/tools/snapshot_viewer.py +0 -0
- {relationalai → v0/relationalai}/util/__init__.py +0 -0
- {relationalai → v0/relationalai}/util/constants.py +0 -0
- {relationalai → v0/relationalai}/util/graph.py +0 -0
- {relationalai → v0/relationalai}/util/timeout.py +0 -0
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
|
|
3
|
-
from relationalai.early_access.dsl.core.exprs import contextStack
|
|
4
|
-
from relationalai.early_access.dsl.core.namespaces import Namespace
|
|
5
|
-
from relationalai.early_access.dsl.core.rules import Rule
|
|
6
|
-
from relationalai.early_access.dsl.core.utils import camel_to_snake
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def addrule(rul): return contextStack.root_context().addrule(rul)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# A @rule decorator that can be used to register a rule, optionally with one or more
|
|
13
|
-
# annotations.
|
|
14
|
-
#
|
|
15
|
-
# Examples:
|
|
16
|
-
# @rule(Annotation.INNER_LOOP_NON_STRATIFIED, ...)
|
|
17
|
-
# def my_rule():
|
|
18
|
-
# ...
|
|
19
|
-
#
|
|
20
|
-
# @rule()
|
|
21
|
-
# def my_other_rule():
|
|
22
|
-
# ...
|
|
23
|
-
def rule(*annotations):
|
|
24
|
-
def decorator(func):
|
|
25
|
-
rule_instance = addrule(func)
|
|
26
|
-
for annotation in annotations:
|
|
27
|
-
rule_instance.annotate(annotation)
|
|
28
|
-
return func
|
|
29
|
-
|
|
30
|
-
return decorator
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class AbstractRelation:
|
|
34
|
-
class NullContainer:
|
|
35
|
-
def name(self): return ""
|
|
36
|
-
|
|
37
|
-
def entity(self): return False
|
|
38
|
-
|
|
39
|
-
# A Relation can serve as a context for declaring rules that
|
|
40
|
-
# populate that relation and also for declaring constraints
|
|
41
|
-
# that pertain only to this single relation -- e.g., functional
|
|
42
|
-
# and mandatory constraints.
|
|
43
|
-
#
|
|
44
|
-
def __enter__(self):
|
|
45
|
-
contextStack.push(self)
|
|
46
|
-
return self
|
|
47
|
-
|
|
48
|
-
def __exit__(self, exc_type, exc_value, traceback):
|
|
49
|
-
contextStack.pop()
|
|
50
|
-
pass
|
|
51
|
-
|
|
52
|
-
# A Relation can be "invoked" in the body of a rule definition to
|
|
53
|
-
# declare what will be an Atom in the Schema generated by the rule
|
|
54
|
-
# def.
|
|
55
|
-
#
|
|
56
|
-
# Note that because Schemas expect these Atoms to be defined on
|
|
57
|
-
# RelationComponents, we have to make sure that such a component
|
|
58
|
-
# exists in the Schema in context.
|
|
59
|
-
#
|
|
60
|
-
def __call__(self, *args):
|
|
61
|
-
context = contextStack.root_context()
|
|
62
|
-
if context is not None:
|
|
63
|
-
return context.build_atom(self, args)
|
|
64
|
-
return None
|
|
65
|
-
|
|
66
|
-
def __init__(self, namespace, name, sig):
|
|
67
|
-
self._relname = name
|
|
68
|
-
self._container = namespace
|
|
69
|
-
self._signature = sig
|
|
70
|
-
self._rules = []
|
|
71
|
-
|
|
72
|
-
# The "rule" to add is a function object with a number of parameters that should
|
|
73
|
-
# equal the number of roles in this Relation.
|
|
74
|
-
#
|
|
75
|
-
def addrule(self, rule):
|
|
76
|
-
if not isinstance(rule, Rule):
|
|
77
|
-
# Assume that rule is a Python function that, when invoked can build a rule
|
|
78
|
-
rule = Rule(self).elaborate(rule)
|
|
79
|
-
|
|
80
|
-
self._rules.append(rule)
|
|
81
|
-
return rule
|
|
82
|
-
|
|
83
|
-
def rules(self):
|
|
84
|
-
return self._rules
|
|
85
|
-
|
|
86
|
-
def arity(self):
|
|
87
|
-
return self._signature.arity()
|
|
88
|
-
|
|
89
|
-
def binary(self) -> bool:
|
|
90
|
-
return self.arity() == 2
|
|
91
|
-
|
|
92
|
-
def display(self):
|
|
93
|
-
return self.qualified_name()
|
|
94
|
-
|
|
95
|
-
def entityid(self):
|
|
96
|
-
return hash(self.qualified_name())
|
|
97
|
-
|
|
98
|
-
# Generates a new Rule that populates this relation, returning a tuple whose
|
|
99
|
-
# first component is the Rule object and whose next n-1 components are the
|
|
100
|
-
# free variables of this rule in order. Allows one to construct new rules that
|
|
101
|
-
# populate a relation and get a handle on all free variables individually using
|
|
102
|
-
# one method call, e.g.:
|
|
103
|
-
#
|
|
104
|
-
# (rule, x, y, z) = relation.genrule()
|
|
105
|
-
#
|
|
106
|
-
def genrule(self):
|
|
107
|
-
rule = Rule(self)
|
|
108
|
-
self._rules.append(rule)
|
|
109
|
-
tup = [rule]
|
|
110
|
-
for v in rule.freevars():
|
|
111
|
-
tup.append(v)
|
|
112
|
-
return tuple(tup)
|
|
113
|
-
|
|
114
|
-
def pprint(self):
|
|
115
|
-
return self.display() + self._signature.display()
|
|
116
|
-
|
|
117
|
-
# Returns the fully-qualified name that will be used in queries to
|
|
118
|
-
# refer to this Relation.
|
|
119
|
-
#
|
|
120
|
-
def qualified_name(self):
|
|
121
|
-
if not isinstance(self._container, Namespace):
|
|
122
|
-
raise Exception(f"Cannot find containing namespace for Relation named {self._relname}")
|
|
123
|
-
|
|
124
|
-
if self._container == Namespace.top:
|
|
125
|
-
return self._relname
|
|
126
|
-
else:
|
|
127
|
-
# TODO: [VAMI] We changed `::` to `__` to spead up E2E testing. We should change it back to `::` before release.
|
|
128
|
-
return f"{self._container.qualified_name()}__{self._relname}"
|
|
129
|
-
|
|
130
|
-
def signature(self):
|
|
131
|
-
return self._signature
|
|
132
|
-
|
|
133
|
-
def rel_name(self):
|
|
134
|
-
return self._relname
|
|
135
|
-
|
|
136
|
-
def first(self):
|
|
137
|
-
return self._signature.first()
|
|
138
|
-
|
|
139
|
-
class Relation(AbstractRelation):
|
|
140
|
-
|
|
141
|
-
def __init__(self, namespace, reading, relationship, functional=False):
|
|
142
|
-
super().__init__(namespace, reading.to_rel_name(),
|
|
143
|
-
RelationSignature(*reading.types(), functional=functional))
|
|
144
|
-
self._reading = reading
|
|
145
|
-
self._relationship = relationship
|
|
146
|
-
|
|
147
|
-
def __getattr__(self, item):
|
|
148
|
-
if item in self.__dict__:
|
|
149
|
-
return self.__dict__[item]
|
|
150
|
-
return self._relationship.role_by_name(item)
|
|
151
|
-
|
|
152
|
-
def reading(self):
|
|
153
|
-
return self._reading
|
|
154
|
-
|
|
155
|
-
def relationship(self):
|
|
156
|
-
return self._relationship
|
|
157
|
-
|
|
158
|
-
class AssertedRelation(AbstractRelation):
|
|
159
|
-
"""
|
|
160
|
-
A relation that's assumed to be defined in the target system, but cannot be verified.
|
|
161
|
-
|
|
162
|
-
This is used as a common parent class for such relations, and the compiler makes sure to
|
|
163
|
-
not generate any unnecessary constructs for them.
|
|
164
|
-
"""
|
|
165
|
-
def __init__(self, namespace, name, sig):
|
|
166
|
-
super().__init__(namespace, name, sig)
|
|
167
|
-
|
|
168
|
-
class ExternalRelation(AssertedRelation):
|
|
169
|
-
|
|
170
|
-
def __init__(self, namespace, name, sig):
|
|
171
|
-
super().__init__(namespace, name, sig)
|
|
172
|
-
|
|
173
|
-
class ExportRelation(AssertedRelation):
|
|
174
|
-
|
|
175
|
-
def __init__(self, namespace, name, sig):
|
|
176
|
-
super().__init__(namespace, name, sig)
|
|
177
|
-
|
|
178
|
-
class EntityPopulationRelation(AbstractRelation):
|
|
179
|
-
|
|
180
|
-
def __init__(self, namespace, name, sig):
|
|
181
|
-
super().__init__(namespace, name, sig)
|
|
182
|
-
|
|
183
|
-
class EntityInstanceRelation(AbstractRelation):
|
|
184
|
-
|
|
185
|
-
def __init__(self, namespace, name, sig):
|
|
186
|
-
type = sig.first()
|
|
187
|
-
# Instance relations are in type's namespace
|
|
188
|
-
type_namespace = Namespace(camel_to_snake(type.display()), namespace)
|
|
189
|
-
super().__init__(type_namespace, name, sig)
|
|
190
|
-
|
|
191
|
-
class AbstractRelationSignature:
|
|
192
|
-
|
|
193
|
-
def __init__(self, *types):
|
|
194
|
-
self._types = types
|
|
195
|
-
|
|
196
|
-
def __call__(self, *args, **kwargs):
|
|
197
|
-
seq = [self]
|
|
198
|
-
for i in range(len(args)):
|
|
199
|
-
seq.append(args[i])
|
|
200
|
-
context = contextStack.root_context()
|
|
201
|
-
if context is not None:
|
|
202
|
-
return context.build_relation_variable(seq, kwargs)
|
|
203
|
-
return None
|
|
204
|
-
|
|
205
|
-
def arity(self):
|
|
206
|
-
return len(self._types)
|
|
207
|
-
|
|
208
|
-
def entityid(self):
|
|
209
|
-
relhash = hash([r.entityid() for r in self._types])
|
|
210
|
-
if self.functional():
|
|
211
|
-
return hash((relhash, True))
|
|
212
|
-
else:
|
|
213
|
-
return hash((relhash, False))
|
|
214
|
-
|
|
215
|
-
def relational(self) -> bool:
|
|
216
|
-
return True
|
|
217
|
-
|
|
218
|
-
# An n-ary AbstractRelationSignature is functional if its n-th column
|
|
219
|
-
# is functionally dependent on the first n-1 columns.
|
|
220
|
-
#
|
|
221
|
-
@abstractmethod
|
|
222
|
-
def functional(self) -> bool:
|
|
223
|
-
"""Return True when relation is functional otherwise False."""
|
|
224
|
-
|
|
225
|
-
def domainsig(self):
|
|
226
|
-
if self.functional():
|
|
227
|
-
a = self.arity()
|
|
228
|
-
return self._types[0:a - 1]
|
|
229
|
-
else:
|
|
230
|
-
return self._types
|
|
231
|
-
|
|
232
|
-
def rangesig(self):
|
|
233
|
-
if self.functional():
|
|
234
|
-
return self._types[self.arity() - 1]
|
|
235
|
-
else:
|
|
236
|
-
return None
|
|
237
|
-
|
|
238
|
-
def types(self):
|
|
239
|
-
return self._types
|
|
240
|
-
|
|
241
|
-
def display(self):
|
|
242
|
-
dsp = [r.display() for r in self.domainsig() if r is not None]
|
|
243
|
-
dom = "(" + ", ".join(dsp) + ")"
|
|
244
|
-
range_sig = self.rangesig()
|
|
245
|
-
if range_sig is not None:
|
|
246
|
-
return f"{dom} -> {range_sig.display()}"
|
|
247
|
-
else:
|
|
248
|
-
return dom
|
|
249
|
-
|
|
250
|
-
# An AbstractRelationSignature is a subtype of another if the two have the
|
|
251
|
-
# same number of types and in each corresponding type pair (t1, t2),
|
|
252
|
-
# the type that plays t1 is a subtype of the type that plays t2.
|
|
253
|
-
#
|
|
254
|
-
def subtype_of(self, sig2):
|
|
255
|
-
if self.arity() != sig2.arity():
|
|
256
|
-
return False
|
|
257
|
-
|
|
258
|
-
for i in range(self.arity()):
|
|
259
|
-
if not self._types[i].subtype_of(sig2._types[i]):
|
|
260
|
-
return False
|
|
261
|
-
|
|
262
|
-
return True
|
|
263
|
-
|
|
264
|
-
def first(self):
|
|
265
|
-
return self._types[0]
|
|
266
|
-
|
|
267
|
-
class RelationSignature(AbstractRelationSignature):
|
|
268
|
-
|
|
269
|
-
def __init__(self, *types, functional=False):
|
|
270
|
-
super().__init__(*types)
|
|
271
|
-
self._is_functional = functional
|
|
272
|
-
|
|
273
|
-
def set_functional(self, functional: bool) -> None:
|
|
274
|
-
self._is_functional = functional
|
|
275
|
-
|
|
276
|
-
def functional(self): return self._is_functional
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
from relationalai.early_access.dsl.core import tempvar
|
|
4
|
-
from relationalai.early_access.dsl.core.builders.logic import LogicBuilder
|
|
5
|
-
from relationalai.early_access.dsl.core.exprs import contextStack
|
|
6
|
-
from relationalai.early_access.dsl.core.exprs.scalar import ScalarExprBuilder
|
|
7
|
-
from relationalai.early_access.dsl.core.logic import LogicFragment, RelVariable
|
|
8
|
-
from relationalai.early_access.dsl.core.logic.exists import ExistentialConstraint
|
|
9
|
-
from relationalai.early_access.dsl.core.types import Type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class Annotation(Enum):
|
|
13
|
-
FUNCTION = 1
|
|
14
|
-
INLINE = 2
|
|
15
|
-
ITER = 3
|
|
16
|
-
INNER_LOOP = 4
|
|
17
|
-
INNER_LOOP_NON_STRATIFIED = 5
|
|
18
|
-
FORCE_DNF = 6
|
|
19
|
-
|
|
20
|
-
def display(self):
|
|
21
|
-
return f"@{self}"
|
|
22
|
-
|
|
23
|
-
def __str__(self):
|
|
24
|
-
return self.name.lower()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class Rule(LogicFragment, ScalarExprBuilder):
|
|
28
|
-
|
|
29
|
-
def __enter__(self):
|
|
30
|
-
contextStack.push(self)
|
|
31
|
-
return self
|
|
32
|
-
|
|
33
|
-
def __exit__(self, exc_type, exc_value, traceback):
|
|
34
|
-
contextStack.pop()
|
|
35
|
-
|
|
36
|
-
# Partially construct this Rule by creating a head atom and an array of free variables
|
|
37
|
-
# from a Relation (rel)
|
|
38
|
-
#
|
|
39
|
-
def __init__(self, rel):
|
|
40
|
-
LogicFragment.__init__(self)
|
|
41
|
-
fvars = []
|
|
42
|
-
for i in range(rel._signature.arity()):
|
|
43
|
-
type = rel._signature._types[i]
|
|
44
|
-
var = self.build_scalar_variable([type, tempvar(i)], {})
|
|
45
|
-
fvars.append(var)
|
|
46
|
-
|
|
47
|
-
self.head = LogicBuilder.build_atom(self, rel, fvars)
|
|
48
|
-
self._populates = rel
|
|
49
|
-
self._freevars = fvars
|
|
50
|
-
self._annotations = []
|
|
51
|
-
|
|
52
|
-
def annotate(self, a):
|
|
53
|
-
self._annotations.append(a)
|
|
54
|
-
return self
|
|
55
|
-
|
|
56
|
-
# Elaborates the body of this rule by invoking a Python function that, when
|
|
57
|
-
# supplied with the array of free variables declared by this rule will populate
|
|
58
|
-
# the conjuncts that make up the body of the rule.
|
|
59
|
-
#
|
|
60
|
-
def elaborate(self, func):
|
|
61
|
-
with self.genexists(): # type: ignore
|
|
62
|
-
func(*(self.freevars()))
|
|
63
|
-
return self
|
|
64
|
-
|
|
65
|
-
def genexists(self):
|
|
66
|
-
x = ExistentialConstraint.build_existential()
|
|
67
|
-
self._existentials[id(x)] = x
|
|
68
|
-
return x
|
|
69
|
-
|
|
70
|
-
def freevars(self):
|
|
71
|
-
return tuple(self._freevars)
|
|
72
|
-
|
|
73
|
-
def populates(self): return self._populates
|
|
74
|
-
|
|
75
|
-
def pprint(self):
|
|
76
|
-
annotations = "\n".join([a.display() for a in self._annotations])
|
|
77
|
-
head = self.head.pprint()
|
|
78
|
-
body = self.rel_formula()
|
|
79
|
-
rule = f"def {head}:\n{body}"
|
|
80
|
-
if annotations != "":
|
|
81
|
-
return annotations + "\n" + rule
|
|
82
|
-
else:
|
|
83
|
-
return rule
|
|
84
|
-
|
|
85
|
-
# Returns a new Rule that duplicates self after mapping every
|
|
86
|
-
# Relation referred to by an atom through relmap
|
|
87
|
-
#
|
|
88
|
-
def map(self, relmap):
|
|
89
|
-
newrel = relmap[self.populates().entityid()]
|
|
90
|
-
r = Rule(newrel)
|
|
91
|
-
r._sconstraints = self._sconstraints
|
|
92
|
-
r._atoms = {}
|
|
93
|
-
for a in self._atoms:
|
|
94
|
-
newatom = a.map(relmap)
|
|
95
|
-
r._atoms[newatom.entityid()] = newatom
|
|
96
|
-
r._existentials = {}
|
|
97
|
-
for e in self._existentials.values():
|
|
98
|
-
ext = e.map(relmap)
|
|
99
|
-
r._existentials[ext.entityid()] = ext
|
|
100
|
-
return r
|
|
101
|
-
|
|
102
|
-
def Vars(*args: Type):
|
|
103
|
-
vars = []
|
|
104
|
-
size = contextStack.size()
|
|
105
|
-
for i, t in enumerate(args):
|
|
106
|
-
if isinstance(t, RelVariable):
|
|
107
|
-
vars.append(t)
|
|
108
|
-
else:
|
|
109
|
-
vars.append(t(f'_x{i}_{size}'))
|
|
110
|
-
if len(vars) == 1:
|
|
111
|
-
return vars[0]
|
|
112
|
-
return tuple(vars)
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
from relationalai.early_access.dsl.core.namespaces import Namespace
|
|
2
|
-
from relationalai.early_access.dsl.core.relations import RelationSignature, ExternalRelation
|
|
3
|
-
from relationalai.early_access.dsl.core.types import Type
|
|
4
|
-
from relationalai.early_access.dsl.core.types.standard import DateTime, Date, PositiveInteger, Decimal, String, Symbol, \
|
|
5
|
-
Any, Integer
|
|
6
|
-
|
|
7
|
-
#=
|
|
8
|
-
# StdLib.
|
|
9
|
-
#=
|
|
10
|
-
|
|
11
|
-
standard_relations = {}
|
|
12
|
-
|
|
13
|
-
parse_date_name = "parse_date"
|
|
14
|
-
parse_date = ExternalRelation(Namespace.top, parse_date_name, RelationSignature(String, String, Date))
|
|
15
|
-
standard_relations[parse_date_name] = parse_date
|
|
16
|
-
|
|
17
|
-
parse_datetime_name = "parse_datetime"
|
|
18
|
-
parse_datetime = ExternalRelation(Namespace.top, parse_datetime_name, RelationSignature(String, String, DateTime))
|
|
19
|
-
standard_relations[parse_datetime_name] = parse_datetime
|
|
20
|
-
|
|
21
|
-
parse_decimal_name = "parse_decimal"
|
|
22
|
-
parse_decimal = ExternalRelation(Namespace.top, parse_decimal_name, RelationSignature(PositiveInteger, PositiveInteger, String, Decimal))
|
|
23
|
-
standard_relations[parse_decimal_name] = parse_decimal
|
|
24
|
-
|
|
25
|
-
power_name = "power"
|
|
26
|
-
power = ExternalRelation(Namespace.top, power_name, RelationSignature(Integer, Integer, Integer))
|
|
27
|
-
standard_relations[power_name] = power
|
|
28
|
-
|
|
29
|
-
unpack_name = "unpack"
|
|
30
|
-
def unpack(*sig: Type):
|
|
31
|
-
return ExternalRelation(Namespace.top, unpack_name, RelationSignature(*sig))
|
|
32
|
-
standard_relations[unpack_name] = unpack
|
|
33
|
-
|
|
34
|
-
decimal_ctor_name = "decimal"
|
|
35
|
-
new_decimal = ExternalRelation(Namespace.top, decimal_ctor_name, RelationSignature(Integer, Integer, Integer, Decimal))
|
|
36
|
-
standard_relations[decimal_ctor_name] = new_decimal
|
|
37
|
-
|
|
38
|
-
#=
|
|
39
|
-
# Rel Mirror.
|
|
40
|
-
#=
|
|
41
|
-
|
|
42
|
-
mirror_lower_name = "mirror_lower"
|
|
43
|
-
mirror_lower_rel_name = "::std::mirror::lower"
|
|
44
|
-
mirror_lower = ExternalRelation(Namespace.top, mirror_lower_rel_name, RelationSignature(Symbol, Any))
|
|
45
|
-
standard_relations[mirror_lower_rel_name] = mirror_lower
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
|
|
3
|
-
from relationalai.early_access.dsl.core.exprs import contextStack
|
|
4
|
-
from relationalai.early_access.dsl.core.namespaces import Namespace
|
|
5
|
-
from relationalai.early_access.dsl.core.types.variables import TypeVariable
|
|
6
|
-
from relationalai.early_access.dsl.core.utils import generate_stable_uuid
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# This abstract class generalizes over all types
|
|
10
|
-
#
|
|
11
|
-
class Type:
|
|
12
|
-
|
|
13
|
-
# A Type T can be "instantiated" for one of several purposes, depending
|
|
14
|
-
# on context:
|
|
15
|
-
#
|
|
16
|
-
# 1) in the context of a ConstrainedValueType, to add a parameter TypeVariable
|
|
17
|
-
# to that type; and
|
|
18
|
-
# 2) in the context of a ConjunctiveSchema:
|
|
19
|
-
# a) if the argument is a string name, then adds a new ScalarComponent of
|
|
20
|
-
# that name to the schema; or
|
|
21
|
-
# b) if the argument is a ScalarVariable, then adds an atom that references
|
|
22
|
-
# the unary population relation for the EntityType in a Rel body formula
|
|
23
|
-
#
|
|
24
|
-
# In case (1), there should be no arguments (args); in case (2a), we expect there
|
|
25
|
-
# to be exactly one string argument that names the component being added to the
|
|
26
|
-
# SchemaFragment; while in context (2b) we expect there to be exactly one argument
|
|
27
|
-
# of type ScalarVariable.
|
|
28
|
-
#
|
|
29
|
-
# Because we use RelationVariables to range over the parameters of a nominal value
|
|
30
|
-
# type, to properly handle case (1) we have to call one of:
|
|
31
|
-
#
|
|
32
|
-
# - build_relation_variable
|
|
33
|
-
# - build_scalar_variable
|
|
34
|
-
#
|
|
35
|
-
# depending on whether T is a nominal type. But that distinction is really only
|
|
36
|
-
# relevant to case (1) -- which means the concrete builder objects that implement
|
|
37
|
-
# the ScalarConstraintBuilder interface for cases (2a) and (2b) must implement
|
|
38
|
-
# both methods the same way.
|
|
39
|
-
#
|
|
40
|
-
def __call__(self, *args, **kwargs):
|
|
41
|
-
seq = [self]
|
|
42
|
-
for i in range(len(args)):
|
|
43
|
-
seq.append(args[i])
|
|
44
|
-
|
|
45
|
-
if self.nominal() or self.entity():
|
|
46
|
-
return contextStack.root_context().build_relation_variable(seq, kwargs)
|
|
47
|
-
else:
|
|
48
|
-
return contextStack.root_context().build_scalar_variable(seq, kwargs)
|
|
49
|
-
|
|
50
|
-
def __enter__(self):
|
|
51
|
-
contextStack.push(self)
|
|
52
|
-
return self
|
|
53
|
-
|
|
54
|
-
def __exit__(self, exc_type, exc_value, traceback):
|
|
55
|
-
contextStack.pop()
|
|
56
|
-
|
|
57
|
-
def __init__(self, nm):
|
|
58
|
-
self._name = nm
|
|
59
|
-
#
|
|
60
|
-
if not contextStack.empty():
|
|
61
|
-
tp = contextStack.root_context()
|
|
62
|
-
if isinstance(tp, Namespace):
|
|
63
|
-
self._namespace = tp
|
|
64
|
-
else:
|
|
65
|
-
self._namespace = Namespace.top
|
|
66
|
-
else:
|
|
67
|
-
self._namespace = Namespace.top
|
|
68
|
-
|
|
69
|
-
# Returns the number of TypeVariables that parameterize this Type
|
|
70
|
-
#
|
|
71
|
-
def arity(self) -> int:
|
|
72
|
-
return 1
|
|
73
|
-
|
|
74
|
-
def display(self):
|
|
75
|
-
return self._name
|
|
76
|
-
|
|
77
|
-
# Returns True if this type is an EntityType or one of its subtypes
|
|
78
|
-
# and False otherwise
|
|
79
|
-
#
|
|
80
|
-
def entity(self) -> bool:
|
|
81
|
-
return False
|
|
82
|
-
|
|
83
|
-
# Returns an integer (hash) that identifies this Type, allowing us
|
|
84
|
-
# to treat Types sort of like entity types for which we had declared
|
|
85
|
-
# a preferred identifier to allow different physical objects to unify
|
|
86
|
-
# to the same entity. Contrast this with the "id" method which would
|
|
87
|
-
# not allow us to do this unification.
|
|
88
|
-
#
|
|
89
|
-
def entityid(self):
|
|
90
|
-
return hash(self._name)
|
|
91
|
-
|
|
92
|
-
def guid(self):
|
|
93
|
-
return generate_stable_uuid(self._name)
|
|
94
|
-
|
|
95
|
-
# Returns the Rel required to instantiate an instance of this Type
|
|
96
|
-
# from a given value val. By default, just return val; subclasses
|
|
97
|
-
# will override as appropriate
|
|
98
|
-
#
|
|
99
|
-
def instantiate(self, *val):
|
|
100
|
-
return val[0]
|
|
101
|
-
|
|
102
|
-
def namespace(self):
|
|
103
|
-
return self._namespace
|
|
104
|
-
|
|
105
|
-
# This predicate returns True if this type is a ValueType or
|
|
106
|
-
# some subtype of a ValueType.
|
|
107
|
-
#
|
|
108
|
-
def nominal(self) -> bool:
|
|
109
|
-
return False
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
class AbstractValueType(Type):
|
|
113
|
-
|
|
114
|
-
def __init__(self, nm):
|
|
115
|
-
Type.__init__(self, nm)
|
|
116
|
-
|
|
117
|
-
# Returns true if self is both unconstrained and also numeric, meaning its constraints
|
|
118
|
-
# (if any) can be statically verified.
|
|
119
|
-
#
|
|
120
|
-
def basic_numeric(self) -> bool: return False
|
|
121
|
-
|
|
122
|
-
# Returns True if the Python constant `val` is an instance of this ValueType
|
|
123
|
-
def contains(self, val) -> bool: return False
|
|
124
|
-
|
|
125
|
-
# Gathers the set of BasicTypeVariable constraints that this AbstractValueType denotes
|
|
126
|
-
# either by declaring or inheriting.
|
|
127
|
-
#
|
|
128
|
-
def denotes(self): return {}
|
|
129
|
-
|
|
130
|
-
# Returns true if this is a nominal value type or a subtype that is rooted by a nominal
|
|
131
|
-
# value type
|
|
132
|
-
#
|
|
133
|
-
def nominal(self) -> bool: return False
|
|
134
|
-
|
|
135
|
-
# Returns true if this is a constraint value type or a subtype that is rooted by a constrained
|
|
136
|
-
# value type
|
|
137
|
-
#
|
|
138
|
-
def constraint(self) -> bool: return False
|
|
139
|
-
|
|
140
|
-
# Returns true if this is a constraint value type or a subtype that is rooted by a constrained
|
|
141
|
-
# value type and signature_arity is 1
|
|
142
|
-
#
|
|
143
|
-
def constraint_unary(self) -> bool:
|
|
144
|
-
return self.constraint() and self.unary()
|
|
145
|
-
|
|
146
|
-
# Creates a new TypeVariable that ranges over this AbstractValueType, including all
|
|
147
|
-
# constraints (if any) suitably instantiated to the new TypeVariable
|
|
148
|
-
#
|
|
149
|
-
@abstractmethod
|
|
150
|
-
def ranges_over(self) -> TypeVariable: pass
|
|
151
|
-
|
|
152
|
-
# Where possible, returns the lone UnconstrainedValueType that will be used as the physical
|
|
153
|
-
# representation of instances of this AbstractValueType at runtime.
|
|
154
|
-
#
|
|
155
|
-
def root_nominal_type(self):
|
|
156
|
-
raise Exception(f"Cannot determine root nominal type of AbstractValueType {self.display()}")
|
|
157
|
-
|
|
158
|
-
# The signature arity of a AbstractValueType refers to the number of BasicTypeVariables
|
|
159
|
-
# that occur in its physical implementation. For UnconstrainedValueTypes, the arity is 1.
|
|
160
|
-
# For ConstrainedValueTypes, the arity is the size of the flattened basic-type variable
|
|
161
|
-
# tuple that it constrains.
|
|
162
|
-
#
|
|
163
|
-
def signature_arity(self) -> int: return 1
|
|
164
|
-
|
|
165
|
-
# Returns true if this is a value type has signature_arity == 1
|
|
166
|
-
#
|
|
167
|
-
def unary(self):
|
|
168
|
-
return self.signature_arity() == 1
|
|
169
|
-
|
|
170
|
-
def subtype_of(self, T2):
|
|
171
|
-
if self.nominal():
|
|
172
|
-
if not T2.nominal():
|
|
173
|
-
return False
|
|
174
|
-
|
|
175
|
-
# Both are nominal value types, so make sure names are the same
|
|
176
|
-
#
|
|
177
|
-
nt1 = self.root_nominal_type()
|
|
178
|
-
nt2 = T2.root_nominal_type()
|
|
179
|
-
if nt1.display() != nt2.display():
|
|
180
|
-
return False
|
|
181
|
-
else:
|
|
182
|
-
if T2.nominal():
|
|
183
|
-
return False
|
|
184
|
-
|
|
185
|
-
# Neither type is nominal, so check if one or both are unconstrained
|
|
186
|
-
|
|
187
|
-
if self.unconstrained():
|
|
188
|
-
return self.display() == T2.display()
|
|
189
|
-
|
|
190
|
-
if T2.unconstrained():
|
|
191
|
-
u2 = self.root_unconstrained_type() # type: ignore
|
|
192
|
-
return T2.display() == u2.display()
|
|
193
|
-
|
|
194
|
-
# All nominal type checking has passed and neither type is Unconstrained
|
|
195
|
-
|
|
196
|
-
if self.signature_arity() != T2.signature_arity():
|
|
197
|
-
return False
|
|
198
|
-
|
|
199
|
-
# Types have same signature arities, so check constraints on type variables.
|
|
200
|
-
|
|
201
|
-
mapping = map_type_var_tuple_to(self.typevar_tuple(), T2.typevar_tuple())
|
|
202
|
-
|
|
203
|
-
if len(mapping) != self.signature_arity():
|
|
204
|
-
return False
|
|
205
|
-
|
|
206
|
-
# Same typevar tuples, so now just check that the every models of self is also
|
|
207
|
-
# a model of T2.
|
|
208
|
-
#
|
|
209
|
-
cset1 = {}
|
|
210
|
-
for c in self.denotes().values():
|
|
211
|
-
cprime = c.rename(mapping)
|
|
212
|
-
cset1[cprime.entityid()] = cprime
|
|
213
|
-
|
|
214
|
-
return True
|
|
215
|
-
|
|
216
|
-
# Returns true if this type is Unconstrained
|
|
217
|
-
#
|
|
218
|
-
def unconstrained(self) -> bool:
|
|
219
|
-
return False
|
|
220
|
-
|
|
221
|
-
@abstractmethod
|
|
222
|
-
def typevar_tuple(self) -> tuple[TypeVariable, ...]:
|
|
223
|
-
pass
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
def basic_type_instance(val):
|
|
227
|
-
if isinstance(val, str):
|
|
228
|
-
return True
|
|
229
|
-
if isinstance(val, int):
|
|
230
|
-
return True
|
|
231
|
-
if isinstance(val, float):
|
|
232
|
-
return True
|
|
233
|
-
return False
|
|
234
|
-
|
|
235
|
-
def map_type_var_tuple_to(tup1, tup2):
|
|
236
|
-
return map_type_var_tuple_to_rec(tup1, tup2, {})
|
|
237
|
-
|
|
238
|
-
def map_type_var_tuple_to_rec(tup1, tup2, m):
|
|
239
|
-
if type(tup1) is tuple:
|
|
240
|
-
if type(tup2) is not tuple:
|
|
241
|
-
return {}
|
|
242
|
-
|
|
243
|
-
v1 = tup1[0]
|
|
244
|
-
v2 = tup2[0]
|
|
245
|
-
m[v1.display()] = v2
|
|
246
|
-
return map_type_var_tuple_to_rec(tup1[1:], tup2[1:], m)
|
|
247
|
-
else:
|
|
248
|
-
if type(tup2) is tuple:
|
|
249
|
-
return {}
|
|
250
|
-
m[tup1.display()] = tup2
|
|
251
|
-
|
|
252
|
-
return m
|
|
253
|
-
|
|
254
|
-
def typevar_tuple_string_rec(tup) -> str:
|
|
255
|
-
if type(tup) is not tuple:
|
|
256
|
-
return tup.display()
|
|
257
|
-
|
|
258
|
-
results = [typevar_tuple_string_rec(v) for v in tup]
|
|
259
|
-
|
|
260
|
-
if len(results) == 1:
|
|
261
|
-
return results[0]
|
|
262
|
-
else:
|
|
263
|
-
return "(" + ", ".join(results) + ")"
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
def typevar_tuple_string(tup) -> str:
|
|
267
|
-
if type(tup) is not tuple:
|
|
268
|
-
return f"({tup.display()})"
|
|
269
|
-
else:
|
|
270
|
-
return typevar_tuple_string_rec(tup)
|