relationalai 1.0.0a2__tar.gz → 1.0.0a4__tar.gz
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-1.0.0a2 → relationalai-1.0.0a4}/PKG-INFO +5 -3
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/README.md +23 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/pyproject.toml +5 -3
- relationalai-1.0.0a4/src/relationalai/config/shims.py +2 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/__init__.py +7 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/base.py +19 -13
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/core.py +30 -2
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/front_compiler.py +38 -11
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/pprint.py +1 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/rewriter.py +6 -2
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/typer.py +70 -26
- relationalai-1.0.0a4/src/relationalai/semantics/reasoners/__init__.py +11 -0
- relationalai-1.0.0a4/src/relationalai/semantics/reasoners/graph/__init__.py +38 -0
- relationalai-1.0.0a4/src/relationalai/semantics/reasoners/graph/core.py +9015 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/shims/executor.py +4 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/shims/hoister.py +9 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/shims/mm2v0.py +47 -34
- relationalai-1.0.0a4/src/relationalai/tools/cli/cli.py +228 -0
- relationalai-1.0.0a4/src/relationalai/tools/cli/docs.py +394 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai.egg-info/PKG-INFO +5 -3
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai.egg-info/SOURCES.txt +18 -4
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai.egg-info/requires.txt +4 -2
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/__init__.py +69 -22
- relationalai-1.0.0a4/src/v0/relationalai/clients/__init__.py +18 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/client.py +4 -4
- relationalai-1.0.0a4/src/v0/relationalai/clients/exec_txn_poller.py +91 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/local.py +5 -5
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/__init__.py +8 -0
- {relationalai-1.0.0a2/src/v0/relationalai/clients → relationalai-1.0.0a4/src/v0/relationalai/clients/resources/azure}/azure.py +12 -12
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/__init__.py +20 -0
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/cli_resources.py +87 -0
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/direct_access_resources.py +717 -0
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/engine_state_handlers.py +309 -0
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/error_handlers.py +199 -0
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/resources_factory.py +99 -0
- {relationalai-1.0.0a2/src/v0/relationalai/clients → relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake}/snowflake.py +642 -1399
- {relationalai-1.0.0a2/src/v0/relationalai/clients → relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake}/use_index_poller.py +51 -12
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/use_index_resources.py +188 -0
- relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake/util.py +387 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ir/executor.py +4 -4
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/snow/api.py +2 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/errors.py +18 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/solvers.py +7 -7
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/benchmark_lqp.py +4 -5
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/extract_lqp.py +1 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/snowflake.py +1 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/executor.py +7 -12
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/extract_keys.py +25 -3
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/util.py +6 -5
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +335 -84
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/executor.py +14 -11
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/snowflake.py +9 -5
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/test_snapshot_abstract.py +1 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cli.py +26 -30
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cli_helpers.py +10 -2
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/otel_configuration.py +2 -1
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/otel_handler.py +1 -1
- relationalai-1.0.0a2/src/relationalai/config/shims.py +0 -1
- relationalai-1.0.0a2/src/relationalai/tools/cli/cli.py +0 -90
- relationalai-1.0.0a2/src/v0/relationalai/clients/__init__.py +0 -5
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/setup.cfg +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/config.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/config_fields.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/connections/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/connections/base.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/connections/duckdb.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/connections/snowflake.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/external/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/external/dbt_converter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/external/dbt_models.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/external/snowflake_converter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/external/snowflake_models.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/config/external/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/backends/lqp/annotations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/backends/sql/sql_compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/builtins.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/metamodel.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/metamodel_analyzer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/metamodel_compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/pprint.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/aggregates.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/common.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/numbers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/shims/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/shims/helpers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/cli/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/cli/components/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/cli/components/progress_reader.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/cli/components/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/cli/config_template.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/cli/dev.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/tools/typer_debugger.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/dataclasses.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/docutils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/error.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/format.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/naming.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/python.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/runtime.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/schema.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/source.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/structures.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/util/tracing.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai.egg-info/dependency_links.txt +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai.egg-info/entry_points.txt +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai.egg-info/top_level.txt +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/analysis/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/analysis/whynot.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/auth/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/auth/token_handler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/auth/util.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/config.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/hash_util.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/profile_polling.py +0 -0
- {relationalai-1.0.0a2/src/v0/relationalai/clients → relationalai-1.0.0a4/src/v0/relationalai/clients/resources/snowflake}/cache_store.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/result_helpers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/types.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/clients/util.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/debugging.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/dependencies.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/docutils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/dsl.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/base.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/ci.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/colab.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/generic.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/hex.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/ipython.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/jupyter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/snowbook.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/environments/terminal.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/SF.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/graphs.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/inspect.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/api.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/csv.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/loader.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/types.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/metagen.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/metamodel.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/rel.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/rel_emitter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/rel_utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/internal.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/constructors.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/intrinsics.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/model2lqp.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/passes.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/builtins.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/helpers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/graph/core.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/floats.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/integers.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/math.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/re.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/std.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/strings.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/aggregates.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/dates.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/graphs.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/inspect.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/math.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/re.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/std/strings.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cli_controls.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/constants.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/debugger.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/debugger_client.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/debugger_server.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/dev.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/query_utils.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/__init__.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/constants.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/format.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/graph.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/list_databases.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/span_format_test.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/span_tracker.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/timeout.py +0 -0
- {relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/v0/relationalai/util/tracing_handler.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: relationalai
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0a4
|
|
4
4
|
Summary: RelationalAI Library and CLI
|
|
5
5
|
Author-email: RelationalAI <support@relational.ai>
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -15,10 +15,9 @@ Requires-Dist: numpy<2
|
|
|
15
15
|
Requires-Dist: pandas
|
|
16
16
|
Requires-Dist: colorama
|
|
17
17
|
Requires-Dist: inquirerpy
|
|
18
|
-
Requires-Dist: click
|
|
18
|
+
Requires-Dist: click
|
|
19
19
|
Requires-Dist: gravis
|
|
20
20
|
Requires-Dist: toml
|
|
21
|
-
Requires-Dist: tomlkit
|
|
22
21
|
Requires-Dist: requests
|
|
23
22
|
Requires-Dist: pyarrow
|
|
24
23
|
Requires-Dist: websockets
|
|
@@ -35,6 +34,9 @@ Requires-Dist: sqlglot
|
|
|
35
34
|
Requires-Dist: pyyaml
|
|
36
35
|
Requires-Dist: pydantic<2.12.0,>=2.0.0
|
|
37
36
|
Requires-Dist: pydantic-settings<2.11.0,>=2.0.0
|
|
37
|
+
Requires-Dist: tomlkit
|
|
38
|
+
Requires-Dist: fastapi
|
|
39
|
+
Requires-Dist: uvicorn[standard]
|
|
38
40
|
Provides-Extra: dev
|
|
39
41
|
Requires-Dist: pytest; extra == "dev"
|
|
40
42
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -15,6 +15,29 @@ make install
|
|
|
15
15
|
make sync
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
### Running Tests
|
|
19
|
+
|
|
20
|
+
The repository includes two test suites that can be run using Make commands:
|
|
21
|
+
|
|
22
|
+
**Unified tests** (general test suite):
|
|
23
|
+
```bash
|
|
24
|
+
make test # run all unified tests
|
|
25
|
+
make test unions # run tests matching "q03"
|
|
26
|
+
make test "unions or strings" # run tests matching pattern with spaces
|
|
27
|
+
make test unions --update # run tests and update snapshots
|
|
28
|
+
make test --update # update snapshots for all tests
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**TPCH tests** (TPC-H benchmark queries):
|
|
32
|
+
```bash
|
|
33
|
+
make tpch # run all TPCH tests
|
|
34
|
+
make tpch q01 # run only q01
|
|
35
|
+
make tpch q22 --update # run q22 and update snapshots
|
|
36
|
+
make tpch --update # update snapshots for all TPCH tests
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The `--update` flag (or `-u` for short) can be placed before or after the pattern.
|
|
40
|
+
|
|
18
41
|
### Docstrings
|
|
19
42
|
|
|
20
43
|
API reference documentation is generated from docstrings in the code.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = 'relationalai'
|
|
3
|
-
version = '1.0.
|
|
3
|
+
version = '1.0.0a4'
|
|
4
4
|
description = 'RelationalAI Library and CLI'
|
|
5
5
|
readme="docs/pypi/README.md"
|
|
6
6
|
authors = [
|
|
@@ -18,10 +18,9 @@ dependencies = [
|
|
|
18
18
|
"pandas",
|
|
19
19
|
"colorama",
|
|
20
20
|
"inquirerpy",
|
|
21
|
-
"click
|
|
21
|
+
"click",
|
|
22
22
|
"gravis",
|
|
23
23
|
"toml",
|
|
24
|
-
"tomlkit",
|
|
25
24
|
"requests",
|
|
26
25
|
"pyarrow",
|
|
27
26
|
"websockets",
|
|
@@ -40,6 +39,9 @@ dependencies = [
|
|
|
40
39
|
# "confocal @ git+https://github.com/joshuafcole/confocal.git",
|
|
41
40
|
"pydantic>=2.0.0,<2.12.0",
|
|
42
41
|
"pydantic-settings>=2.0.0,<2.11.0",
|
|
42
|
+
"tomlkit",
|
|
43
|
+
"fastapi",
|
|
44
|
+
"uvicorn[standard]",
|
|
43
45
|
]
|
|
44
46
|
[project.optional-dependencies]
|
|
45
47
|
dev = [
|
|
@@ -120,6 +120,7 @@ Date = core.Date
|
|
|
120
120
|
DateTime = core.DateTime
|
|
121
121
|
# RawSource = core.RawSource
|
|
122
122
|
# Hash = core.Hash
|
|
123
|
+
Error = core.Error
|
|
123
124
|
|
|
124
125
|
#------------------------------------------------------
|
|
125
126
|
# Convenience aggregates
|
|
@@ -147,7 +148,12 @@ per = aggs.per
|
|
|
147
148
|
__all__ = [
|
|
148
149
|
"Alias", "CoreLibrary", "Concept", "Data", "Distinct", "Expression", "Field", "FieldRef", "Fragment",
|
|
149
150
|
"Library", "Literal", "Match", "Model", "New", "Not", "Chain", "Property", "Reading", "Relationship",
|
|
150
|
-
"Table", "Union", "Value", "Variable", "core",
|
|
151
|
+
"Table", "Union", "Value", "Variable", "core", "Error",
|
|
152
|
+
"Any", "AnyEntity", "TypeVar", "EntityTypeVar",
|
|
153
|
+
"Number", "String", "Integer", "Int", "Int64", "Int128", "Float", "Decimal", "Bool", "Boolean", "Date", "DateTime",
|
|
154
|
+
|
|
155
|
+
"rank", "limit", "asc", "desc",
|
|
156
|
+
"count", "sum", "min", "max", "avg", "string_join", "per",
|
|
151
157
|
|
|
152
158
|
"select", "define", "where", "require", "union", "data", "not_",
|
|
153
159
|
]
|
|
@@ -6,7 +6,7 @@ import decimal
|
|
|
6
6
|
import math
|
|
7
7
|
import re
|
|
8
8
|
import datetime as dt
|
|
9
|
-
from typing import TYPE_CHECKING, Any,
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Iterator, NoReturn, Optional, Sequence, Tuple, Type, TypeGuard, cast
|
|
10
10
|
import itertools
|
|
11
11
|
from more_itertools import peekable
|
|
12
12
|
from pandas import DataFrame
|
|
@@ -19,7 +19,7 @@ from ...util.naming import Namer, sanitize
|
|
|
19
19
|
from ...util.python import pytype_to_concept_name
|
|
20
20
|
from ...util.source import SourcePos
|
|
21
21
|
from ...util.tracing import get_tracer
|
|
22
|
-
from ...util.error import
|
|
22
|
+
from ...util.error import exc, warn, source
|
|
23
23
|
from ...util.docutils import include_in_docs
|
|
24
24
|
from ..metamodel.builtins import builtins
|
|
25
25
|
from ..metamodel.metamodel import Model as mModel
|
|
@@ -236,16 +236,16 @@ class Variable(DSLBase):
|
|
|
236
236
|
invalid = next((bool_check for bool_check in ["if ", "while ", " and ", " or "] if bool_check in cur_source), "bool check").strip()
|
|
237
237
|
mapped = {"and": "`&` or `,`", "or": "`|`", "if": "`where`"}
|
|
238
238
|
if m := mapped.get(invalid):
|
|
239
|
-
exc(
|
|
239
|
+
exc("Invalid operator", f"Cannot use python's `{invalid}` in model expressions. Use {m} instead.", [source(self)])
|
|
240
240
|
else:
|
|
241
|
-
exc(
|
|
241
|
+
exc("Invalid operator", f"Cannot use python's `{invalid}` in model expressions.", [source(self)])
|
|
242
242
|
|
|
243
243
|
if not TYPE_CHECKING:
|
|
244
244
|
def __iter__(self):
|
|
245
245
|
common_incorrect = ["sum", "min", "max"]
|
|
246
246
|
for agg in common_incorrect:
|
|
247
247
|
if agg in self._source.block.source:
|
|
248
|
-
exc(
|
|
248
|
+
exc("Invalid built-in", f"The Python built-in `{agg}()` was used instead of the RAI equivalent.", [
|
|
249
249
|
source(self),
|
|
250
250
|
f"Use [cyan]`relationalai.semantics.std.aggregates.{agg}`[/cyan] instead.",
|
|
251
251
|
])
|
|
@@ -405,7 +405,7 @@ class Ref(Variable):
|
|
|
405
405
|
def _to_concept(self) -> Concept:
|
|
406
406
|
return self._concept
|
|
407
407
|
|
|
408
|
-
def
|
|
408
|
+
def filter_by(self, **kwargs: Any) -> Expression:
|
|
409
409
|
return FilterBy(self, kwargs)
|
|
410
410
|
|
|
411
411
|
#------------------------------------------------------
|
|
@@ -741,7 +741,7 @@ class Reading(Relationship):
|
|
|
741
741
|
precision = fields[part].type._precision
|
|
742
742
|
scale = fields[part].type._scale
|
|
743
743
|
if scale == 0:
|
|
744
|
-
correct_type_name =
|
|
744
|
+
correct_type_name = "Integer"
|
|
745
745
|
else:
|
|
746
746
|
correct_type_name = f"Number.size({precision},{scale})"
|
|
747
747
|
if type_name.lower() != fields[part].name and correct_type_name.lower() != fields[part].name:
|
|
@@ -782,7 +782,13 @@ class Literal(Variable):
|
|
|
782
782
|
if type(value) is float and (math.isnan(value) or math.isinf(value)):
|
|
783
783
|
return CoreConcepts["Float"]
|
|
784
784
|
if type(value) is float:
|
|
785
|
-
|
|
785
|
+
if math.isnan(value):
|
|
786
|
+
fractional_digits = 0
|
|
787
|
+
else:
|
|
788
|
+
str_value = str(value)
|
|
789
|
+
if 'e' in str_value:
|
|
790
|
+
str_value = format(decimal.Decimal(value), 'f')
|
|
791
|
+
fractional_digits = min(len(str_value.split('.')[1]) if '.' in str_value else 1, 14)
|
|
786
792
|
return CoreConcepts["Decimal"].size(38, fractional_digits) # type: ignore
|
|
787
793
|
if type(value) is decimal.Decimal:
|
|
788
794
|
str_value = format(value, 'f')
|
|
@@ -1000,17 +1006,17 @@ class AsBool(Variable):
|
|
|
1000
1006
|
class Alias(Variable):
|
|
1001
1007
|
def __init__(self, source: Variable, alias: str):
|
|
1002
1008
|
super().__init__(source._model)
|
|
1003
|
-
self.
|
|
1009
|
+
self._source_item = source
|
|
1004
1010
|
self._alias = alias
|
|
1005
1011
|
|
|
1006
1012
|
def _to_concept(self) -> Concept|None:
|
|
1007
|
-
return self.
|
|
1013
|
+
return self._source_item._to_concept()
|
|
1008
1014
|
|
|
1009
1015
|
def __format__(self, format_spec: str) -> str:
|
|
1010
|
-
if isinstance(self.
|
|
1016
|
+
if isinstance(self._source_item, Concept):
|
|
1011
1017
|
if format_spec:
|
|
1012
1018
|
exc("Invalid alias", f"Alias already specifies an alias for this concept, you can remove `:{format_spec}`")
|
|
1013
|
-
return self.
|
|
1019
|
+
return self._source_item.__format__(self._alias)
|
|
1014
1020
|
return super().__format__(format_spec)
|
|
1015
1021
|
|
|
1016
1022
|
#------------------------------------------------------
|
|
@@ -1157,7 +1163,7 @@ class Aggregate(Variable):
|
|
|
1157
1163
|
return None
|
|
1158
1164
|
|
|
1159
1165
|
|
|
1160
|
-
def where(self, *args:
|
|
1166
|
+
def where(self, *args: Statement) -> Aggregate:
|
|
1161
1167
|
new = self._clone()
|
|
1162
1168
|
new._where = new._where.where(*args)
|
|
1163
1169
|
return new
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
|
-
from .base import CoreLibrary as Core, Concept, NumberConcept, Field as dslField, Relationship
|
|
4
|
+
from .base import CoreLibrary as Core, Concept, NumberConcept, Field as dslField, Relationship, Library
|
|
5
5
|
from ..metamodel.builtins import builtins as b
|
|
6
6
|
from ..metamodel import metamodel as mm
|
|
7
7
|
from typing import cast
|
|
@@ -102,6 +102,26 @@ DateTime = Core.Type("DateTime")
|
|
|
102
102
|
Float = Core.Type("Float", super_types=[Numeric])
|
|
103
103
|
Hash = Core.Type("Hash") # TODO: we shouldn't really need this?
|
|
104
104
|
|
|
105
|
+
def is_primitive_concept(concept: Concept) -> bool:
|
|
106
|
+
""" Check if the given concept is one of the core primitive concepts. """
|
|
107
|
+
if isinstance(concept, NumberConcept):
|
|
108
|
+
return True
|
|
109
|
+
if (concept is Boolean
|
|
110
|
+
or concept is Number
|
|
111
|
+
or concept is Float
|
|
112
|
+
or concept is String
|
|
113
|
+
or concept is Date
|
|
114
|
+
or concept is DateTime
|
|
115
|
+
or concept is Hash):
|
|
116
|
+
return True
|
|
117
|
+
return any(is_primitive_concept(a) for a in concept._extends)
|
|
118
|
+
|
|
119
|
+
def extends(concept: Concept, super_concept: Concept) -> bool:
|
|
120
|
+
""" Check if the given concept extends the given super_concept (directly or indirectly). """
|
|
121
|
+
if concept is super_concept:
|
|
122
|
+
return True
|
|
123
|
+
return any(extends(a, super_concept) for a in concept._extends)
|
|
124
|
+
|
|
105
125
|
#------------------------------------------------------
|
|
106
126
|
# Aliases for Types
|
|
107
127
|
#------------------------------------------------------
|
|
@@ -176,4 +196,12 @@ Core.Relation("unique", [dslField.input("fields", Any, is_list=True)])
|
|
|
176
196
|
# Downstream annotations
|
|
177
197
|
#------------------------------------------------------
|
|
178
198
|
|
|
179
|
-
Core.Relation("output_value_is_key", [dslField.input("is_key", Integer)])
|
|
199
|
+
Core.Relation("output_value_is_key", [dslField.input("is_key", Integer)])
|
|
200
|
+
|
|
201
|
+
#------------------------------------------------------
|
|
202
|
+
# Core Entities
|
|
203
|
+
#------------------------------------------------------
|
|
204
|
+
|
|
205
|
+
CoreEntities = Library("CoreEntities")
|
|
206
|
+
|
|
207
|
+
Error = CoreEntities.Concept("Error")
|
{relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/front_compiler.py
RENAMED
|
@@ -56,6 +56,8 @@ def find_keys(item: Value | Statement, root_only: bool = False) -> list[Value]:
|
|
|
56
56
|
keys.append(item)
|
|
57
57
|
keys.extend(find_keys(item._start, root_only))
|
|
58
58
|
return keys
|
|
59
|
+
if isinstance(item, New) and root_only:
|
|
60
|
+
return [item]
|
|
59
61
|
if isinstance(item, Relationship):
|
|
60
62
|
if root_only:
|
|
61
63
|
return [item]
|
|
@@ -135,6 +137,14 @@ def is_core_concept(concept):
|
|
|
135
137
|
return True
|
|
136
138
|
return any(is_core_concept(a) for a in concept._extends)
|
|
137
139
|
|
|
140
|
+
def is_primitive_concept(concept: Concept) -> bool:
|
|
141
|
+
core = _get_core()
|
|
142
|
+
return core.is_primitive_concept(concept)
|
|
143
|
+
|
|
144
|
+
def is_entity_concept(concept: Concept) -> bool:
|
|
145
|
+
core = _get_core()
|
|
146
|
+
return not is_core_concept(concept) or core.extends(concept, core.AnyEntity)
|
|
147
|
+
|
|
138
148
|
def concept_var_name(concept: Concept|Relationship) -> str:
|
|
139
149
|
if isinstance(concept, Relationship):
|
|
140
150
|
return sanitize(concept._short_name).lower()
|
|
@@ -289,11 +299,13 @@ def normalize_branch_keys(compiler:FrontCompiler, ctx:Context, branch_keys:list[
|
|
|
289
299
|
for key, var in branch_keys:
|
|
290
300
|
if var not in ctx.frame_vars:
|
|
291
301
|
source = branch._source if isinstance(branch, DSLBase) else var.source
|
|
292
|
-
if not isinstance(key, (
|
|
293
|
-
return ctx.err("Invalid branch", "Branch key must
|
|
302
|
+
if not isinstance(key, (Variable)):
|
|
303
|
+
return ctx.err("Invalid branch", "Branch key must resolve to a concept.", [err_source(source)])
|
|
294
304
|
concept = key._to_concept()
|
|
295
|
-
if
|
|
305
|
+
if not is_entity_concept(concept):
|
|
296
306
|
return ctx.err("Invalid branch", "Branch key must be an entity, not a primitive.", [err_source(source)])
|
|
307
|
+
elif concept is None:
|
|
308
|
+
return ctx.err("Invalid branch", "Branch key must resolve to a concept.", [err_source(source)])
|
|
297
309
|
else:
|
|
298
310
|
ctx.add(Construct((ctx.to_value(concept._name + "_NONE_SENTINEL"),), var, source=key._source))
|
|
299
311
|
|
|
@@ -453,6 +465,8 @@ class Context:
|
|
|
453
465
|
node = mLiteral(type=value_type, value=value._value, source=value._source)
|
|
454
466
|
elif isinstance(value, AsBool):
|
|
455
467
|
node = Var(bt.core.Boolean, f"v", source=value._source)
|
|
468
|
+
elif isinstance(value, Alias):
|
|
469
|
+
node = self.to_value(value._source_item)
|
|
456
470
|
elif isinstance(value, MetaRef):
|
|
457
471
|
if isinstance(value._target, Concept):
|
|
458
472
|
node = self.compiler.to_type(value._target)
|
|
@@ -542,10 +556,14 @@ class FrontCompiler:
|
|
|
542
556
|
|
|
543
557
|
def to_annotation(self, node: Expression | Relationship) -> Annotation:
|
|
544
558
|
if isinstance(node, Expression):
|
|
559
|
+
if not isinstance(node._op, Relationship):
|
|
560
|
+
exc("Invalid annotation", f"Annotation operation must be a Relationship, got `{type(node._op).__name__}`.", [
|
|
561
|
+
err_source(node._source)
|
|
562
|
+
])
|
|
545
563
|
args = []
|
|
546
|
-
for arg in node._args:
|
|
564
|
+
for arg, field in zip(node._args, node._op._fields):
|
|
547
565
|
if isinstance(arg, Literal):
|
|
548
|
-
args.append(mLiteral(type=self.to_type(
|
|
566
|
+
args.append(mLiteral(type=self.to_type(field.type), value=arg._value, source=arg._source))
|
|
549
567
|
elif isinstance(arg, Concept) or isinstance(arg, Relationship):
|
|
550
568
|
args.append(self.to_relation(arg))
|
|
551
569
|
elif isinstance(arg, Chain):
|
|
@@ -597,7 +615,7 @@ class FrontCompiler:
|
|
|
597
615
|
rel = UnresolvedRelation(name=name, fields=tuple(fields), source=node._source, readings=readings, annotations=annos, overloads=tuple(overloads))
|
|
598
616
|
else:
|
|
599
617
|
rel = Relation(name=name, fields=tuple(fields), source=node._source, readings=readings, annotations=annos, overloads=tuple(overloads))
|
|
600
|
-
if isinstance(node, Property):
|
|
618
|
+
if isinstance(node, Property) and not node._is_unresolved and len(fields) > 1:
|
|
601
619
|
# Add a uniqueness constraint for properties
|
|
602
620
|
_get_constraints()
|
|
603
621
|
self.relation_constraints.add(Lookup(bt.constraints.unique_fields, (tuple(fields[:-1]),)))
|
|
@@ -779,7 +797,9 @@ class FrontCompiler:
|
|
|
779
797
|
# the root vars, since all of them behave like keys. For Properties,
|
|
780
798
|
# we ignore the last field since it's functionally determined by the others.
|
|
781
799
|
# Expressions use their args
|
|
782
|
-
if
|
|
800
|
+
if is_distinct:
|
|
801
|
+
root_vars.add(root_v)
|
|
802
|
+
elif isinstance(root, Property):
|
|
783
803
|
root_vars.update(ctx.to_value(field) for field in root._fields[:-1])
|
|
784
804
|
elif isinstance(root, Relationship):
|
|
785
805
|
root_vars.update(ctx.to_value(field) for field in root._fields)
|
|
@@ -855,6 +875,13 @@ class FrontCompiler:
|
|
|
855
875
|
|
|
856
876
|
def define(self, ctx: Context, fragment:Fragment, exprs: list[Value]):
|
|
857
877
|
with ctx.updating():
|
|
878
|
+
roots = KeyedSet(dsl_key)
|
|
879
|
+
for expr in exprs:
|
|
880
|
+
roots.update(find_keys(expr))
|
|
881
|
+
# look the roots up in the outer scope
|
|
882
|
+
for root in roots:
|
|
883
|
+
self.lookup(ctx, root)
|
|
884
|
+
|
|
858
885
|
for expr in exprs:
|
|
859
886
|
source = expr._source if isinstance(expr, DSLBase) else fragment._source
|
|
860
887
|
with ctx.subcontext():
|
|
@@ -899,13 +926,13 @@ class FrontCompiler:
|
|
|
899
926
|
|
|
900
927
|
if isinstance(node, Concept):
|
|
901
928
|
final_var = ctx.to_value(node)
|
|
902
|
-
if
|
|
929
|
+
if is_entity_concept(node):
|
|
903
930
|
ctx.add_lookup(node, [final_var], source=source)
|
|
904
931
|
return final_var
|
|
905
932
|
|
|
906
933
|
elif isinstance(node, Ref):
|
|
907
934
|
final_var = ctx.to_value(node)
|
|
908
|
-
if
|
|
935
|
+
if is_entity_concept(node._concept):
|
|
909
936
|
ctx.add_lookup(node._concept, [final_var], source=source)
|
|
910
937
|
return final_var
|
|
911
938
|
|
|
@@ -956,7 +983,7 @@ class FrontCompiler:
|
|
|
956
983
|
return args[-1]
|
|
957
984
|
# if we are casting e.g. with something like `Discount(0.6)` we should return a literal with that
|
|
958
985
|
# type
|
|
959
|
-
elif isinstance(node._op, Concept) and
|
|
986
|
+
elif isinstance(node._op, Concept) and is_primitive_concept(node._op):
|
|
960
987
|
if isinstance(node._args[0], Literal):
|
|
961
988
|
return mLiteral(type=self.to_type(node._op), value=node._args[0]._value, source=source)
|
|
962
989
|
else:
|
|
@@ -1143,7 +1170,7 @@ class FrontCompiler:
|
|
|
1143
1170
|
return self.lookup(ctx, node._compile_lookup())
|
|
1144
1171
|
|
|
1145
1172
|
elif isinstance(node, Alias):
|
|
1146
|
-
return self.lookup(ctx, node.
|
|
1173
|
+
return self.lookup(ctx, node._source_item)
|
|
1147
1174
|
|
|
1148
1175
|
elif isinstance(node, AsBool):
|
|
1149
1176
|
# we need to create a match with two branches that returns true/false
|
|
@@ -124,7 +124,7 @@ class PrettyPrinter:
|
|
|
124
124
|
return repr(v)
|
|
125
125
|
|
|
126
126
|
def _fmt_Alias(self, a: Alias, level: int) -> str:
|
|
127
|
-
src = self.format(a.
|
|
127
|
+
src = self.format(a._source_item, level)
|
|
128
128
|
return f"{src} AS {a._alias}"
|
|
129
129
|
|
|
130
130
|
def _fmt_FieldRef(self, fr: FieldRef, level: int) -> str:
|
{relationalai-1.0.0a2 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/rewriter.py
RENAMED
|
@@ -3,7 +3,7 @@ from typing import Any, Callable, Dict, Type
|
|
|
3
3
|
|
|
4
4
|
from relationalai.util.structures import OrderedSet
|
|
5
5
|
from .metamodel import (
|
|
6
|
-
Node, Model, NumberType, ScalarType, Task, Logical, Sequence, Union, Match, Until, Wait, Loop, Break, Require,
|
|
6
|
+
Node, Model, Relation, UnresolvedRelation, NumberType, ScalarType, Task, Logical, Sequence, Union, Match, Until, Wait, Loop, Break, Require,
|
|
7
7
|
Not, Exists, Lookup, Update, Aggregate, Construct, Var, Annotation, Field, Literal, UnionType, ListType, TupleType
|
|
8
8
|
)
|
|
9
9
|
import datetime as _dt
|
|
@@ -17,7 +17,11 @@ NO_WALK = object()
|
|
|
17
17
|
|
|
18
18
|
WALK_FIELDS: Dict[Type[Node], tuple[str, ...]] = {
|
|
19
19
|
# Top-level
|
|
20
|
-
Model: ("root",),
|
|
20
|
+
Model: ("root", "relations",),
|
|
21
|
+
|
|
22
|
+
# Relation
|
|
23
|
+
Relation: ("fields",),
|
|
24
|
+
UnresolvedRelation: ("fields",),
|
|
21
25
|
|
|
22
26
|
# Control flow
|
|
23
27
|
Logical: ("body",),
|
|
@@ -13,6 +13,33 @@ from . import metamodel as mm, builtins as bt
|
|
|
13
13
|
from .rewriter import Walker, Rewriter, NO_WALK
|
|
14
14
|
from .builtins import builtins as b
|
|
15
15
|
|
|
16
|
+
from contextlib import contextmanager
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#--------------------------------------------------
|
|
20
|
+
# Typer Testing
|
|
21
|
+
#--------------------------------------------------
|
|
22
|
+
COLLECTED_ERRORS = None
|
|
23
|
+
@contextmanager
|
|
24
|
+
def errors(error_type):
|
|
25
|
+
"""
|
|
26
|
+
Check that this type error is raised within the context.
|
|
27
|
+
|
|
28
|
+
:param error_type: the type of the expected error.
|
|
29
|
+
"""
|
|
30
|
+
global COLLECTED_ERRORS
|
|
31
|
+
COLLECTED_ERRORS = []
|
|
32
|
+
try:
|
|
33
|
+
yield
|
|
34
|
+
except:
|
|
35
|
+
# we expect the typer to raise an error
|
|
36
|
+
pass
|
|
37
|
+
finally:
|
|
38
|
+
if not any(isinstance(error, error_type) for error in COLLECTED_ERRORS):
|
|
39
|
+
exc("ExpectedWarning", f"Expected warning of type {error_type.__name__} but none was raised.")
|
|
40
|
+
COLLECTED_ERRORS = None
|
|
41
|
+
|
|
42
|
+
|
|
16
43
|
#--------------------------------------------------
|
|
17
44
|
# Typer
|
|
18
45
|
#--------------------------------------------------
|
|
@@ -68,12 +95,18 @@ class Typer:
|
|
|
68
95
|
replacer = Replacer(net)
|
|
69
96
|
final = replacer.rewrite(node)
|
|
70
97
|
|
|
71
|
-
# report any errors found during
|
|
98
|
+
# report any errors found during type inference
|
|
72
99
|
if net.errors:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
100
|
+
if COLLECTED_ERRORS is not None:
|
|
101
|
+
# collecting errors for tests, just add them to the list
|
|
102
|
+
COLLECTED_ERRORS.extend(net.errors)
|
|
103
|
+
# raise to avoid further processing
|
|
104
|
+
raise Exception("Typer errors collected.")
|
|
105
|
+
else:
|
|
106
|
+
for error in net.errors:
|
|
107
|
+
error.report()
|
|
108
|
+
if self.enforce:
|
|
109
|
+
exc("TyperError", "Type errors detected during type inference.")
|
|
77
110
|
return final
|
|
78
111
|
|
|
79
112
|
|
|
@@ -146,10 +179,8 @@ class PropagationNetwork():
|
|
|
146
179
|
# TODO - consider renaming this to UnresolvedReference
|
|
147
180
|
self.errors.append(UnresolvedOverload(node, [self.resolve(a) for a in node.args]))
|
|
148
181
|
|
|
149
|
-
def unresolved_type(self, node:
|
|
150
|
-
|
|
151
|
-
# that we could not resolve
|
|
152
|
-
self.errors.append(UnresolvedType(node))
|
|
182
|
+
def unresolved_type(self, node: mm.Lookup|mm.Aggregate, arg: mm.Var):
|
|
183
|
+
self.errors.append(UnresolvedType(node, arg))
|
|
153
184
|
|
|
154
185
|
def has_errors(self, node: Node) -> bool:
|
|
155
186
|
for mismatch in self.errors:
|
|
@@ -264,7 +295,7 @@ class PropagationNetwork():
|
|
|
264
295
|
|
|
265
296
|
# limit the number of iterations to avoid infinite loops
|
|
266
297
|
i = 0
|
|
267
|
-
max_iterations = 100 * len(self.edges)
|
|
298
|
+
max_iterations = 100 * (len(self.edges) + len(work_list))
|
|
268
299
|
|
|
269
300
|
# propagate types until we reach a fixed point
|
|
270
301
|
while work_list:
|
|
@@ -409,6 +440,9 @@ class PropagationNetwork():
|
|
|
409
440
|
for field, field_type, arg in zip(relation.fields, resolved_fields, task.args):
|
|
410
441
|
if not field.input and isinstance(arg, mm.Var):
|
|
411
442
|
self.add_resolved_type(arg, field_type)
|
|
443
|
+
# this can be the way to learn the specialized number type for the field
|
|
444
|
+
if bt.is_abstract(field.type):
|
|
445
|
+
self.add_resolved_type(field, field_type)
|
|
412
446
|
|
|
413
447
|
elif b.core.TypeVar in types:
|
|
414
448
|
# this relation contains type vars, so we have to make sure that all args
|
|
@@ -446,13 +480,27 @@ class PropagationNetwork():
|
|
|
446
480
|
|
|
447
481
|
else:
|
|
448
482
|
# no typevar or number specialization shenanigans, just propagate field types to args
|
|
483
|
+
is_population_lookup = isinstance(relation, mm.TypeNode)
|
|
449
484
|
for field, field_type, arg, arg_type in zip(relation.fields, resolved_fields, task.args, resolved_args):
|
|
450
|
-
#
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
485
|
+
# if the arg does not match the declared field type, and cannot be converted into it, it's a mismatch
|
|
486
|
+
# note that we use the declared field type here, field.type, not the resolved field type, which may
|
|
487
|
+
# have been refined by updates
|
|
488
|
+
if not type_matches(arg_type, field.type, accept_expected_super_types=is_population_lookup) and not conversion_allowed(arg_type, field.type):
|
|
489
|
+
# if the field is an output and the arg is still abstract, we may be able to refine it later,
|
|
490
|
+
# as long as they are compatible, so skip reporting as it will come back later
|
|
491
|
+
# TODO - replace this with the analyzer reversing an edge for this case
|
|
492
|
+
if not field.input and bt.is_abstract(arg_type) and type_matches(field.type, arg_type, accept_expected_super_types=is_population_lookup) or conversion_allowed(field.type, arg_type):
|
|
493
|
+
continue
|
|
494
|
+
self.type_mismatch(task, field.type, arg_type)
|
|
495
|
+
elif isinstance(arg, mm.Var):
|
|
496
|
+
if bt.is_abstract(field_type) and bt.is_abstract(arg_type):
|
|
497
|
+
# if the resolved field type is still abstract, we cannot resolve the type of the arg
|
|
498
|
+
self.unresolved_type(task, arg)
|
|
499
|
+
elif bt.is_abstract(arg_type) or bt.extends(field_type, arg_type):
|
|
500
|
+
# we learned something about this arg, so store it
|
|
501
|
+
self.add_resolved_type(arg, field_type)
|
|
502
|
+
elif not type_matches(arg_type, field.type) and is_population_lookup:
|
|
503
|
+
self.add_resolved_type(arg, field_type)
|
|
456
504
|
|
|
457
505
|
# we try to preserve types for relations that are functions (i.e. potentially multiple
|
|
458
506
|
# input but a single output) and where all types are the same. However, there are some
|
|
@@ -526,7 +574,8 @@ class PropagationNetwork():
|
|
|
526
574
|
if isinstance(x, mm.NumberType):
|
|
527
575
|
if number is None or x.scale > number.scale or (x.scale == number.scale and x.precision > number.precision):
|
|
528
576
|
number = x
|
|
529
|
-
|
|
577
|
+
if number is None:
|
|
578
|
+
number = b.core.DefaultNumber
|
|
530
579
|
return number, [number if bt.is_number(t) else t for t in field_types]
|
|
531
580
|
|
|
532
581
|
|
|
@@ -642,10 +691,6 @@ class Analyzer(Walker):
|
|
|
642
691
|
def analyze(self, node: mm.Node):
|
|
643
692
|
self(node)
|
|
644
693
|
|
|
645
|
-
# TODO - ignoring requires for now because the typing of constraints seems incorrect
|
|
646
|
-
def enter_require(self, require: mm.Require):
|
|
647
|
-
return NO_WALK
|
|
648
|
-
|
|
649
694
|
def compute_potential_targets(self, relation: mm.Relation):
|
|
650
695
|
# register potential targets for placeholders
|
|
651
696
|
if bt.is_placeholder(relation):
|
|
@@ -729,8 +774,6 @@ class Replacer(Rewriter):
|
|
|
729
774
|
#--------------------------------------------------
|
|
730
775
|
|
|
731
776
|
def field(self, node: mm.Field):
|
|
732
|
-
# TODO - this is only modifying the relation in the model, but then we have a new
|
|
733
|
-
# relation there, which is different than the object referenced by tasks.
|
|
734
777
|
if node in self.net.resolved_types:
|
|
735
778
|
return mm.Field(node.name, self.net.resolved_types[node], node.input, _relation = node._relation)
|
|
736
779
|
return node
|
|
@@ -1187,7 +1230,7 @@ class TypeMismatch(TyperError):
|
|
|
1187
1230
|
actual: mm.Type
|
|
1188
1231
|
|
|
1189
1232
|
def message(self) -> str:
|
|
1190
|
-
return f"Expected {get_name(self.expected)}, got {get_name(self.actual)}"
|
|
1233
|
+
return f"Expected '{get_name(self.expected)}', got '{get_name(self.actual)}'"
|
|
1191
1234
|
|
|
1192
1235
|
@dataclass
|
|
1193
1236
|
class InvalidType(TyperError):
|
|
@@ -1204,10 +1247,11 @@ class UnresolvedOverload(TyperError):
|
|
|
1204
1247
|
assert isinstance(self.node, (mm.Lookup, mm.Update, mm.Aggregate))
|
|
1205
1248
|
rel = get_relation(self.node)
|
|
1206
1249
|
types = ', '.join([get_name(t) for t in self.arg_types])
|
|
1207
|
-
return f"Unresolved overload: {rel.name}({types})"
|
|
1250
|
+
return f"Unresolved overload: '{rel.name}({types})'"
|
|
1208
1251
|
|
|
1209
1252
|
@dataclass
|
|
1210
1253
|
class UnresolvedType(TyperError):
|
|
1254
|
+
arg: mm.Var
|
|
1211
1255
|
|
|
1212
1256
|
def message(self) -> str:
|
|
1213
|
-
return "Unable to determine concrete type."
|
|
1257
|
+
return f"Unable to determine concrete type for argument '{self.arg.name}'."
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""
|
|
2
|
+
The RelationalAI Semantics Reasoners Module.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
# Mark this package's docstrings for inclusion
|
|
6
|
+
# in automatically generated web documentation,
|
|
7
|
+
# by default as early access.
|
|
8
|
+
# TODO: Remove dependency on v0, once this functionality is supported.
|
|
9
|
+
from v0.relationalai.docutils import ProductStage
|
|
10
|
+
__include_in_docs__ = True
|
|
11
|
+
__rai_product_stage__ = ProductStage.EARLY_ACCESS
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""
|
|
2
|
+
RelationalAI Graph Library
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
__version__ = "0.0.0"
|
|
6
|
+
|
|
7
|
+
import warnings
|
|
8
|
+
# TODO: Remove dependency on v0, once this functionality is supported.
|
|
9
|
+
from v0.relationalai.docutils import ProductStage
|
|
10
|
+
from .core import Graph
|
|
11
|
+
|
|
12
|
+
# Mark this package's docstrings for inclusion
|
|
13
|
+
# in automatically generated web documentation.
|
|
14
|
+
__include_in_docs__ = True
|
|
15
|
+
__rai_product_stage__ = ProductStage.EARLY_ACCESS
|
|
16
|
+
|
|
17
|
+
# Warn on import that this package is at an early stage of development,
|
|
18
|
+
# intended for internal consumers only, and ask those internal consumers
|
|
19
|
+
# to contact the symbolic reasoning team such that we can track usage,
|
|
20
|
+
# get feedback, and help folks through breaking changes.
|
|
21
|
+
warnings.warn(
|
|
22
|
+
(
|
|
23
|
+
"\n\nThis library is still in early stages of development and is intended "
|
|
24
|
+
"for internal use only. Among other considerations, interfaces will change, "
|
|
25
|
+
"and performance is appropriate only for exploring small graphs. Please "
|
|
26
|
+
"see this package's README for additional information.\n\n"
|
|
27
|
+
"If you are an internal user seeing this, please also contact "
|
|
28
|
+
"the symbolic reasoning team such that we can track usage, get "
|
|
29
|
+
"feedback, and help you through breaking changes.\n"
|
|
30
|
+
),
|
|
31
|
+
FutureWarning,
|
|
32
|
+
stacklevel=2
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Finally make this package's core functionality publicly available.
|
|
36
|
+
__all__ = [
|
|
37
|
+
"Graph",
|
|
38
|
+
]
|