relationalai 0.9.17__tar.gz → 0.9.18__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.9.17 → relationalai-0.9.18}/PKG-INFO +1 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/pyproject.toml +1 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/snowflake.py +5 -18
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/use_index_poller.py +4 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/debugging.py +10 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/builder/__init__.py +2 -2
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/models.py +3 -14
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/internal/internal.py +73 -40
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/internal/snowflake.py +3 -1
- relationalai-0.9.18/src/relationalai/semantics/lqp/builtins.py +14 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/constructors.py +3 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/model2lqp.py +34 -13
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/passes.py +1 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/builtins.py +3 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/dependency.py +2 -2
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/helpers.py +1 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/extract_keys.py +77 -60
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/flatten.py +4 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/typer/typer.py +2 -2
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/types.py +1 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/optimization/common.py +5 -5
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +2 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +2 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/compiler.py +4 -3
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/compiler.py +1 -1
- relationalai-0.9.17/src/relationalai/semantics/tests/test_snapshot_base.py → relationalai-0.9.18/src/relationalai/semantics/tests/test_snapshot_abstract.py +43 -37
- relationalai-0.9.18/src/relationalai/semantics/tests/test_snapshot_base.py +9 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/tests/utils.py +11 -1
- {relationalai-0.9.17 → relationalai-0.9.18}/.gitignore +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/LICENSE +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/docs/pypi/README.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/azure.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/compiler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/dsl.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/api/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/errors.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/metagen.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/rel.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/executor.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/fd_constraints.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/list_types.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/rewrite/splinter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/executor.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/rewrite/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/rewrite/cdc.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/rewrite/extract_common.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/rel/rewrite/quantify_vars.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/dates.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/math.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/re.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/cli_controls.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/notes +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/format.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -702,22 +702,14 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
702
702
|
self._create_engine(name, size, auto_suspend_mins, True)
|
|
703
703
|
|
|
704
704
|
def delete_engine(self, name:str, force:bool = False, headers: Dict | None = None):
|
|
705
|
-
request_headers =
|
|
706
|
-
prop_headers = debugging.gen_current_propagation_headers()
|
|
707
|
-
if headers:
|
|
708
|
-
request_headers.update(headers)
|
|
709
|
-
request_headers.update(prop_headers)
|
|
705
|
+
request_headers = debugging.add_current_propagation_headers(headers)
|
|
710
706
|
self._exec(f"call {APP_NAME}.api.delete_engine('{name}', {force},{request_headers});")
|
|
711
707
|
|
|
712
708
|
def suspend_engine(self, name:str):
|
|
713
709
|
self._exec(f"call {APP_NAME}.api.suspend_engine('{name}');")
|
|
714
710
|
|
|
715
711
|
def resume_engine(self, name:str, headers: Dict | None = None) -> Dict:
|
|
716
|
-
request_headers =
|
|
717
|
-
prop_headers = debugging.gen_current_propagation_headers()
|
|
718
|
-
if headers:
|
|
719
|
-
request_headers.update(headers)
|
|
720
|
-
request_headers.update(prop_headers)
|
|
712
|
+
request_headers = debugging.add_current_propagation_headers(headers)
|
|
721
713
|
self._exec(f"call {APP_NAME}.api.resume_engine('{name}',{request_headers});")
|
|
722
714
|
# returning empty dict to match the expected return type
|
|
723
715
|
return {}
|
|
@@ -1559,12 +1551,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1559
1551
|
):
|
|
1560
1552
|
if inputs is None:
|
|
1561
1553
|
inputs = {}
|
|
1562
|
-
|
|
1563
|
-
request_headers = {}
|
|
1564
|
-
if headers:
|
|
1565
|
-
request_headers.update(headers)
|
|
1566
|
-
request_headers.update(prop_headers)
|
|
1567
|
-
|
|
1554
|
+
request_headers = debugging.add_current_propagation_headers(headers)
|
|
1568
1555
|
query_attrs_dict = json.loads(request_headers.get("X-Query-Attributes", "{}"))
|
|
1569
1556
|
|
|
1570
1557
|
with debugging.span("transaction", **query_attrs_dict) as txn_span:
|
|
@@ -2980,7 +2967,6 @@ class DirectAccessClient:
|
|
|
2980
2967
|
return url, ep.method
|
|
2981
2968
|
|
|
2982
2969
|
def _prepare_headers(self, headers: Dict[str, str] | None) -> Dict[str, str]:
|
|
2983
|
-
|
|
2984
2970
|
request_headers = {}
|
|
2985
2971
|
if headers:
|
|
2986
2972
|
request_headers.update(headers)
|
|
@@ -2994,7 +2980,8 @@ class DirectAccessClient:
|
|
|
2994
2980
|
|
|
2995
2981
|
request_headers["user-agent"] = get_pyrel_version(self.generation)
|
|
2996
2982
|
request_headers["pyrel_program_id"] = debugging.get_program_span_id() or ""
|
|
2997
|
-
|
|
2983
|
+
|
|
2984
|
+
return debugging.add_current_propagation_headers(request_headers)
|
|
2998
2985
|
|
|
2999
2986
|
class DirectAccessResources(Resources):
|
|
3000
2987
|
"""
|
|
@@ -142,7 +142,10 @@ class UseIndexPoller:
|
|
|
142
142
|
"should_check_cdc": self.should_check_cdc,
|
|
143
143
|
"init_engine_async": self.init_engine_async,
|
|
144
144
|
})
|
|
145
|
-
|
|
145
|
+
|
|
146
|
+
request_headers = debugging.add_current_propagation_headers(self.headers)
|
|
147
|
+
|
|
148
|
+
sql_string = f"CALL {self.app_name}.api.use_index([{sources_object_references_str}], PARSE_JSON(?), {request_headers});"
|
|
146
149
|
|
|
147
150
|
with debugging.span("wait", counter=self.counter, use_index_id=use_index_id) as span:
|
|
148
151
|
results = self.res._exec(sql_string, [params])
|
|
@@ -4,7 +4,7 @@ import contextlib
|
|
|
4
4
|
import datetime
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
|
-
from typing import Dict, Generator
|
|
7
|
+
from typing import Dict, Generator, Optional
|
|
8
8
|
import logging
|
|
9
9
|
import uuid
|
|
10
10
|
import warnings
|
|
@@ -212,6 +212,15 @@ class Span:
|
|
|
212
212
|
"attrs": self.attrs,
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
+
|
|
216
|
+
def add_current_propagation_headers(headers: Optional[Dict]) -> Dict:
|
|
217
|
+
prop_headers = gen_current_propagation_headers()
|
|
218
|
+
|
|
219
|
+
if headers:
|
|
220
|
+
prop_headers.update(headers)
|
|
221
|
+
|
|
222
|
+
return prop_headers
|
|
223
|
+
|
|
215
224
|
def gen_current_propagation_headers():
|
|
216
225
|
return generate_propagation_headers(get_current_span())
|
|
217
226
|
|
|
@@ -2,7 +2,7 @@ import warnings
|
|
|
2
2
|
|
|
3
3
|
from relationalai.semantics.internal.internal import (field_to_type, Compiler, RelationshipRef, ConceptNew,
|
|
4
4
|
RelationshipFieldRef, Ref, Aggregate, decimal_concept_by_name,
|
|
5
|
-
_global_id)
|
|
5
|
+
_global_id, TupleArg)
|
|
6
6
|
from relationalai.semantics.internal import (
|
|
7
7
|
Model, Concept, Relationship, RelationshipReading, Expression, Fragment, Error, Field,
|
|
8
8
|
String, Integer, Int64, Int128, Float, Decimal, Bool,
|
|
@@ -24,7 +24,7 @@ __all__ = [
|
|
|
24
24
|
"count", "sum", "min", "max", "avg", "per",
|
|
25
25
|
"not_", "builder",
|
|
26
26
|
"field_to_type", "Compiler", "RelationshipRef", "ConceptNew", "RelationshipFieldRef", "Ref", "Aggregate",
|
|
27
|
-
"decimal_concept_by_name", "_global_id"
|
|
27
|
+
"decimal_concept_by_name", "_global_id", "TupleArg"
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
warnings.warn(
|
|
@@ -3,7 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
from collections import OrderedDict
|
|
4
4
|
from typing import Optional, Any, Sequence, Union, TypeVar
|
|
5
5
|
|
|
6
|
-
import relationalai.
|
|
6
|
+
import relationalai.semantics as qb
|
|
7
|
+
from relationalai.semantics.std import constraints as c
|
|
7
8
|
from relationalai import Config
|
|
8
9
|
from relationalai.early_access.dsl.bindings.common import Binding
|
|
9
10
|
from relationalai.early_access.dsl.bindings.csv import CsvTable
|
|
@@ -75,6 +76,7 @@ class Model:
|
|
|
75
76
|
def unique(self, *roles):
|
|
76
77
|
uc = Unique(*roles)
|
|
77
78
|
self.constraint(uc)
|
|
79
|
+
c.unique(*roles)
|
|
78
80
|
first_part_of = roles[0]._part_of()
|
|
79
81
|
if isinstance(first_part_of, RelationshipReading):
|
|
80
82
|
relationship = first_part_of._alt_of
|
|
@@ -82,20 +84,7 @@ class Model:
|
|
|
82
84
|
relationship = first_part_of
|
|
83
85
|
# check if UC is internal
|
|
84
86
|
if all(role._part_of()._id == first_part_of._id for role in roles):
|
|
85
|
-
field_refs = set(r._field_ref for r in roles)
|
|
86
87
|
internal_ucs = self._relationship_iuc.get(relationship, [])
|
|
87
|
-
# create sets of ref fields declared for the relationship
|
|
88
|
-
iuc_ref_sets = [set(r._field_ref for r in uc.roles()) for uc in internal_ucs]
|
|
89
|
-
for reading in relationship._readings:
|
|
90
|
-
refs_except_last = set(reading._field_refs[:-1])
|
|
91
|
-
# when internal UC declared for all the roles except the last one in the RelationshipReading mark RelationshipReading as `is_many=False`
|
|
92
|
-
if field_refs == refs_except_last:
|
|
93
|
-
reading._is_many = False
|
|
94
|
-
elif not reading._is_many:
|
|
95
|
-
# check that a reading already has an internal uc with the roles except the last one
|
|
96
|
-
# if not then mark reading as `is_many=True`
|
|
97
|
-
if all(refs != refs_except_last for refs in iuc_ref_sets):
|
|
98
|
-
reading._is_many = True
|
|
99
88
|
internal_ucs.append(uc)
|
|
100
89
|
self._relationship_iuc[relationship] = internal_ucs # todo: this logic should be part of reactive reasoner
|
|
101
90
|
|
|
@@ -20,7 +20,7 @@ from relationalai.clients.config import Config
|
|
|
20
20
|
from relationalai.clients.result_helpers import Int128Dtype
|
|
21
21
|
from relationalai.semantics.metamodel import factory as f, helpers, ir, builtins, types
|
|
22
22
|
from relationalai.semantics.metamodel.typer import typer
|
|
23
|
-
from relationalai.semantics.metamodel.util import NameCache, OrderedSet, ordered_set
|
|
23
|
+
from relationalai.semantics.metamodel.util import NameCache, OrderedSet, ordered_set, FrozenOrderedSet
|
|
24
24
|
from relationalai.semantics.rel.executor import RelExecutor
|
|
25
25
|
from relationalai.semantics.lqp.executor import LQPExecutor
|
|
26
26
|
from relationalai.semantics.sql.executor import SnowflakeExecutor
|
|
@@ -507,10 +507,16 @@ class Producer:
|
|
|
507
507
|
def _get_relationship(self, name:str) -> Relationship|RelationshipRef|RelationshipFieldRef:
|
|
508
508
|
root_type:Concept = to_type(self) or Concept.builtins["Any"]
|
|
509
509
|
namer = NameCache()
|
|
510
|
-
|
|
510
|
+
cls = Relationship if root_type is Error else Property
|
|
511
|
+
r = cls(
|
|
511
512
|
f"{{{root_type}}} has {{{name}:Any}}",
|
|
512
|
-
parent=self,
|
|
513
|
-
|
|
513
|
+
parent=self,
|
|
514
|
+
short_name=name,
|
|
515
|
+
model=self._model,
|
|
516
|
+
field_refs=cast(list[Ref], [
|
|
517
|
+
root_type.ref(namer.get_name(1, root_type._name.lower())),
|
|
518
|
+
Concept.builtins["Any"].ref(namer.get_name(2, name)),
|
|
519
|
+
]),
|
|
514
520
|
)
|
|
515
521
|
# if we don't know the root type, then this relationship is unresolved and we're
|
|
516
522
|
# really just handing an anonymous relationship back that we expect to be resolved
|
|
@@ -839,9 +845,9 @@ class Concept(Producer):
|
|
|
839
845
|
if python_types_to_concepts.get(v):
|
|
840
846
|
v = python_types_to_concepts[v]
|
|
841
847
|
if isinstance(v, Concept):
|
|
842
|
-
setattr(self, k,
|
|
848
|
+
setattr(self, k, Property(f"{{{self._name}}} has {{{k}:{v._name}}}", short_name=k, model=self._model))
|
|
843
849
|
elif isinstance(v, type) and issubclass(v, self._model.Enum): #type: ignore
|
|
844
|
-
setattr(self, k,
|
|
850
|
+
setattr(self, k, Property(f"{{{self._name}}} has {{{k}:{v._concept._name}}}", short_name=k, model=self._model))
|
|
845
851
|
elif isinstance(v, Relationship):
|
|
846
852
|
self._validate_identifier_relationship(v)
|
|
847
853
|
setattr(self, k, v)
|
|
@@ -865,7 +871,7 @@ class Concept(Producer):
|
|
|
865
871
|
self._check_ref_scheme(kwargs, shallow=True)
|
|
866
872
|
return ConceptConstruct(self, args, kwargs)
|
|
867
873
|
|
|
868
|
-
def annotate(self, *annos:Expression|Relationship) -> Concept:
|
|
874
|
+
def annotate(self, *annos:Expression|Relationship|ir.Annotation) -> Concept:
|
|
869
875
|
self._annotations.extend(annos)
|
|
870
876
|
return self
|
|
871
877
|
|
|
@@ -1175,7 +1181,7 @@ class Field():
|
|
|
1175
1181
|
class Relationship(Producer):
|
|
1176
1182
|
builtins = {}
|
|
1177
1183
|
|
|
1178
|
-
def __init__(self, madlib:str, parent:Producer|None=None, short_name:str="", model:Model|None=None, fields:list[Field]|None=None, field_refs:list[Ref]|None=None,
|
|
1184
|
+
def __init__(self, madlib:str, parent:Producer|None=None, short_name:str="", model:Model|None=None, fields:list[Field]|None=None, field_refs:list[Ref]|None=None, ir_relation:ir.Relation|None=None):
|
|
1179
1185
|
found_model = model or find_model(parent) or find_model(args)
|
|
1180
1186
|
super().__init__(found_model)
|
|
1181
1187
|
self._parent = parent
|
|
@@ -1185,7 +1191,7 @@ class Relationship(Producer):
|
|
|
1185
1191
|
if fields is not None:
|
|
1186
1192
|
self._fields:list[Field] = fields
|
|
1187
1193
|
else:
|
|
1188
|
-
self._fields
|
|
1194
|
+
self._fields = self._parse_schema_format(madlib)
|
|
1189
1195
|
if not self._fields and not ir_relation:
|
|
1190
1196
|
raise ValueError(f"No fields found in relationship {self}")
|
|
1191
1197
|
self._ir_relation = ir_relation
|
|
@@ -1196,8 +1202,9 @@ class Relationship(Producer):
|
|
|
1196
1202
|
self._field_refs = [cast(Ref, field_to_type(found_model, field).ref(field.name)) for field in self._fields]
|
|
1197
1203
|
for field in self._field_refs:
|
|
1198
1204
|
field._no_lookup = True
|
|
1205
|
+
self._internal_constraints:set[FieldsConstraint] = set()
|
|
1199
1206
|
self._field_names = [field.name for field in self._fields]
|
|
1200
|
-
self._readings = [RelationshipReading(madlib, alt_of=self, short_name=short_name, fields=self._fields,
|
|
1207
|
+
self._readings = [RelationshipReading(madlib, alt_of=self, short_name=short_name, fields=self._fields, model=found_model, parent=parent)]
|
|
1201
1208
|
self._annotations = []
|
|
1202
1209
|
# now that the Relationship is validated, register into the model
|
|
1203
1210
|
if found_model is not None:
|
|
@@ -1212,33 +1219,30 @@ class Relationship(Producer):
|
|
|
1212
1219
|
return self._passed_short_name or _short_name_from_madlib(self._madlib)
|
|
1213
1220
|
|
|
1214
1221
|
def is_many(self):
|
|
1215
|
-
|
|
1222
|
+
if self._arity() == 1:
|
|
1223
|
+
return False
|
|
1224
|
+
uc = Unique.to_identity(*(self[i] for i in range(self._arity() - 1)))
|
|
1225
|
+
return uc not in self._internal_constraints
|
|
1216
1226
|
|
|
1217
1227
|
def _is_filter(self) -> bool:
|
|
1218
1228
|
return self._short_name in [">", "<", "=", "!=", ">=", "<="]
|
|
1219
1229
|
|
|
1220
1230
|
def _parse_schema_format(self, format_string:str):
|
|
1221
|
-
# Pattern to extract fields like {Type
|
|
1222
|
-
pattern = r'\{([a-zA-Z0-9_.]+(?:\([0-9]+,[0-9]+\))?)(
|
|
1231
|
+
# Pattern to extract fields like {Type} or {name:Type}, where Type can have precision and scale, like Decimal(38,14)
|
|
1232
|
+
pattern = r'\{([a-zA-Z0-9_.]+(?:\([0-9]+,[0-9]+\))?)(?::([a-zA-Z0-9_.]+(?:\([0-9]+,[0-9]+\))?))?\}'
|
|
1223
1233
|
matches = re.findall(pattern, format_string)
|
|
1224
1234
|
|
|
1225
1235
|
namer = NameCache()
|
|
1226
1236
|
fields = []
|
|
1227
|
-
is_many = False
|
|
1228
1237
|
match_index = 0
|
|
1229
1238
|
ix = 0
|
|
1230
|
-
for field_name,
|
|
1239
|
+
for field_name, field_type in matches:
|
|
1231
1240
|
# If no type is specified, use the field name as the type
|
|
1232
1241
|
if not field_type:
|
|
1233
1242
|
field_type = field_name
|
|
1234
1243
|
# in this case, the field_name is based on the type name, so sanitize to avoid
|
|
1235
1244
|
# ()s in decimal names, for example
|
|
1236
1245
|
field_name = helpers.sanitize(field_name.lower())
|
|
1237
|
-
field_type_is_many = field_name_is_many
|
|
1238
|
-
|
|
1239
|
-
is_many = bool(field_type_is_many)
|
|
1240
|
-
if is_many and match_index != len(matches) - 1:
|
|
1241
|
-
raise ValueError(f"Only the last role of a relationship reading can be 1-to-many: {format_string}")
|
|
1242
1246
|
|
|
1243
1247
|
ix += 1
|
|
1244
1248
|
field_name = namer.get_name(ix, field_name)
|
|
@@ -1246,7 +1250,7 @@ class Relationship(Producer):
|
|
|
1246
1250
|
fields.append(Field(field_name, field_type))
|
|
1247
1251
|
match_index +=1
|
|
1248
1252
|
|
|
1249
|
-
return fields
|
|
1253
|
+
return fields
|
|
1250
1254
|
|
|
1251
1255
|
def _dir_extras_from_get_relationship(self) -> Any:
|
|
1252
1256
|
return self._field_refs[-1]._dir_extras_from_getattr()
|
|
@@ -1270,7 +1274,7 @@ class Relationship(Producer):
|
|
|
1270
1274
|
return RelationshipFieldRef(self._parent, self, self._field_names.index(name))
|
|
1271
1275
|
return super().__getattr__(name)
|
|
1272
1276
|
|
|
1273
|
-
def annotate(self, *annos:Expression|Relationship) -> Relationship:
|
|
1277
|
+
def annotate(self, *annos:Expression|Relationship|ir.Annotation) -> Relationship:
|
|
1274
1278
|
self._annotations.extend(annos)
|
|
1275
1279
|
return self
|
|
1276
1280
|
|
|
@@ -1318,18 +1322,16 @@ class Relationship(Producer):
|
|
|
1318
1322
|
|
|
1319
1323
|
class Property(Relationship):
|
|
1320
1324
|
|
|
1321
|
-
def __init__(self, madlib:str, parent:Producer|None=None, short_name:str="", model:Model|None=None, fields:list[Field]|None=None, field_refs:list[Ref]|None=None,
|
|
1322
|
-
super().__init__(madlib, parent, short_name, model, fields, field_refs,
|
|
1325
|
+
def __init__(self, madlib:str, parent:Producer|None=None, short_name:str="", model:Model|None=None, fields:list[Field]|None=None, field_refs:list[Ref]|None=None, ir_relation:ir.Relation|None=None):
|
|
1326
|
+
super().__init__(madlib, parent, short_name, model, fields, field_refs, ir_relation)
|
|
1323
1327
|
# for property should be an implicit unique constraint on the first n-1 fields
|
|
1324
1328
|
uc = Unique(*(self[i] for i in range(self._arity() - 1)), model=self._model)
|
|
1325
1329
|
require(uc.to_expressions())
|
|
1326
1330
|
|
|
1327
1331
|
|
|
1328
1332
|
class RelationshipReading(Producer):
|
|
1329
|
-
# if true, the last role has 1-many semantics
|
|
1330
|
-
_is_many:bool = False
|
|
1331
1333
|
|
|
1332
|
-
def __init__(self, madlib:str, alt_of:Relationship, short_name:str, fields:list[Field]|None=None,
|
|
1334
|
+
def __init__(self, madlib:str, alt_of:Relationship, short_name:str, fields:list[Field]|None=None, model:Model|None=None, parent:Producer|None=None,):
|
|
1333
1335
|
found_model = model or find_model(parent)
|
|
1334
1336
|
super().__init__(found_model)
|
|
1335
1337
|
self._parent = parent
|
|
@@ -1338,9 +1340,8 @@ class RelationshipReading(Producer):
|
|
|
1338
1340
|
self._passed_short_name = short_name
|
|
1339
1341
|
if fields is not None:
|
|
1340
1342
|
self._fields:list[Field] = fields
|
|
1341
|
-
self._is_many = is_many or False
|
|
1342
1343
|
else:
|
|
1343
|
-
self._fields
|
|
1344
|
+
self._fields = alt_of._parse_schema_format(madlib)
|
|
1344
1345
|
if Counter(self._fields) != Counter(alt_of._fields):
|
|
1345
1346
|
raise ValueError(
|
|
1346
1347
|
f"Invalid alternative relationship. The alternative group of used fields ({', '.join(str(f) for f in self._fields)}) does not match with the original ({', '.join(str(f) for f in alt_of._fields)})")
|
|
@@ -1350,12 +1351,15 @@ class RelationshipReading(Producer):
|
|
|
1350
1351
|
self._annotations = []
|
|
1351
1352
|
|
|
1352
1353
|
def is_many(self):
|
|
1353
|
-
|
|
1354
|
+
if self._arity() == 1:
|
|
1355
|
+
return False
|
|
1356
|
+
uc = Unique.to_identity(*(self[i] for i in range(self._arity() - 1)))
|
|
1357
|
+
return uc not in self._alt_of._internal_constraints
|
|
1354
1358
|
|
|
1355
1359
|
def _arity(self):
|
|
1356
1360
|
return len(self._fields)
|
|
1357
1361
|
|
|
1358
|
-
def annotate(self, *annos:Expression|Relationship) -> RelationshipReading:
|
|
1362
|
+
def annotate(self, *annos:Expression|Relationship|ir.Annotation) -> RelationshipReading:
|
|
1359
1363
|
self._annotations.extend(annos)
|
|
1360
1364
|
return self
|
|
1361
1365
|
|
|
@@ -1553,7 +1557,9 @@ class ConceptExpression(Expression):
|
|
|
1553
1557
|
args[rel] = kwargs[rel._short_name]
|
|
1554
1558
|
else:
|
|
1555
1559
|
for k, v in kwargs.items():
|
|
1556
|
-
|
|
1560
|
+
atr = getattr(self._op, k)
|
|
1561
|
+
if atr:
|
|
1562
|
+
args[atr] = v
|
|
1557
1563
|
if ident:
|
|
1558
1564
|
args[self._op] = ident
|
|
1559
1565
|
return args
|
|
@@ -2021,14 +2027,17 @@ class FieldsConstraint:
|
|
|
2021
2027
|
def fields(self) -> tuple[RelationshipFieldRef, ...]:
|
|
2022
2028
|
return self._fields
|
|
2023
2029
|
|
|
2024
|
-
def __init__(self, *fields: RelationshipFieldRef, model:Model|None=None):
|
|
2025
|
-
self.
|
|
2030
|
+
def __init__(self, *fields: RelationshipFieldRef, model:Model|None=None) -> None:
|
|
2031
|
+
self._init_constraint(*fields)
|
|
2026
2032
|
self._model = model or find_model(fields)
|
|
2033
|
+
if self._model:
|
|
2034
|
+
self._model.constraints.add(self)
|
|
2035
|
+
|
|
2036
|
+
def _init_constraint(self, *fields: RelationshipFieldRef) -> None:
|
|
2037
|
+
self._fields = fields
|
|
2027
2038
|
ids = [field._field_ref._id for field in fields]
|
|
2028
2039
|
ids.sort() # ensures order doesn't matter
|
|
2029
2040
|
self._id = f'{type(self).__name__}:{ids}'
|
|
2030
|
-
if self._model:
|
|
2031
|
-
self._model.constraints.add(self)
|
|
2032
2041
|
|
|
2033
2042
|
def __eq__(self, other):
|
|
2034
2043
|
if isinstance(other, FieldsConstraint):
|
|
@@ -2038,11 +2047,21 @@ class FieldsConstraint:
|
|
|
2038
2047
|
def __hash__(self):
|
|
2039
2048
|
return hash(self._id)
|
|
2040
2049
|
|
|
2050
|
+
@classmethod
|
|
2051
|
+
def to_identity(cls, *fields: RelationshipFieldRef):
|
|
2052
|
+
obj = cls.__new__(cls)
|
|
2053
|
+
obj._init_constraint(*fields)
|
|
2054
|
+
return obj
|
|
2055
|
+
|
|
2041
2056
|
class Unique(FieldsConstraint):
|
|
2042
2057
|
|
|
2043
|
-
def __init__(self, *fields: RelationshipFieldRef, model:Model|None=None):
|
|
2044
|
-
|
|
2058
|
+
def __init__(self, *fields: RelationshipFieldRef, model:Model|None=None) -> None:
|
|
2059
|
+
first_field_rel = fields[0]._relationship
|
|
2060
|
+
self._internal = all(first_field_rel._is_same_relationship(f._relationship) for f in fields[1:])
|
|
2045
2061
|
super().__init__(*fields, model=model)
|
|
2062
|
+
if self._internal:
|
|
2063
|
+
relationship = first_field_rel._alt_of if isinstance(first_field_rel, RelationshipReading) else first_field_rel
|
|
2064
|
+
relationship._internal_constraints.add(self)
|
|
2046
2065
|
|
|
2047
2066
|
def internal(self) -> bool:
|
|
2048
2067
|
return self._internal
|
|
@@ -2146,7 +2165,7 @@ class Fragment():
|
|
|
2146
2165
|
self._meta.update(kwargs)
|
|
2147
2166
|
return self
|
|
2148
2167
|
|
|
2149
|
-
def annotate(self, *annos:Expression|Relationship) -> Fragment:
|
|
2168
|
+
def annotate(self, *annos:Expression|Relationship|ir.Annotation) -> Fragment:
|
|
2150
2169
|
self._annotations.extend(annos)
|
|
2151
2170
|
return self
|
|
2152
2171
|
|
|
@@ -2771,6 +2790,20 @@ class Compiler():
|
|
|
2771
2790
|
else:
|
|
2772
2791
|
final_keys.update(keys)
|
|
2773
2792
|
|
|
2793
|
+
# If we are exporting into a table, we need to add a key to the output
|
|
2794
|
+
# We hash all the values to create a key
|
|
2795
|
+
if not final_keys and fragment._is_export:
|
|
2796
|
+
tmp_var = ctx.to_value(self)
|
|
2797
|
+
assert isinstance(tmp_var, ir.Var)
|
|
2798
|
+
key_var = f.var(tmp_var.name, types.Hash)
|
|
2799
|
+
assert isinstance(key_var, ir.Var)
|
|
2800
|
+
final_keys.add(key_var)
|
|
2801
|
+
values = [ir.Literal(types.String, "NO_KEYS")]
|
|
2802
|
+
for fld in fields:
|
|
2803
|
+
values.append(fld[1])
|
|
2804
|
+
con = ir.Construct(None, tuple(values), key_var, FrozenOrderedSet([]))
|
|
2805
|
+
ctx.add(con)
|
|
2806
|
+
|
|
2774
2807
|
ctx.add(f.output(fields, keys=list(final_keys), annos=annos))
|
|
2775
2808
|
|
|
2776
2809
|
def require(self, fragment:Fragment, items:PySequence[Expression], ctx:CompilerContext):
|
|
@@ -3261,7 +3294,7 @@ class Compiler():
|
|
|
3261
3294
|
|
|
3262
3295
|
ctx.add(f.derive(relation, [out]))
|
|
3263
3296
|
# derive the membership and all the relationships
|
|
3264
|
-
rels = self.relation_dict({
|
|
3297
|
+
rels = self.relation_dict({attr: v for k, v in kwargs.items() if (attr := getattr(item._op, k, None)) is not None}, ctx)
|
|
3265
3298
|
for k, v in rels.items():
|
|
3266
3299
|
assert not isinstance(v, list)
|
|
3267
3300
|
ctx.add(f.derive(k, [out, v]))
|
{relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/internal/snowflake.py
RENAMED
|
@@ -262,10 +262,12 @@ class Table():
|
|
|
262
262
|
else:
|
|
263
263
|
me = self._rel._field_refs[0]
|
|
264
264
|
b.where(self).define(concept(me))
|
|
265
|
+
# if there are no keys all the fields must be properties
|
|
266
|
+
rel_func = b.Relationship if keys else b.Property
|
|
265
267
|
for field in self._rel._fields[1:]:
|
|
266
268
|
field_name = sanitize_identifier(field.name.lower())
|
|
267
269
|
if field_name not in key_dict:
|
|
268
|
-
r =
|
|
270
|
+
r = rel_func(
|
|
269
271
|
f"{{{concept}}} has {{{field_name}:{field.type_str}}}",
|
|
270
272
|
parent=concept,
|
|
271
273
|
short_name=field_name,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from relationalai.semantics.metamodel import factory as f
|
|
2
|
+
from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
3
|
+
from relationalai.semantics.metamodel import builtins
|
|
4
|
+
|
|
5
|
+
# Indicates a relation is short-lived, thus, backends should not optimize for incremental
|
|
6
|
+
# maintenance.
|
|
7
|
+
adhoc = f.relation("adhoc", [])
|
|
8
|
+
adhoc_annotation = f.annotation(adhoc, [])
|
|
9
|
+
|
|
10
|
+
# We only want to emit attributes for a known set of annotations.
|
|
11
|
+
annotations_to_emit = FrozenOrderedSet([
|
|
12
|
+
adhoc.name,
|
|
13
|
+
builtins.function.name,
|
|
14
|
+
])
|
|
@@ -61,3 +61,6 @@ def mk_primitive(name: str, terms: list[lqp.RelTerm]) -> lqp.Primitive:
|
|
|
61
61
|
|
|
62
62
|
def mk_pragma(name: str, terms: list[lqp.Var]) -> lqp.Pragma:
|
|
63
63
|
return lqp.Pragma(name=name, terms=terms, meta=None)
|
|
64
|
+
|
|
65
|
+
def mk_attribute(name: str, args: list[lqp.Value]) -> lqp.Attribute:
|
|
66
|
+
return lqp.Attribute(name=name, args=args, meta=None)
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
from relationalai.semantics.metamodel import ir, builtins
|
|
1
|
+
from relationalai.semantics.metamodel import ir, builtins, helpers, types
|
|
2
2
|
from relationalai.semantics.metamodel.visitor import collect_by_type
|
|
3
|
-
from relationalai.semantics.
|
|
3
|
+
from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
4
|
+
from relationalai.semantics.lqp import ir as lqp, utils, types as lqp_types, builtins as lqp_builtins
|
|
4
5
|
from relationalai.semantics.lqp.primitives import lqp_avg_op, lqp_operator, build_primitive
|
|
5
6
|
from relationalai.semantics.lqp.pragmas import pragma_to_lqp_name
|
|
6
7
|
from relationalai.semantics.lqp.types import meta_type_to_lqp
|
|
7
8
|
from relationalai.semantics.lqp.constructors import (
|
|
8
9
|
mk_abstraction, mk_and, mk_exists, mk_or, mk_pragma, mk_primitive,
|
|
9
|
-
mk_specialized_value, mk_type, mk_value, mk_var
|
|
10
|
+
mk_specialized_value, mk_type, mk_value, mk_var, mk_attribute
|
|
10
11
|
)
|
|
11
12
|
from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var
|
|
12
13
|
from relationalai.semantics.lqp.validators import assert_valid_input
|
|
@@ -14,6 +15,7 @@ from relationalai.semantics.lqp.validators import assert_valid_input
|
|
|
14
15
|
from decimal import Decimal as PyDecimal
|
|
15
16
|
from datetime import datetime, date
|
|
16
17
|
from typing import Tuple, cast, Union, Optional
|
|
18
|
+
from warnings import warn
|
|
17
19
|
import re
|
|
18
20
|
import uuid
|
|
19
21
|
|
|
@@ -134,6 +136,23 @@ def _translate_to_decls(ctx: TranslationCtx, rule: ir.Logical) -> list[lqp.Decla
|
|
|
134
136
|
|
|
135
137
|
return [_translate_effect(ctx, effect, mk_and(conjuncts)) for effect in effects]
|
|
136
138
|
|
|
139
|
+
def _translate_annotations(annotations: FrozenOrderedSet[ir.Annotation]) -> list[lqp.Attribute]:
|
|
140
|
+
attributes = []
|
|
141
|
+
for annotation in annotations:
|
|
142
|
+
|
|
143
|
+
if annotation.relation.name in lqp_builtins.annotations_to_emit:
|
|
144
|
+
if any(not isinstance(a, ir.Literal) for a in annotation.args):
|
|
145
|
+
warn("LQP currently ignores annotation parameters with non-literal values")
|
|
146
|
+
continue
|
|
147
|
+
|
|
148
|
+
# Convert literal arguments to LQP values
|
|
149
|
+
args = []
|
|
150
|
+
for a in annotation.args:
|
|
151
|
+
assert isinstance(a, ir.Literal)
|
|
152
|
+
args.append(mk_value(a.value))
|
|
153
|
+
attributes.append(mk_attribute(annotation.relation.name, args))
|
|
154
|
+
return attributes
|
|
155
|
+
|
|
137
156
|
# Translates an effect (export, output, or update) into the corresponding def. Note that
|
|
138
157
|
# this method only generates the def and not the LQP read operation, which is added later by
|
|
139
158
|
# `_get_output_reads` and `_get_export_reads`.
|
|
@@ -141,7 +160,7 @@ def _translate_effect(ctx: TranslationCtx, effect: Union[ir.Output, ir.Update],
|
|
|
141
160
|
bindings = _effect_bindings(effect)
|
|
142
161
|
|
|
143
162
|
def _is_export(e):
|
|
144
|
-
return isinstance(e, ir.Output) and
|
|
163
|
+
return isinstance(e, ir.Output) and builtins.export_annotation in e.annotations
|
|
145
164
|
|
|
146
165
|
if isinstance(effect, ir.Output):
|
|
147
166
|
projection, eqs, suffix = _translate_output_bindings(ctx, bindings)
|
|
@@ -179,7 +198,9 @@ def _translate_effect(ctx: TranslationCtx, effect: Union[ir.Output, ir.Update],
|
|
|
179
198
|
return lqp.Def(
|
|
180
199
|
name = rel_id,
|
|
181
200
|
body = mk_abstraction(projection, new_body),
|
|
182
|
-
|
|
201
|
+
# TODO this only covers the annotations on the effect itself. Annotations on the
|
|
202
|
+
# relation are not included yet.
|
|
203
|
+
attrs = _translate_annotations(effect.annotations),
|
|
183
204
|
meta = None,
|
|
184
205
|
)
|
|
185
206
|
|
|
@@ -457,10 +478,7 @@ def _translate_to_formula(ctx: TranslationCtx, task: ir.Task) -> lqp.Formula:
|
|
|
457
478
|
return mk_exists(lqp_vars, mk_and(conjuncts))
|
|
458
479
|
elif isinstance(task, ir.Construct):
|
|
459
480
|
assert len(task.values) >= 1, "Construct should have at least one value"
|
|
460
|
-
|
|
461
|
-
name = task.values[0].name
|
|
462
|
-
terms = [_translate_term(ctx, ir.Literal(types.String, name))]
|
|
463
|
-
terms.extend([_translate_term(ctx, arg) for arg in task.values[1:]])
|
|
481
|
+
terms = [_translate_term(ctx, arg) for arg in task.values]
|
|
464
482
|
result_term = _translate_term(ctx, task.id_var)
|
|
465
483
|
terms.append(result_term)
|
|
466
484
|
assert result_term[1].type_name == lqp.TypeName.UINT128, \
|
|
@@ -494,7 +512,10 @@ def _translate_relterm(ctx: TranslationCtx, term: ir.Value) -> Tuple[lqp.RelTerm
|
|
|
494
512
|
return _translate_term(ctx, term)
|
|
495
513
|
|
|
496
514
|
def _translate_term(ctx: TranslationCtx, term: ir.Value) -> Tuple[lqp.Term, lqp.Type]:
|
|
497
|
-
if isinstance(term, ir.
|
|
515
|
+
if isinstance(term, ir.ScalarType):
|
|
516
|
+
# TODO: ScalarType is not like other terms, should be handled separately.
|
|
517
|
+
return to_lqp_value(term.name, types.String), meta_type_to_lqp(types.String)
|
|
518
|
+
elif isinstance(term, ir.Var):
|
|
498
519
|
name = ctx.var_names.get_name_by_id(term.id, term.name)
|
|
499
520
|
t = meta_type_to_lqp(term.type)
|
|
500
521
|
return mk_var(name), t
|
|
@@ -504,7 +525,7 @@ def _translate_term(ctx: TranslationCtx, term: ir.Value) -> Tuple[lqp.Term, lqp.
|
|
|
504
525
|
return v, meta_type_to_lqp(term.type)
|
|
505
526
|
|
|
506
527
|
def _translate_to_atom(ctx: TranslationCtx, task: ir.Lookup) -> lqp.Formula:
|
|
507
|
-
if task.relation ==
|
|
528
|
+
if task.relation == builtins.cast:
|
|
508
529
|
assert len(task.args) == 3, f"expected three terms for {task.relation.name}, got {len(task.args)}"
|
|
509
530
|
|
|
510
531
|
terms = []
|
|
@@ -529,11 +550,11 @@ def _translate_to_atom(ctx: TranslationCtx, task: ir.Lookup) -> lqp.Formula:
|
|
|
529
550
|
terms.append(term)
|
|
530
551
|
term_types.append(ty)
|
|
531
552
|
|
|
532
|
-
if
|
|
553
|
+
if builtins.is_pragma(task.relation):
|
|
533
554
|
lqp_name = pragma_to_lqp_name(task.relation.name)
|
|
534
555
|
return mk_pragma(lqp_name, terms)
|
|
535
556
|
|
|
536
|
-
if
|
|
557
|
+
if builtins.is_builtin(task.relation):
|
|
537
558
|
return build_primitive(task.relation.name, terms, term_types)
|
|
538
559
|
|
|
539
560
|
if helpers.is_external(task.relation):
|
|
@@ -19,9 +19,9 @@ def lqp_passes() -> list[Pass]:
|
|
|
19
19
|
return [
|
|
20
20
|
FDConstraints(),
|
|
21
21
|
Checker(),
|
|
22
|
+
CDC(), # specialize to physical relations before extracting nested and typing
|
|
22
23
|
ExtractNestedLogicals(), # before InferTypes to avoid extracting casts
|
|
23
24
|
InferTypes(),
|
|
24
|
-
CDC(),
|
|
25
25
|
DNFUnionSplitter(),
|
|
26
26
|
ExtractKeys(),
|
|
27
27
|
# Broken
|
{relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/builtins.py
RENAMED
|
@@ -27,6 +27,9 @@ lte = _comparator("<=")
|
|
|
27
27
|
neq = _comparator("!=")
|
|
28
28
|
eq = _comparator("=", False)
|
|
29
29
|
|
|
30
|
+
def is_eq(other: ir.Relation) -> bool:
|
|
31
|
+
return other == eq or other in eq.overloads
|
|
32
|
+
|
|
30
33
|
# Arithmetic operators
|
|
31
34
|
def _binary_op(name: str, with_string=False, result_type: Optional[ir.Type]=None):
|
|
32
35
|
overload_types = [types.Int64, types.Int128, types.Float, types.GenericDecimal]
|
{relationalai-0.9.17 → relationalai-0.9.18}/src/relationalai/semantics/metamodel/dependency.py
RENAMED
|
@@ -622,7 +622,7 @@ class BindingAnalysis(visitor.Visitor):
|
|
|
622
622
|
if isinstance(child, ir.Lookup):
|
|
623
623
|
# special case eq because it can be input or output
|
|
624
624
|
# TODO: this is similar to what's done below in visit_lookup, modularize
|
|
625
|
-
if child.relation
|
|
625
|
+
if builtins.is_eq(child.relation):
|
|
626
626
|
x, y = child.args[0], child.args[1]
|
|
627
627
|
if isinstance(x, ir.Var) and not isinstance(y, ir.Var):
|
|
628
628
|
grounds.add(x)
|
|
@@ -748,7 +748,7 @@ class BindingAnalysis(visitor.Visitor):
|
|
|
748
748
|
else:
|
|
749
749
|
self.output(node, arg)
|
|
750
750
|
|
|
751
|
-
if node.relation
|
|
751
|
+
if builtins.is_eq(node.relation):
|
|
752
752
|
# special case eq because it can be input or output
|
|
753
753
|
x, y = node.args[0], node.args[1]
|
|
754
754
|
if isinstance(x, ir.Var) and not isinstance(y, ir.Var):
|
|
@@ -82,7 +82,7 @@ def get_outputs(lookup: ir.Lookup):
|
|
|
82
82
|
Return an array with the arguments of this lookup that are referring to output fields
|
|
83
83
|
on the relation being looked up.
|
|
84
84
|
"""
|
|
85
|
-
if lookup.relation
|
|
85
|
+
if builtins.is_eq(lookup.relation):
|
|
86
86
|
# special case eq because it can be input or output
|
|
87
87
|
x, y = lookup.args[0], lookup.args[1]
|
|
88
88
|
if isinstance(x, ir.Var) and not isinstance(y, ir.Var):
|