relationalai 0.12.7__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.7 → relationalai-0.12.9}/PKG-INFO +1 -1
- {relationalai-0.12.7 → relationalai-0.12.9}/pyproject.toml +1 -1
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/snowflake.py +37 -5
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/use_index_poller.py +11 -1
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/internal/internal.py +29 -7
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/compiler.py +1 -1
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/constructors.py +6 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/executor.py +23 -38
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/intrinsics.py +4 -3
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/model2lqp.py +6 -12
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/passes.py +4 -2
- {relationalai-0.12.7 → 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.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/builtins.py +6 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/__init__.py +2 -1
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +1 -1
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +9 -9
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/flatten.py +18 -149
- relationalai-0.12.9/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/core.py +98 -70
- relationalai-0.12.9/src/relationalai/semantics/reasoners/optimization/__init__.py +68 -0
- relationalai-0.12.9/src/relationalai/semantics/reasoners/optimization/common.py +88 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +39 -33
- relationalai-0.12.9/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +1163 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/rel/compiler.py +21 -2
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/tests/test_snapshot_abstract.py +3 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/cli.py +10 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/cli_controls.py +15 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/otel_handler.py +10 -4
- relationalai-0.12.7/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -79
- relationalai-0.12.7/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -23
- relationalai-0.12.7/src/relationalai/semantics/reasoners/optimization/common.py +0 -33
- relationalai-0.12.7/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -515
- {relationalai-0.12.7 → relationalai-0.12.9}/.gitignore +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/LICENSE +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/docs/pypi/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/azure.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/debugging.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/docutils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/dsl.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/errors.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/api.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/code_organization.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/metagen.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/rel.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/internal/snowflake.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/rel/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/math.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/re.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/notes +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/query_utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/format.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.9}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -851,7 +851,17 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
851
851
|
self.generation
|
|
852
852
|
)
|
|
853
853
|
# If cache is valid (data freshness has not expired), skip polling
|
|
854
|
-
if
|
|
854
|
+
if poller.cache.is_valid():
|
|
855
|
+
cached_sources = len(poller.cache.sources)
|
|
856
|
+
total_sources = len(sources_list)
|
|
857
|
+
cached_timestamp = poller.cache._metadata.get("cachedIndices", {}).get(poller.cache.key, {}).get("last_use_index_update_on", "")
|
|
858
|
+
|
|
859
|
+
message = f"Using cached data for {cached_sources}/{total_sources} data streams"
|
|
860
|
+
if cached_timestamp:
|
|
861
|
+
print(f"\n{message} (cached at {cached_timestamp})\n")
|
|
862
|
+
else:
|
|
863
|
+
print(f"\n{message}\n")
|
|
864
|
+
else:
|
|
855
865
|
return poller.poll()
|
|
856
866
|
|
|
857
867
|
#--------------------------------------------------
|
|
@@ -3284,12 +3294,24 @@ class DirectAccessResources(Resources):
|
|
|
3284
3294
|
try:
|
|
3285
3295
|
response = _send_request()
|
|
3286
3296
|
if response.status_code != 200:
|
|
3297
|
+
# For 404 responses with skip_auto_create=True, return immediately to let caller handle it
|
|
3298
|
+
# (e.g., get_engine needs to check 404 and return None for auto_create_engine)
|
|
3299
|
+
# For skip_auto_create=False, continue to auto-creation logic below
|
|
3300
|
+
if response.status_code == 404 and skip_auto_create:
|
|
3301
|
+
return response
|
|
3302
|
+
|
|
3287
3303
|
try:
|
|
3288
3304
|
message = response.json().get("message", "")
|
|
3289
3305
|
except requests.exceptions.JSONDecodeError:
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3306
|
+
# Can't parse JSON response. For skip_auto_create=True (e.g., get_engine),
|
|
3307
|
+
# this should have been caught by the 404 check above, so this is an error.
|
|
3308
|
+
# For skip_auto_create=False, we explicitly check status_code below,
|
|
3309
|
+
# so we don't need to parse the message.
|
|
3310
|
+
if skip_auto_create:
|
|
3311
|
+
raise ResponseStatusException(
|
|
3312
|
+
f"Failed to parse error response from endpoint {endpoint}.", response
|
|
3313
|
+
)
|
|
3314
|
+
message = "" # Not used when we check status_code directly
|
|
3293
3315
|
|
|
3294
3316
|
# fix engine on engine error and retry
|
|
3295
3317
|
# Skip auto-retry if skip_auto_create is True to avoid recursion
|
|
@@ -3482,7 +3504,17 @@ class DirectAccessResources(Resources):
|
|
|
3482
3504
|
generation=self.generation,
|
|
3483
3505
|
)
|
|
3484
3506
|
# If cache is valid (data freshness has not expired), skip polling
|
|
3485
|
-
if
|
|
3507
|
+
if poller.cache.is_valid():
|
|
3508
|
+
cached_sources = len(poller.cache.sources)
|
|
3509
|
+
total_sources = len(sources_list)
|
|
3510
|
+
cached_timestamp = poller.cache._metadata.get("cachedIndices", {}).get(poller.cache.key, {}).get("last_use_index_update_on", "")
|
|
3511
|
+
|
|
3512
|
+
message = f"Using cached data for {cached_sources}/{total_sources} data streams"
|
|
3513
|
+
if cached_timestamp:
|
|
3514
|
+
print(f"\n{message} (cached at {cached_timestamp})\n")
|
|
3515
|
+
else:
|
|
3516
|
+
print(f"\n{message}\n")
|
|
3517
|
+
else:
|
|
3486
3518
|
return poller.poll()
|
|
3487
3519
|
|
|
3488
3520
|
def _check_exec_async_status(self, txn_id: str, headers: Dict[str, str] | None = None) -> bool:
|
|
@@ -250,7 +250,17 @@ class UseIndexPoller:
|
|
|
250
250
|
# Cache was used - show how many sources were cached
|
|
251
251
|
total_sources = len(self.cache.sources)
|
|
252
252
|
cached_sources = total_sources - len(self.sources)
|
|
253
|
-
|
|
253
|
+
|
|
254
|
+
# Get the timestamp when sources were cached
|
|
255
|
+
entry = self.cache._metadata.get("cachedIndices", {}).get(self.cache.key, {})
|
|
256
|
+
cached_timestamp = entry.get("last_use_index_update_on", "")
|
|
257
|
+
|
|
258
|
+
message = f"Using cached data for {cached_sources}/{total_sources} data streams"
|
|
259
|
+
# Format the message with timestamp
|
|
260
|
+
if cached_timestamp:
|
|
261
|
+
message += f" (cached at {cached_timestamp})"
|
|
262
|
+
|
|
263
|
+
progress.add_sub_task(message, task_id="cache_usage", category=TASK_CATEGORY_CACHE)
|
|
254
264
|
# Complete the subtask immediately since it's just informational
|
|
255
265
|
progress.complete_sub_task("cache_usage")
|
|
256
266
|
|
|
@@ -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)
|
|
@@ -6,8 +6,8 @@ from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
|
6
6
|
|
|
7
7
|
from relationalai.semantics.metamodel.rewrite import Flatten
|
|
8
8
|
|
|
9
|
-
from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals
|
|
10
|
-
from .rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
|
|
9
|
+
from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals, FormatOutputs
|
|
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(),
|
|
@@ -27,6 +28,7 @@ def lqp_passes() -> list[Pass]:
|
|
|
27
28
|
DNFUnionSplitter(),
|
|
28
29
|
ExtractKeys(),
|
|
29
30
|
ExtractCommon(),
|
|
31
|
+
FormatOutputs(),
|
|
30
32
|
Flatten(),
|
|
31
33
|
Splinter(), # Splits multi-headed rules into multiple rules
|
|
32
34
|
QuantifyVars(), # Adds missing existentials
|
{relationalai-0.12.7 → 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)
|