relationalai 0.12.8__tar.gz → 0.12.9__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-0.12.8 → relationalai-0.12.9}/PKG-INFO +1 -1
- {relationalai-0.12.8 → relationalai-0.12.9}/pyproject.toml +1 -1
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/internal/internal.py +29 -7
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/compiler.py +1 -1
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/constructors.py +6 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/executor.py +23 -38
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/intrinsics.py +4 -3
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/model2lqp.py +6 -12
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/passes.py +2 -1
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/__init__.py +2 -1
- relationalai-0.12.9/src/relationalai/semantics/lqp/rewrite/function_annotations.py +114 -0
- relationalai-0.12.9/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +282 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/builtins.py +5 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +5 -4
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/rel/compiler.py +19 -1
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/tests/test_snapshot_abstract.py +3 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/otel_handler.py +10 -4
- relationalai-0.12.8/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -79
- {relationalai-0.12.8 → relationalai-0.12.9}/.gitignore +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/LICENSE +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/docs/pypi/README.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/azure.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/snowflake.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/use_index_poller.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/compiler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/debugging.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/docutils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/dsl.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/errors.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/README.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/api.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/code_organization.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/metagen.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/rel.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/internal/snowflake.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/helpers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/rel/executor.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/math.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/re.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/cli_controls.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/notes +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/query_utils.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/format.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -40,7 +40,7 @@ _global_id = peekable(itertools.count(0))
|
|
|
40
40
|
|
|
41
41
|
# Single context variable with default values
|
|
42
42
|
_overrides = ContextVar("overrides", default = {})
|
|
43
|
-
def overrides(key: str, default: bool | str | dict):
|
|
43
|
+
def overrides(key: str, default: bool | str | dict | datetime | None):
|
|
44
44
|
return _overrides.get().get(key, default)
|
|
45
45
|
|
|
46
46
|
# Flag that users set in the config or directly on the model, but that can still be
|
|
@@ -60,6 +60,13 @@ def with_overrides(**kwargs):
|
|
|
60
60
|
finally:
|
|
61
61
|
_overrides.reset(token)
|
|
62
62
|
|
|
63
|
+
# Intrinsic values to override for stable snapshots.
|
|
64
|
+
def get_intrinsic_overrides() -> dict[str, Any]:
|
|
65
|
+
datetime_now = overrides('datetime_now', None)
|
|
66
|
+
if datetime_now is not None:
|
|
67
|
+
return {'datetime_now': datetime_now}
|
|
68
|
+
return {}
|
|
69
|
+
|
|
63
70
|
#--------------------------------------------------
|
|
64
71
|
# Root tracking
|
|
65
72
|
#--------------------------------------------------
|
|
@@ -953,12 +960,25 @@ class Concept(Producer):
|
|
|
953
960
|
self._validate_identifier_relationship(rel)
|
|
954
961
|
self._add_ref_scheme(*args)
|
|
955
962
|
|
|
956
|
-
def _add_ref_scheme(self, *
|
|
957
|
-
|
|
958
|
-
#
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
963
|
+
def _add_ref_scheme(self, *rels: Relationship|RelationshipReading):
|
|
964
|
+
# thanks to prior validation we we can safely assume that
|
|
965
|
+
# * the input types are correct due to prior validation
|
|
966
|
+
# * all relationships are binary and defined on this concept
|
|
967
|
+
|
|
968
|
+
self._reference_schemes.append(rels)
|
|
969
|
+
|
|
970
|
+
# for every concept x every field f has at most one value y.
|
|
971
|
+
# f(x,y): x -> y holds
|
|
972
|
+
concept_fields = tuple([rel.__getitem__(0) for rel in rels])
|
|
973
|
+
for field in concept_fields:
|
|
974
|
+
concept_uc = Unique(field, model=self._model)
|
|
975
|
+
require(concept_uc.to_expressions())
|
|
976
|
+
|
|
977
|
+
# for any combination of field values there is at most one concept x.
|
|
978
|
+
# f₁(x,y₁) ∧ … ∧ fₙ(x,yₙ): {y₁,…,yₙ} → {x}
|
|
979
|
+
key_fields = tuple([rel.__getitem__(1) for rel in rels])
|
|
980
|
+
key_uc = Unique(*key_fields, model=self._model)
|
|
981
|
+
require(key_uc.to_expressions())
|
|
962
982
|
|
|
963
983
|
def _validate_identifier_relationship(self, rel:Relationship|RelationshipReading):
|
|
964
984
|
if rel._arity() != 2:
|
|
@@ -2603,6 +2623,7 @@ class Model():
|
|
|
2603
2623
|
config_overrides = overrides('config', {})
|
|
2604
2624
|
for k, v in config_overrides.items():
|
|
2605
2625
|
self._config.set(k, v)
|
|
2626
|
+
self._intrinsic_overrides = get_intrinsic_overrides()
|
|
2606
2627
|
self._strict = cast(bool, overrides('strict', strict))
|
|
2607
2628
|
self._use_lqp = overridable_flag('reasoner.rule.use_lqp', self._config, use_lqp, default=not self._use_sql)
|
|
2608
2629
|
self._enable_otel_handler = overridable_flag('enable_otel_handler', self._config, enable_otel_handler, default=False)
|
|
@@ -2644,6 +2665,7 @@ class Model():
|
|
|
2644
2665
|
wide_outputs=self._wide_outputs,
|
|
2645
2666
|
connection=self._connection,
|
|
2646
2667
|
config=self._config,
|
|
2668
|
+
intrinsic_overrides=self._intrinsic_overrides,
|
|
2647
2669
|
)
|
|
2648
2670
|
elif self._use_sql:
|
|
2649
2671
|
self._executor = SnowflakeExecutor(
|
|
@@ -14,7 +14,7 @@ class Compiler(c.Compiler):
|
|
|
14
14
|
super().__init__(lqp_passes())
|
|
15
15
|
self.def_names = UniqueNames()
|
|
16
16
|
|
|
17
|
-
def do_compile(self, model: ir.Model, options:dict={}) -> tuple[Optional[tuple], lqp.
|
|
17
|
+
def do_compile(self, model: ir.Model, options:dict={}) -> tuple[Optional[tuple], lqp.Epoch]:
|
|
18
18
|
fragment_id: bytes = options.get("fragment_id", bytes(404))
|
|
19
19
|
# Reset the var context for each compilation
|
|
20
20
|
# TODO: Change to unique var names per lookup
|
|
@@ -59,3 +59,9 @@ def mk_pragma(name: str, terms: list[lqp.Var]) -> lqp.Pragma:
|
|
|
59
59
|
|
|
60
60
|
def mk_attribute(name: str, args: list[lqp.Value]) -> lqp.Attribute:
|
|
61
61
|
return lqp.Attribute(name=name, args=args, meta=None)
|
|
62
|
+
|
|
63
|
+
def mk_transaction(
|
|
64
|
+
epochs: list[lqp.Epoch],
|
|
65
|
+
configure: lqp.Configure = lqp.construct_configure({}, None),
|
|
66
|
+
) -> lqp.Transaction:
|
|
67
|
+
return lqp.Transaction(epochs=epochs, configure=configure, meta=None)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
from collections import defaultdict
|
|
3
|
+
from datetime import datetime, timezone
|
|
3
4
|
import atexit
|
|
4
5
|
import re
|
|
5
6
|
|
|
@@ -13,6 +14,7 @@ from relationalai.semantics.lqp import result_helpers
|
|
|
13
14
|
from relationalai.semantics.metamodel import ir, factory as f, executor as e
|
|
14
15
|
from relationalai.semantics.lqp.compiler import Compiler
|
|
15
16
|
from relationalai.semantics.lqp.intrinsics import mk_intrinsic_datetime_now
|
|
17
|
+
from relationalai.semantics.lqp.constructors import mk_transaction
|
|
16
18
|
from relationalai.semantics.lqp.types import lqp_type_to_sql
|
|
17
19
|
from lqp import print as lqp_print, ir as lqp_ir
|
|
18
20
|
from lqp.parser import construct_configure
|
|
@@ -39,6 +41,9 @@ class LQPExecutor(e.Executor):
|
|
|
39
41
|
wide_outputs: bool = False,
|
|
40
42
|
connection: Session | None = None,
|
|
41
43
|
config: Config | None = None,
|
|
44
|
+
# In order to facilitate snapshot testing, we allow overriding intrinsic definitions
|
|
45
|
+
# like the current time, which would otherwise change between runs.
|
|
46
|
+
intrinsic_overrides: dict = {},
|
|
42
47
|
) -> None:
|
|
43
48
|
super().__init__()
|
|
44
49
|
self.database = database
|
|
@@ -48,6 +53,7 @@ class LQPExecutor(e.Executor):
|
|
|
48
53
|
self.compiler = Compiler()
|
|
49
54
|
self.connection = connection
|
|
50
55
|
self.config = config or Config()
|
|
56
|
+
self.intrinsic_overrides = intrinsic_overrides
|
|
51
57
|
self._resources = None
|
|
52
58
|
self._last_model = None
|
|
53
59
|
self._last_sources_version = (-1, None)
|
|
@@ -311,19 +317,16 @@ class LQPExecutor(e.Executor):
|
|
|
311
317
|
with debugging.span("compile_intrinsics") as span:
|
|
312
318
|
span["compile_type"] = "intrinsics"
|
|
313
319
|
|
|
320
|
+
now = self.intrinsic_overrides.get('datetime_now', datetime.now(timezone.utc))
|
|
321
|
+
|
|
314
322
|
debug_info = lqp_ir.DebugInfo(id_to_orig_name={}, meta=None)
|
|
315
323
|
intrinsics_fragment = lqp_ir.Fragment(
|
|
316
324
|
id = lqp_ir.FragmentId(id=b"__pyrel_lqp_intrinsics", meta=None),
|
|
317
|
-
declarations = [
|
|
318
|
-
mk_intrinsic_datetime_now(),
|
|
319
|
-
],
|
|
325
|
+
declarations = [mk_intrinsic_datetime_now(now)],
|
|
320
326
|
debug_info = debug_info,
|
|
321
327
|
meta = None,
|
|
322
328
|
)
|
|
323
329
|
|
|
324
|
-
|
|
325
|
-
span["lqp"] = lqp_print.to_string(intrinsics_fragment, {"print_names": True, "print_debug": False, "print_csv_filename": False})
|
|
326
|
-
|
|
327
330
|
return lqp_ir.Epoch(
|
|
328
331
|
writes=[
|
|
329
332
|
lqp_ir.Write(write_type=lqp_ir.Define(fragment=intrinsics_fragment, meta=None), meta=None)
|
|
@@ -354,47 +357,38 @@ class LQPExecutor(e.Executor):
|
|
|
354
357
|
|
|
355
358
|
def compile_lqp(self, model: ir.Model, task: ir.Task):
|
|
356
359
|
configure = self._construct_configure()
|
|
360
|
+
# Merge the epochs into a single transaction. Long term the query bits should all
|
|
361
|
+
# go into a WhatIf action and the intrinsics could be fused with either of them. But
|
|
362
|
+
# for now we just use separate epochs.
|
|
363
|
+
epochs = []
|
|
364
|
+
epochs.append(self._compile_intrinsics())
|
|
357
365
|
|
|
358
|
-
model_txn = None
|
|
359
366
|
if self._last_model != model:
|
|
360
367
|
with debugging.span("compile", metamodel=model) as install_span:
|
|
361
368
|
install_span["compile_type"] = "model"
|
|
362
|
-
_,
|
|
363
|
-
|
|
364
|
-
install_span["lqp"] = lqp_print.to_string(model_txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
|
|
369
|
+
_, model_epoch = self.compiler.compile(model, {"fragment_id": b"model"})
|
|
370
|
+
epochs.append(model_epoch)
|
|
365
371
|
self._last_model = model
|
|
366
372
|
|
|
367
|
-
with debugging.span("compile", metamodel=task) as
|
|
368
|
-
compile_span["compile_type"] = "query"
|
|
373
|
+
with debugging.span("compile", metamodel=task) as txn_span:
|
|
369
374
|
query = f.compute_model(f.logical([task]))
|
|
370
375
|
options = {
|
|
371
376
|
"wide_outputs": self.wide_outputs,
|
|
372
377
|
"fragment_id": b"query",
|
|
373
378
|
}
|
|
374
379
|
result, final_model = self.compiler.compile_inner(query, options)
|
|
375
|
-
export_info,
|
|
376
|
-
query_txn = txn_with_configure(query_txn, configure)
|
|
377
|
-
compile_span["lqp"] = lqp_print.to_string(query_txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
|
|
380
|
+
export_info, query_epoch = result
|
|
378
381
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
# for now we just use separate epochs.
|
|
382
|
-
epochs = []
|
|
382
|
+
epochs.append(query_epoch)
|
|
383
|
+
epochs.append(self._compile_undefine_query(query_epoch))
|
|
383
384
|
|
|
384
|
-
|
|
385
|
+
txn_span["compile_type"] = "query"
|
|
386
|
+
txn = mk_transaction(epochs=epochs, configure=configure)
|
|
387
|
+
txn_span["lqp"] = lqp_print.to_string(txn, {"print_names": True, "print_debug": False, "print_csv_filename": False})
|
|
385
388
|
|
|
386
|
-
if model_txn is not None:
|
|
387
|
-
epochs.append(model_txn.epochs[0])
|
|
388
|
-
|
|
389
|
-
query_txn_epoch = query_txn.epochs[0]
|
|
390
|
-
epochs.append(query_txn_epoch)
|
|
391
|
-
epochs.append(self._compile_undefine_query(query_txn_epoch))
|
|
392
|
-
|
|
393
|
-
txn = lqp_ir.Transaction(epochs=epochs, configure=configure, meta=None)
|
|
394
389
|
validate_lqp(txn)
|
|
395
390
|
|
|
396
391
|
txn_proto = convert_transaction(txn)
|
|
397
|
-
# TODO (azreika): Should export_info be encoded as part of the txn_proto? [RAI-40312]
|
|
398
392
|
return final_model, export_info, txn_proto
|
|
399
393
|
|
|
400
394
|
# TODO (azreika): This should probably be split up into exporting and other processing. There are quite a lot of arguments here...
|
|
@@ -462,12 +456,3 @@ class LQPExecutor(e.Executor):
|
|
|
462
456
|
# If processing the results failed, revert to the previous model.
|
|
463
457
|
self._last_model = previous_model
|
|
464
458
|
raise e
|
|
465
|
-
|
|
466
|
-
def txn_with_configure(txn: lqp_ir.Transaction, configure: lqp_ir.Configure) -> lqp_ir.Transaction:
|
|
467
|
-
""" Return a new transaction with the given configure. If the transaction already has
|
|
468
|
-
a configure, it is replaced. """
|
|
469
|
-
return lqp_ir.Transaction(
|
|
470
|
-
epochs=txn.epochs,
|
|
471
|
-
configure=configure,
|
|
472
|
-
meta=txn.meta,
|
|
473
|
-
)
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
from datetime import datetime
|
|
1
|
+
from datetime import datetime
|
|
2
2
|
|
|
3
3
|
from relationalai.semantics.lqp import ir as lqp
|
|
4
4
|
from relationalai.semantics.lqp.constructors import mk_abstraction, mk_value, mk_type, mk_primitive
|
|
5
5
|
from relationalai.semantics.lqp.utils import lqp_hash
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
# Constructs a definition of the current datetime.
|
|
8
|
+
def mk_intrinsic_datetime_now(dt: datetime) -> lqp.Def:
|
|
8
9
|
"""Constructs a definition of the current datetime."""
|
|
9
10
|
id = lqp_hash("__pyrel_lqp_intrinsic_datetime_now")
|
|
10
11
|
out = lqp.Var(name="out", meta=None)
|
|
11
12
|
out_type = mk_type(lqp.TypeName.DATETIME)
|
|
12
|
-
now = mk_value(lqp.DateTimeValue(value=
|
|
13
|
+
now = mk_value(lqp.DateTimeValue(value=dt, meta=None))
|
|
13
14
|
datetime_now = mk_abstraction(
|
|
14
15
|
[(out, out_type)],
|
|
15
16
|
mk_primitive("rel_primitive_eq", [out, now]),
|
|
@@ -19,8 +19,8 @@ from warnings import warn
|
|
|
19
19
|
import re
|
|
20
20
|
import uuid
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
def to_lqp(model: ir.Model, fragment_name: bytes, ctx: TranslationCtx) -> tuple[Optional[tuple], lqp.
|
|
22
|
+
# Main access point for translating metamodel to lqp. Converts the model IR to an LQP epoch.
|
|
23
|
+
def to_lqp(model: ir.Model, fragment_name: bytes, ctx: TranslationCtx) -> tuple[Optional[tuple], lqp.Epoch]:
|
|
24
24
|
assert_valid_input(model)
|
|
25
25
|
decls: list[lqp.Declaration] = []
|
|
26
26
|
reads: list[lqp.Read] = []
|
|
@@ -50,16 +50,10 @@ def to_lqp(model: ir.Model, fragment_name: bytes, ctx: TranslationCtx) -> tuple[
|
|
|
50
50
|
fragment = lqp.Fragment(id=fragment_id, declarations=decls, meta=None, debug_info=debug_info)
|
|
51
51
|
define_op = lqp.Define(fragment=fragment, meta=None)
|
|
52
52
|
|
|
53
|
-
txn = lqp.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
writes=[lqp.Write(write_type=define_op, meta=None)],
|
|
58
|
-
meta=None
|
|
59
|
-
)
|
|
60
|
-
],
|
|
61
|
-
configure=lqp.construct_configure({}, None),
|
|
62
|
-
meta=None,
|
|
53
|
+
txn = lqp.Epoch(
|
|
54
|
+
reads=reads,
|
|
55
|
+
writes=[lqp.Write(write_type=define_op, meta=None)],
|
|
56
|
+
meta=None
|
|
63
57
|
)
|
|
64
58
|
|
|
65
59
|
return (export_info, txn)
|
|
@@ -7,7 +7,7 @@ from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
|
7
7
|
from relationalai.semantics.metamodel.rewrite import Flatten
|
|
8
8
|
|
|
9
9
|
from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals, FormatOutputs
|
|
10
|
-
from .rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
|
|
10
|
+
from .rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter, SplitMultiCheckRequires
|
|
11
11
|
|
|
12
12
|
from relationalai.semantics.lqp.utils import output_names
|
|
13
13
|
|
|
@@ -18,6 +18,7 @@ import hashlib
|
|
|
18
18
|
|
|
19
19
|
def lqp_passes() -> list[Pass]:
|
|
20
20
|
return [
|
|
21
|
+
SplitMultiCheckRequires(),
|
|
21
22
|
FunctionAnnotations(),
|
|
22
23
|
DischargeConstraints(),
|
|
23
24
|
Checker(),
|
{relationalai-0.12.8 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/__init__.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from .cdc import CDC
|
|
2
2
|
from .extract_common import ExtractCommon
|
|
3
3
|
from .extract_keys import ExtractKeys
|
|
4
|
-
from .function_annotations import FunctionAnnotations
|
|
4
|
+
from .function_annotations import FunctionAnnotations, SplitMultiCheckRequires
|
|
5
5
|
from .quantify_vars import QuantifyVars
|
|
6
6
|
from .splinter import Splinter
|
|
7
7
|
|
|
@@ -12,4 +12,5 @@ __all__ = [
|
|
|
12
12
|
"FunctionAnnotations",
|
|
13
13
|
"QuantifyVars",
|
|
14
14
|
"Splinter",
|
|
15
|
+
"SplitMultiCheckRequires",
|
|
15
16
|
]
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from relationalai.semantics.metamodel import builtins
|
|
5
|
+
from relationalai.semantics.metamodel.ir import (
|
|
6
|
+
Node, Model, Require, Logical, Relation, Annotation, Update
|
|
7
|
+
)
|
|
8
|
+
from relationalai.semantics.metamodel.compiler import Pass
|
|
9
|
+
from relationalai.semantics.metamodel.visitor import Rewriter, Visitor
|
|
10
|
+
from relationalai.semantics.lqp.rewrite.functional_dependencies import (
|
|
11
|
+
is_valid_unique_constraint, normalized_fd
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
# In the future iterations of PyRel metamodel, `Require` nodes will have a single `Check`
|
|
15
|
+
# (and no `errors`). Currently, however, the unique constraints may result in multiple
|
|
16
|
+
# `Check` nodes and for simplicity we split them in to separate `Require` nodes. This step
|
|
17
|
+
# will be removed in the future.
|
|
18
|
+
#
|
|
19
|
+
# Note that unique constraints always have an empty `domain` so apply the splitting only
|
|
20
|
+
# to such `Require` nodes.
|
|
21
|
+
class SplitMultiCheckRequires(Pass):
|
|
22
|
+
"""
|
|
23
|
+
Pass splits unique Require nodes that have empty domain but multiple checks into multiple
|
|
24
|
+
Require nodes with single check each.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def rewrite(self, model: Model, options: dict = {}) -> Model:
|
|
28
|
+
return SplitMultiCheckRequiresRewriter().walk(model)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class SplitMultiCheckRequiresRewriter(Rewriter):
|
|
32
|
+
"""
|
|
33
|
+
Splits unique Require nodes that have empty domain but multiple checks into multiple
|
|
34
|
+
Require nodes with single check each.
|
|
35
|
+
"""
|
|
36
|
+
def handle_require(self, node: Require, parent: Node):
|
|
37
|
+
|
|
38
|
+
if isinstance(node.domain, Logical) and not node.domain.body and len(node.checks) > 1:
|
|
39
|
+
require_nodes = []
|
|
40
|
+
for check in node.checks:
|
|
41
|
+
single_check = self.walk(check, node)
|
|
42
|
+
require_nodes.append(
|
|
43
|
+
node.reconstruct(node.engine, node.domain, (single_check,), node.annotations)
|
|
44
|
+
)
|
|
45
|
+
return require_nodes
|
|
46
|
+
|
|
47
|
+
return node
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class FunctionAnnotations(Pass):
|
|
51
|
+
"""
|
|
52
|
+
Pass marks all appropriate relations with `function` annotation. Collects functional
|
|
53
|
+
dependencies from unique Require nodes and uses this information to identify functional
|
|
54
|
+
relations.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
def rewrite(self, model: Model, options: dict = {}) -> Model:
|
|
58
|
+
collect_fds = CollectFDsVisitor()
|
|
59
|
+
collect_fds.visit_model(model, None)
|
|
60
|
+
annotated_model = FunctionalAnnotationsRewriter(collect_fds.functional_relations).walk(model)
|
|
61
|
+
return annotated_model
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class CollectFDsVisitor(Visitor):
|
|
65
|
+
"""
|
|
66
|
+
Visitor collects all unique constraints.
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
# Currently, only information about k-functional fd is collected.
|
|
70
|
+
def __init__(self):
|
|
71
|
+
super().__init__()
|
|
72
|
+
self.functional_relations:dict[Relation, int] = {}
|
|
73
|
+
|
|
74
|
+
def visit_require(self, node: Require, parent: Optional[Node]):
|
|
75
|
+
if is_valid_unique_constraint(node):
|
|
76
|
+
fd = normalized_fd(node)
|
|
77
|
+
assert fd is not None
|
|
78
|
+
if fd.is_structural:
|
|
79
|
+
relation = fd.structural_relation
|
|
80
|
+
k = fd.structural_rank
|
|
81
|
+
current_k = self.functional_relations.get(relation, 0)
|
|
82
|
+
self.functional_relations[relation] = max(current_k, k)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class FunctionalAnnotationsRewriter(Rewriter):
|
|
86
|
+
"""
|
|
87
|
+
This visitor marks functional_relations with `@function(:checked [, k])` annotation.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
def __init__(self, functional_relations: dict[Relation, int]):
|
|
91
|
+
super().__init__()
|
|
92
|
+
self.functional_relations = functional_relations
|
|
93
|
+
|
|
94
|
+
def get_functional_annotation(self, rel: Relation) -> Optional[Annotation]:
|
|
95
|
+
k = self.functional_relations.get(rel, None)
|
|
96
|
+
if k is None:
|
|
97
|
+
return None
|
|
98
|
+
if k == 1:
|
|
99
|
+
return builtins.function_checked_annotation
|
|
100
|
+
return builtins.function_ranked_checked_annotation(k)
|
|
101
|
+
|
|
102
|
+
def handle_relation(self, node: Relation, parent: Node):
|
|
103
|
+
function_annotation = self.get_functional_annotation(node)
|
|
104
|
+
if function_annotation:
|
|
105
|
+
return node.reconstruct(node.name, node.fields, node.requires,
|
|
106
|
+
node.annotations | [function_annotation], node.overloads)
|
|
107
|
+
return node.reconstruct(node.name, node.fields, node.requires, node.annotations, node.overloads)
|
|
108
|
+
|
|
109
|
+
def handle_update(self, node: Update, parent: Node):
|
|
110
|
+
function_annotation = self.get_functional_annotation(node.relation)
|
|
111
|
+
if function_annotation:
|
|
112
|
+
return node.reconstruct(node.engine, node.relation, node.args, node.effect,
|
|
113
|
+
node.annotations | [function_annotation])
|
|
114
|
+
return node.reconstruct(node.engine, node.relation, node.args, node.effect, node.annotations)
|