relationalai 0.12.6__tar.gz → 0.12.7__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.6 → relationalai-0.12.7}/PKG-INFO +2 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/pyproject.toml +9 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/snowflake.py +11 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/constructors/__init__.py +2 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/rewrite/__init__.py +2 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/internal.py +1 -4
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/snowflake.py +14 -1
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/constructors.py +0 -5
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/executor.py +34 -10
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/intrinsics.py +2 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/model2lqp.py +10 -7
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/passes.py +27 -8
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/primitives.py +15 -15
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/__init__.py +2 -2
- relationalai-0.12.6/src/relationalai/semantics/lqp/rewrite/fd_constraints.py → relationalai-0.12.7/src/relationalai/semantics/lqp/rewrite/function_annotations.py +4 -4
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/utils.py +17 -13
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/compiler.py +2 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/executor.py +30 -8
- relationalai-0.12.7/src/relationalai/semantics/snowflake/__init__.py +3 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/snowflake.py +6 -2
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/test_snapshot_abstract.py +5 -4
- relationalai-0.12.6/src/relationalai/semantics/snowflake/__init__.py +0 -3
- {relationalai-0.12.6 → relationalai-0.12.7}/.gitignore +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/LICENSE +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/docs/pypi/README.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/azure.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/use_index_poller.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/compiler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/debugging.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/docutils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/dsl.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/errors.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/README.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/api.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/code_organization.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/metagen.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/rel.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/builtins.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/helpers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/math.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/re.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cli_controls.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/notes +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/query_utils.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/format.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: relationalai
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.7
|
|
4
4
|
Summary: RelationalAI Library and CLI
|
|
5
5
|
Author-email: RelationalAI <support@relational.ai>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -11,7 +11,7 @@ Requires-Dist: colorama
|
|
|
11
11
|
Requires-Dist: cryptography
|
|
12
12
|
Requires-Dist: gravis
|
|
13
13
|
Requires-Dist: inquirerpy
|
|
14
|
-
Requires-Dist: lqp==0.1.
|
|
14
|
+
Requires-Dist: lqp==0.1.18
|
|
15
15
|
Requires-Dist: nicegui==2.16.1
|
|
16
16
|
Requires-Dist: numpy<2
|
|
17
17
|
Requires-Dist: opentelemetry-api
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = 'relationalai'
|
|
3
|
-
version = '0.12.
|
|
3
|
+
version = '0.12.7'
|
|
4
4
|
description = 'RelationalAI Library and CLI'
|
|
5
5
|
readme="docs/pypi/README.md"
|
|
6
6
|
authors = [
|
|
@@ -8,7 +8,7 @@ authors = [
|
|
|
8
8
|
]
|
|
9
9
|
requires-python = ">= 3.10"
|
|
10
10
|
dependencies = [
|
|
11
|
-
"lqp==0.1.
|
|
11
|
+
"lqp==0.1.18",
|
|
12
12
|
"snowflake-connector-python[secure-local-storage]",
|
|
13
13
|
"snowflake-snowpark-python>=1.38.0",
|
|
14
14
|
"typing-extensions",
|
|
@@ -121,3 +121,10 @@ reportMissingTypeStubs = false
|
|
|
121
121
|
pythonVersion = "3.9"
|
|
122
122
|
typeCheckingMode = "standard"
|
|
123
123
|
reportUnusedExpression = false
|
|
124
|
+
|
|
125
|
+
[tool.coverage.paths]
|
|
126
|
+
source = [
|
|
127
|
+
"src/relationalai",
|
|
128
|
+
".venv/*/lib/python*/site-packages/relationalai",
|
|
129
|
+
".venv/*/Lib/site-packages/relationalai"
|
|
130
|
+
]
|
|
@@ -2842,6 +2842,15 @@ class SnowflakeTable(dsl.Type):
|
|
|
2842
2842
|
else:
|
|
2843
2843
|
self(snowflake_id=id).set(**{prop_ident: val})
|
|
2844
2844
|
|
|
2845
|
+
# Because we're bypassing a bunch of the normal Type.add machinery here,
|
|
2846
|
+
# we need to manually account for the case where people are using value types.
|
|
2847
|
+
def wrapped(x):
|
|
2848
|
+
if not model._config.get("compiler.use_value_types", False):
|
|
2849
|
+
return x
|
|
2850
|
+
other_id = dsl.create_var()
|
|
2851
|
+
model._action(dsl.build.construct(self._type, [x, other_id]))
|
|
2852
|
+
return other_id
|
|
2853
|
+
|
|
2845
2854
|
# new UInt128 schema mapping rules
|
|
2846
2855
|
with model.rule(dynamic=True, globalize=True, source=self._source):
|
|
2847
2856
|
id = dsl.create_var()
|
|
@@ -2851,7 +2860,7 @@ class SnowflakeTable(dsl.Type):
|
|
|
2851
2860
|
# for avoiding a non-blocking warning
|
|
2852
2861
|
edb(dsl.Symbol("METADATA$KEY"), id)
|
|
2853
2862
|
std.rel.UInt128(id)
|
|
2854
|
-
self.add(id, snowflake_id=id)
|
|
2863
|
+
self.add(wrapped(id), snowflake_id=id)
|
|
2855
2864
|
|
|
2856
2865
|
for prop, prop_type in self._schema["columns"].items():
|
|
2857
2866
|
_prop = prop
|
|
@@ -2873,7 +2882,7 @@ class SnowflakeTable(dsl.Type):
|
|
|
2873
2882
|
model._check_property(_prop._prop)
|
|
2874
2883
|
raw_relation = getattr(std.rel, prop_ident)
|
|
2875
2884
|
dsl.tag(raw_relation, dsl.Builtins.FunctionAnnotation)
|
|
2876
|
-
raw_relation.add(id, val)
|
|
2885
|
+
raw_relation.add(wrapped(id), val)
|
|
2877
2886
|
|
|
2878
2887
|
def namespace(self):
|
|
2879
2888
|
return f"{self._parent._parent._name}.{self._parent._name}"
|
|
@@ -2,12 +2,12 @@ import warnings
|
|
|
2
2
|
|
|
3
3
|
from relationalai.semantics.lqp.constructors import (
|
|
4
4
|
mk_abstraction, mk_and, mk_exists, mk_or, mk_pragma, mk_primitive,
|
|
5
|
-
mk_specialized_value, mk_type, mk_value
|
|
5
|
+
mk_specialized_value, mk_type, mk_value
|
|
6
6
|
)
|
|
7
7
|
|
|
8
8
|
__all__ = [
|
|
9
9
|
"mk_abstraction", "mk_and", "mk_exists", "mk_or", "mk_pragma", "mk_primitive", "mk_specialized_value", "mk_type",
|
|
10
|
-
"mk_value"
|
|
10
|
+
"mk_value"
|
|
11
11
|
]
|
|
12
12
|
|
|
13
13
|
warnings.warn(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from relationalai.semantics.metamodel.rewrite import Flatten, \
|
|
2
2
|
DNFUnionSplitter, ExtractNestedLogicals, flatten
|
|
3
3
|
from relationalai.semantics.lqp.rewrite import Splinter, \
|
|
4
|
-
ExtractKeys,
|
|
4
|
+
ExtractKeys, FunctionAnnotations
|
|
5
5
|
|
|
6
6
|
__all__ = ["Splinter", "Flatten", "DNFUnionSplitter", "ExtractKeys",
|
|
7
|
-
"ExtractNestedLogicals", "
|
|
7
|
+
"ExtractNestedLogicals", "FunctionAnnotations", "flatten"]
|
|
@@ -2550,8 +2550,6 @@ class Fragment():
|
|
|
2550
2550
|
from .snowflake import Table
|
|
2551
2551
|
assert isinstance(table, Table), "Only Snowflake tables are supported for now"
|
|
2552
2552
|
|
|
2553
|
-
result_cols = table._col_names
|
|
2554
|
-
|
|
2555
2553
|
clone = Fragment(parent=self)
|
|
2556
2554
|
clone._is_export = True
|
|
2557
2555
|
qb_model = clone._model or Model("anon")
|
|
@@ -2559,8 +2557,7 @@ class Fragment():
|
|
|
2559
2557
|
clone._source = runtime_env.get_source_pos()
|
|
2560
2558
|
with debugging.span("query", dsl=str(clone), **with_source(clone), meta=clone._meta):
|
|
2561
2559
|
query_task = qb_model._compiler.fragment(clone)
|
|
2562
|
-
qb_model._to_executor().execute(ir_model, query_task,
|
|
2563
|
-
|
|
2560
|
+
qb_model._to_executor().execute(ir_model, query_task, export_to=table, update=update, meta=clone._meta)
|
|
2564
2561
|
|
|
2565
2562
|
#--------------------------------------------------
|
|
2566
2563
|
# Select / Where
|
{relationalai-0.12.6 → relationalai-0.12.7}/src/relationalai/semantics/internal/snowflake.py
RENAMED
|
@@ -12,7 +12,18 @@ from . import internal as b, annotations as anns
|
|
|
12
12
|
from relationalai import debugging
|
|
13
13
|
from relationalai.errors import UnsupportedColumnTypesWarning
|
|
14
14
|
from snowflake.snowpark.context import get_active_session
|
|
15
|
+
from typing import ClassVar, Optional
|
|
15
16
|
|
|
17
|
+
#--------------------------------------------------
|
|
18
|
+
# Iceberg Configuration
|
|
19
|
+
#--------------------------------------------------
|
|
20
|
+
@dataclass
|
|
21
|
+
class IcebergConfig:
|
|
22
|
+
"""Configuration for exporting to Iceberg tables."""
|
|
23
|
+
external_volume: str | None = None
|
|
24
|
+
default: ClassVar[Optional["IcebergConfig"]]
|
|
25
|
+
|
|
26
|
+
IcebergConfig.default = IcebergConfig()
|
|
16
27
|
#--------------------------------------------------
|
|
17
28
|
# Helpers
|
|
18
29
|
#--------------------------------------------------
|
|
@@ -191,7 +202,7 @@ class Table():
|
|
|
191
202
|
_schemas:dict[tuple[str, str], SchemaInfo] = {}
|
|
192
203
|
_used_sources:OrderedSet[Table] = ordered_set()
|
|
193
204
|
|
|
194
|
-
def __init__(self, fqn:str, cols:list[str]|None=None, schema:dict[str, str|b.Concept]|None=None) -> None:
|
|
205
|
+
def __init__(self, fqn:str, cols:list[str]|None=None, schema:dict[str, str|b.Concept]|None=None, config: IcebergConfig|None=None) -> None:
|
|
195
206
|
self._fqn = fqn
|
|
196
207
|
parser = IdentityParser(fqn, require_all_parts=True)
|
|
197
208
|
self._database, self._schema, self._table, self._fqn = parser.to_list()
|
|
@@ -201,6 +212,8 @@ class Table():
|
|
|
201
212
|
self._ref = self._concept.ref("row_id")
|
|
202
213
|
self._cols = {}
|
|
203
214
|
self._col_names = cols
|
|
215
|
+
self._iceberg_config = config
|
|
216
|
+
self._is_iceberg = config is not None
|
|
204
217
|
info = self._schemas.get((self._database, self._schema))
|
|
205
218
|
if not info:
|
|
206
219
|
info = self._schemas[(self._database, self._schema)] = SchemaInfo(self._database, self._schema)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from typing import Tuple
|
|
2
2
|
from relationalai.semantics.lqp import ir as lqp
|
|
3
|
-
from relationalai.semantics.metamodel.ir import sanitize
|
|
4
3
|
|
|
5
4
|
def mk_and(args: list[lqp.Formula]) -> lqp.Formula:
|
|
6
5
|
# Flatten nested conjunctions
|
|
@@ -49,10 +48,6 @@ def mk_specialized_value(value) -> lqp.SpecializedValue:
|
|
|
49
48
|
def mk_value(value) -> lqp.Value:
|
|
50
49
|
return lqp.Value(value=value, meta=None)
|
|
51
50
|
|
|
52
|
-
def mk_var(name: str) -> lqp.Var:
|
|
53
|
-
_name = '_' if name == '_' else sanitize(name)
|
|
54
|
-
return lqp.Var(name=_name, meta=None)
|
|
55
|
-
|
|
56
51
|
def mk_type(typename: lqp.TypeName, parameters: list[lqp.Value]=[]) -> lqp.Type:
|
|
57
52
|
return lqp.Type(type_name=typename, parameters=parameters, meta=None)
|
|
58
53
|
|
|
@@ -4,7 +4,7 @@ import atexit
|
|
|
4
4
|
import re
|
|
5
5
|
|
|
6
6
|
from pandas import DataFrame
|
|
7
|
-
from typing import Any, Optional, Literal
|
|
7
|
+
from typing import Any, Optional, Literal, TYPE_CHECKING
|
|
8
8
|
from snowflake.snowpark import Session
|
|
9
9
|
import relationalai as rai
|
|
10
10
|
|
|
@@ -20,10 +20,14 @@ from relationalai.semantics.lqp.ir import convert_transaction, validate_lqp
|
|
|
20
20
|
from relationalai.clients.config import Config
|
|
21
21
|
from relationalai.clients.snowflake import APP_NAME
|
|
22
22
|
from relationalai.clients.types import TransactionAsyncResponse
|
|
23
|
-
from relationalai.clients.util import IdentityParser
|
|
23
|
+
from relationalai.clients.util import IdentityParser, escape_for_f_string
|
|
24
24
|
from relationalai.tools.constants import USE_DIRECT_ACCESS, QUERY_ATTRIBUTES_HEADER
|
|
25
25
|
from relationalai.tools.query_utils import prepare_metadata_for_headers
|
|
26
26
|
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from relationalai.semantics.snowflake import Table
|
|
29
|
+
|
|
30
|
+
|
|
27
31
|
class LQPExecutor(e.Executor):
|
|
28
32
|
"""Executes LQP using the RAI client."""
|
|
29
33
|
|
|
@@ -172,12 +176,12 @@ class LQPExecutor(e.Executor):
|
|
|
172
176
|
elif len(all_errors) > 1:
|
|
173
177
|
raise errors.RAIExceptionSet(all_errors)
|
|
174
178
|
|
|
175
|
-
def _export(self, txn_id: str, export_info: tuple,
|
|
179
|
+
def _export(self, txn_id: str, export_info: tuple, dest: Table, actual_cols: list[str], declared_cols: list[str], update: bool):
|
|
176
180
|
# At this point of the export, we assume that a CSV file has already been written
|
|
177
181
|
# to the Snowflake Native App stage area. Thus, the purpose of this method is to
|
|
178
182
|
# copy the data from the CSV file to the destination table.
|
|
179
183
|
_exec = self.resources._exec
|
|
180
|
-
dest_database, dest_schema, dest_table, _ = IdentityParser(
|
|
184
|
+
dest_database, dest_schema, dest_table, _ = IdentityParser(dest._fqn, require_all_parts=True).to_list()
|
|
181
185
|
filename = export_info[0]
|
|
182
186
|
result_table_name = filename + "_table"
|
|
183
187
|
|
|
@@ -203,8 +207,28 @@ class LQPExecutor(e.Executor):
|
|
|
203
207
|
# destination table. This step also cleans up the result table.
|
|
204
208
|
out_sample = _exec(f"select * from {APP_NAME}.results.{result_table_name} limit 1;")
|
|
205
209
|
names = self._build_projection(declared_cols, actual_cols, column_fields, out_sample)
|
|
210
|
+
dest_fqn = dest._fqn
|
|
206
211
|
try:
|
|
207
212
|
if not update:
|
|
213
|
+
createTableLogic = f"""
|
|
214
|
+
CREATE TABLE {dest_fqn} AS
|
|
215
|
+
SELECT {names}
|
|
216
|
+
FROM {APP_NAME}.results.{result_table_name};
|
|
217
|
+
"""
|
|
218
|
+
if dest._is_iceberg:
|
|
219
|
+
assert dest._iceberg_config is not None
|
|
220
|
+
external_volume_clause = ""
|
|
221
|
+
if dest._iceberg_config.external_volume:
|
|
222
|
+
external_volume_clause = f"EXTERNAL_VOLUME = '{dest._iceberg_config.external_volume}'"
|
|
223
|
+
createTableLogic = f"""
|
|
224
|
+
CREATE ICEBERG TABLE {dest_fqn}
|
|
225
|
+
CATALOG = "SNOWFLAKE"
|
|
226
|
+
{external_volume_clause}
|
|
227
|
+
AS
|
|
228
|
+
SELECT {names}
|
|
229
|
+
FROM {APP_NAME}.results.{result_table_name};
|
|
230
|
+
"""
|
|
231
|
+
|
|
208
232
|
_exec(f"""
|
|
209
233
|
BEGIN
|
|
210
234
|
-- Check if table exists
|
|
@@ -227,9 +251,7 @@ class LQPExecutor(e.Executor):
|
|
|
227
251
|
ELSE
|
|
228
252
|
-- Create table based on the SELECT
|
|
229
253
|
EXECUTE IMMEDIATE '
|
|
230
|
-
|
|
231
|
-
SELECT {names}
|
|
232
|
-
FROM {APP_NAME}.results.{result_table_name};
|
|
254
|
+
{escape_for_f_string(createTableLogic)}
|
|
233
255
|
';
|
|
234
256
|
END IF;
|
|
235
257
|
END;
|
|
@@ -376,7 +398,7 @@ class LQPExecutor(e.Executor):
|
|
|
376
398
|
return final_model, export_info, txn_proto
|
|
377
399
|
|
|
378
400
|
# TODO (azreika): This should probably be split up into exporting and other processing. There are quite a lot of arguments here...
|
|
379
|
-
def _process_results(self, task: ir.Task, final_model: ir.Model, raw_results: TransactionAsyncResponse,
|
|
401
|
+
def _process_results(self, task: ir.Task, final_model: ir.Model, raw_results: TransactionAsyncResponse, export_info: Optional[tuple], export_to: Optional[Table], update: bool) -> DataFrame:
|
|
380
402
|
cols, extra_cols = self._compute_cols(task, final_model)
|
|
381
403
|
|
|
382
404
|
df, errs = result_helpers.format_results(raw_results, cols)
|
|
@@ -391,6 +413,8 @@ class LQPExecutor(e.Executor):
|
|
|
391
413
|
assert cols, "No columns found in the output"
|
|
392
414
|
assert isinstance(raw_results, TransactionAsyncResponse) and raw_results.transaction, "Invalid transaction result"
|
|
393
415
|
|
|
416
|
+
result_cols = export_to._col_names
|
|
417
|
+
|
|
394
418
|
if result_cols is not None:
|
|
395
419
|
assert all(col in result_cols or col in extra_cols for col in cols)
|
|
396
420
|
else:
|
|
@@ -403,7 +427,7 @@ class LQPExecutor(e.Executor):
|
|
|
403
427
|
return self._postprocess_df(self.config, df, extra_cols)
|
|
404
428
|
|
|
405
429
|
def execute(self, model: ir.Model, task: ir.Task, format: Literal["pandas", "snowpark"] = "pandas",
|
|
406
|
-
|
|
430
|
+
export_to: Optional[Table] = None,
|
|
407
431
|
update: bool = False, meta: dict[str, Any] | None = None) -> DataFrame:
|
|
408
432
|
self.prepare_data()
|
|
409
433
|
previous_model = self._last_model
|
|
@@ -433,7 +457,7 @@ class LQPExecutor(e.Executor):
|
|
|
433
457
|
assert isinstance(raw_results, TransactionAsyncResponse)
|
|
434
458
|
|
|
435
459
|
try:
|
|
436
|
-
return self._process_results(task, final_model, raw_results,
|
|
460
|
+
return self._process_results(task, final_model, raw_results, export_info, export_to, update)
|
|
437
461
|
except Exception as e:
|
|
438
462
|
# If processing the results failed, revert to the previous model.
|
|
439
463
|
self._last_model = previous_model
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from datetime import datetime, timezone
|
|
2
2
|
|
|
3
3
|
from relationalai.semantics.lqp import ir as lqp
|
|
4
|
-
from relationalai.semantics.lqp.constructors import mk_abstraction, mk_value,
|
|
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
|
def mk_intrinsic_datetime_now() -> lqp.Def:
|
|
8
8
|
"""Constructs a definition of the current datetime."""
|
|
9
9
|
id = lqp_hash("__pyrel_lqp_intrinsic_datetime_now")
|
|
10
|
-
out =
|
|
10
|
+
out = lqp.Var(name="out", meta=None)
|
|
11
11
|
out_type = mk_type(lqp.TypeName.DATETIME)
|
|
12
12
|
now = mk_value(lqp.DateTimeValue(value=datetime.now(timezone.utc), meta=None))
|
|
13
13
|
datetime_now = mk_abstraction(
|
|
@@ -7,7 +7,7 @@ from relationalai.semantics.lqp.pragmas import pragma_to_lqp_name
|
|
|
7
7
|
from relationalai.semantics.lqp.types import meta_type_to_lqp
|
|
8
8
|
from relationalai.semantics.lqp.constructors import (
|
|
9
9
|
mk_abstraction, mk_and, mk_exists, mk_or, mk_pragma, mk_primitive,
|
|
10
|
-
mk_specialized_value, mk_type, mk_value,
|
|
10
|
+
mk_specialized_value, mk_type, mk_value, mk_attribute
|
|
11
11
|
)
|
|
12
12
|
from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var
|
|
13
13
|
from relationalai.semantics.lqp.validators import assert_valid_input
|
|
@@ -253,7 +253,7 @@ def _translate_rank(ctx: TranslationCtx, rank: ir.Rank, body: lqp.Formula) -> lq
|
|
|
253
253
|
# to convert it to Int128.
|
|
254
254
|
result_var, _ = _translate_term(ctx, rank.result)
|
|
255
255
|
# The primitive will return an Int64 result, so we need a var to hold the intermediary.
|
|
256
|
-
result_64_var = gen_unique_var(ctx, "
|
|
256
|
+
result_64_var = gen_unique_var(ctx, "v_rank")
|
|
257
257
|
result_64_type = mk_type(lqp.TypeName.INT)
|
|
258
258
|
|
|
259
259
|
cast = lqp.Cast(input=result_64_var, result=result_var, meta=None)
|
|
@@ -306,7 +306,7 @@ def _translate_descending_rank(ctx: TranslationCtx, limit: int, result: lqp.Var,
|
|
|
306
306
|
aggr_abstr_args = new_abstr_args + [(count_var, count_type)]
|
|
307
307
|
count_aggr = lqp.Reduce(
|
|
308
308
|
op=lqp_operator(
|
|
309
|
-
ctx
|
|
309
|
+
ctx,
|
|
310
310
|
"count",
|
|
311
311
|
"count",
|
|
312
312
|
mk_type(lqp.TypeName.INT)
|
|
@@ -431,7 +431,7 @@ def _translate_aggregate(ctx: TranslationCtx, aggr: ir.Aggregate, body: lqp.Form
|
|
|
431
431
|
(sum_var, sum_type) = abstr_args[-2]
|
|
432
432
|
|
|
433
433
|
result = lqp.Reduce(
|
|
434
|
-
op=lqp_avg_op(ctx
|
|
434
|
+
op=lqp_avg_op(ctx, aggr.aggregation.name, sum_var.name, sum_type),
|
|
435
435
|
body=mk_abstraction(abstr_args, body),
|
|
436
436
|
terms=[sum_result, count_result],
|
|
437
437
|
meta=None,
|
|
@@ -464,7 +464,7 @@ def _translate_aggregate(ctx: TranslationCtx, aggr: ir.Aggregate, body: lqp.Form
|
|
|
464
464
|
|
|
465
465
|
# Group-bys do not need to be handled at all, since they are introduced outside already
|
|
466
466
|
reduce = lqp.Reduce(
|
|
467
|
-
op=lqp_operator(ctx
|
|
467
|
+
op=lqp_operator(ctx, aggr.aggregation.name, aggr_arg.name, aggr_arg_type),
|
|
468
468
|
body=mk_abstraction(abstr_args, body),
|
|
469
469
|
terms=output_vars,
|
|
470
470
|
meta=None
|
|
@@ -523,9 +523,8 @@ def _translate_term(ctx: TranslationCtx, term: ir.Value) -> Tuple[lqp.Term, lqp.
|
|
|
523
523
|
# TODO: ScalarType is not like other terms, should be handled separately.
|
|
524
524
|
return to_lqp_value(term.name, types.String), meta_type_to_lqp(types.String)
|
|
525
525
|
elif isinstance(term, ir.Var):
|
|
526
|
-
name = ctx.var_names.get_name_by_id(term.id, term.name)
|
|
527
526
|
t = meta_type_to_lqp(term.type)
|
|
528
|
-
return
|
|
527
|
+
return _translate_var(ctx, term), t
|
|
529
528
|
else:
|
|
530
529
|
assert isinstance(term, ir.Literal), f"Cannot translate value {term!r} of type {type(term)} to LQP Term; neither Var nor Literal."
|
|
531
530
|
v = to_lqp_value(term.value, term.type)
|
|
@@ -801,3 +800,7 @@ def _translate_join(ctx: TranslationCtx, task: ir.Lookup) -> lqp.Formula:
|
|
|
801
800
|
output_term = _translate_term(ctx, target)[0]
|
|
802
801
|
|
|
803
802
|
return lqp.Reduce(meta=None, op=op, body=body, terms=[output_term])
|
|
803
|
+
|
|
804
|
+
def _translate_var(ctx: TranslationCtx, term: ir.Var) -> lqp.Var:
|
|
805
|
+
name = ctx.var_names.get_name_by_id(term.id, term.name)
|
|
806
|
+
return lqp.Var(name=name, meta=None)
|
|
@@ -7,16 +7,18 @@ from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
|
7
7
|
from relationalai.semantics.metamodel.rewrite import Flatten
|
|
8
8
|
|
|
9
9
|
from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals
|
|
10
|
-
from .rewrite import CDC, ExtractCommon, ExtractKeys,
|
|
10
|
+
from .rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
|
|
11
11
|
|
|
12
12
|
from relationalai.semantics.lqp.utils import output_names
|
|
13
13
|
|
|
14
14
|
from typing import cast, List, Sequence, Tuple, Union, Optional, Iterable
|
|
15
15
|
from collections import defaultdict
|
|
16
|
+
import pandas as pd
|
|
17
|
+
import hashlib
|
|
16
18
|
|
|
17
19
|
def lqp_passes() -> list[Pass]:
|
|
18
20
|
return [
|
|
19
|
-
|
|
21
|
+
FunctionAnnotations(),
|
|
20
22
|
DischargeConstraints(),
|
|
21
23
|
Checker(),
|
|
22
24
|
CDC(), # specialize to physical relations before extracting nested and typing
|
|
@@ -337,7 +339,7 @@ class UnifyDefinitions(Pass):
|
|
|
337
339
|
)
|
|
338
340
|
|
|
339
341
|
# Creates intermediary relations for all Data nodes and replaces said Data nodes
|
|
340
|
-
# with a Lookup into these created relations.
|
|
342
|
+
# with a Lookup into these created relations. Reuse duplicate created relations.
|
|
341
343
|
class EliminateData(Pass):
|
|
342
344
|
def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
|
|
343
345
|
r = self.DataRewriter()
|
|
@@ -350,17 +352,25 @@ class EliminateData(Pass):
|
|
|
350
352
|
# Counter for naming new relations.
|
|
351
353
|
# It must be that new_count == len new_updates == len new_relations.
|
|
352
354
|
new_count: int
|
|
355
|
+
# Cache for Data nodes to avoid creating duplicate intermediary relations
|
|
356
|
+
data_cache: dict[str, ir.Relation]
|
|
353
357
|
|
|
354
358
|
def __init__(self):
|
|
355
359
|
self.new_relations = []
|
|
356
360
|
self.new_updates = []
|
|
357
361
|
self.new_count = 0
|
|
362
|
+
self.data_cache = {}
|
|
358
363
|
super().__init__()
|
|
359
364
|
|
|
360
|
-
# Create a
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
365
|
+
# Create a cache key for a Data node based on its structure and content
|
|
366
|
+
def _data_cache_key(self, node: ir.Data) -> str:
|
|
367
|
+
values = pd.util.hash_pandas_object(node.data).values
|
|
368
|
+
return hashlib.sha256(bytes(values)).hexdigest()
|
|
369
|
+
|
|
370
|
+
def _intermediary_relation(self, node: ir.Data) -> ir.Relation:
|
|
371
|
+
cache_key = self._data_cache_key(node)
|
|
372
|
+
if cache_key in self.data_cache:
|
|
373
|
+
return self.data_cache[cache_key]
|
|
364
374
|
self.new_count += 1
|
|
365
375
|
intermediary_name = f"formerly_Data_{self.new_count}"
|
|
366
376
|
|
|
@@ -379,7 +389,6 @@ class EliminateData(Pass):
|
|
|
379
389
|
f.lookup(rel_builtins.eq, [f.literal(val), var])
|
|
380
390
|
for (val, var) in zip(row, node.vars)
|
|
381
391
|
],
|
|
382
|
-
hoisted = node.vars,
|
|
383
392
|
)
|
|
384
393
|
for row in node
|
|
385
394
|
],
|
|
@@ -390,6 +399,16 @@ class EliminateData(Pass):
|
|
|
390
399
|
])
|
|
391
400
|
self.new_updates.append(intermediary_update)
|
|
392
401
|
|
|
402
|
+
# Cache the result for reuse
|
|
403
|
+
self.data_cache[cache_key] = intermediary_relation
|
|
404
|
+
|
|
405
|
+
return intermediary_relation
|
|
406
|
+
|
|
407
|
+
# Create a new intermediary relation representing the Data (and pop it in
|
|
408
|
+
# new_updates/new_relations) and replace this Data with a Lookup of said
|
|
409
|
+
# intermediary.
|
|
410
|
+
def handle_data(self, node: ir.Data, parent: ir.Node) -> ir.Lookup:
|
|
411
|
+
intermediary_relation = self._intermediary_relation(node)
|
|
393
412
|
replacement_lookup = f.lookup(intermediary_relation, node.vars)
|
|
394
413
|
|
|
395
414
|
return replacement_lookup
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from relationalai.semantics.metamodel.types import digits_to_bits
|
|
2
2
|
from relationalai.semantics.lqp import ir as lqp
|
|
3
3
|
from relationalai.semantics.lqp.types import is_numeric
|
|
4
|
-
from relationalai.semantics.lqp.utils import
|
|
5
|
-
from relationalai.semantics.lqp.constructors import mk_primitive, mk_specialized_value, mk_type, mk_value
|
|
4
|
+
from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var, lqp_hash
|
|
5
|
+
from relationalai.semantics.lqp.constructors import mk_primitive, mk_specialized_value, mk_type, mk_value
|
|
6
6
|
|
|
7
7
|
rel_to_lqp = {
|
|
8
8
|
"=": "rel_primitive_eq",
|
|
@@ -205,15 +205,15 @@ def is_monotype(name: str) -> bool:
|
|
|
205
205
|
|
|
206
206
|
# We take the name and type of the variable that we're summing over, so that we can generate
|
|
207
207
|
# recognizable names for the variables in the reduce operation and preserve the type.
|
|
208
|
-
def lqp_avg_op(
|
|
208
|
+
def lqp_avg_op(ctx: TranslationCtx, op_name: str, sum_name: str, sum_type: lqp.Type) -> lqp.Abstraction:
|
|
209
209
|
count_type = mk_type(lqp.TypeName.INT)
|
|
210
210
|
vars = [
|
|
211
|
-
(
|
|
212
|
-
(
|
|
213
|
-
(
|
|
214
|
-
(
|
|
215
|
-
(
|
|
216
|
-
(
|
|
211
|
+
(gen_unique_var(ctx, sum_name), sum_type),
|
|
212
|
+
(gen_unique_var(ctx, "counter"), count_type),
|
|
213
|
+
(gen_unique_var(ctx, sum_name), sum_type),
|
|
214
|
+
(gen_unique_var(ctx, "one"), count_type),
|
|
215
|
+
(gen_unique_var(ctx, "sum"), sum_type),
|
|
216
|
+
(gen_unique_var(ctx, "count"), count_type),
|
|
217
217
|
]
|
|
218
218
|
|
|
219
219
|
x1 = vars[0][0]
|
|
@@ -233,10 +233,10 @@ def lqp_avg_op(names: UniqueNames, op_name: str, sum_name: str, sum_type: lqp.Ty
|
|
|
233
233
|
return lqp.Abstraction(vars=vars, value=body, meta=None)
|
|
234
234
|
|
|
235
235
|
# Default handler for aggregation operations in LQP.
|
|
236
|
-
def lqp_agg_op(
|
|
237
|
-
x =
|
|
238
|
-
y =
|
|
239
|
-
z =
|
|
236
|
+
def lqp_agg_op(ctx: TranslationCtx, op_name: str, aggr_arg_name: str, aggr_arg_type: lqp.Type) -> lqp.Abstraction:
|
|
237
|
+
x = gen_unique_var(ctx, f"x_{aggr_arg_name}")
|
|
238
|
+
y = gen_unique_var(ctx, f"y_{aggr_arg_name}")
|
|
239
|
+
z = gen_unique_var(ctx, f"z_{aggr_arg_name}")
|
|
240
240
|
ts = [(x, aggr_arg_type), (y, aggr_arg_type), (z, aggr_arg_type)]
|
|
241
241
|
|
|
242
242
|
name = agg_to_lqp.get(op_name, op_name)
|
|
@@ -244,9 +244,9 @@ def lqp_agg_op(names: UniqueNames, op_name: str, aggr_arg_name: str, aggr_arg_ty
|
|
|
244
244
|
|
|
245
245
|
return lqp.Abstraction(vars=ts, value=body, meta=None)
|
|
246
246
|
|
|
247
|
-
def lqp_operator(
|
|
247
|
+
def lqp_operator(ctx: TranslationCtx, op_name: str, aggr_arg_name: str, aggr_arg_type: lqp.Type) -> lqp.Abstraction:
|
|
248
248
|
# TODO: Can we just pass through unknown operations?
|
|
249
249
|
if op_name not in agg_to_lqp:
|
|
250
250
|
raise NotImplementedError(f"Unsupported aggregation: {op_name}")
|
|
251
251
|
|
|
252
|
-
return lqp_agg_op(
|
|
252
|
+
return lqp_agg_op(ctx, op_name, aggr_arg_name, aggr_arg_type)
|
{relationalai-0.12.6 → relationalai-0.12.7}/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 .
|
|
4
|
+
from .function_annotations import FunctionAnnotations
|
|
5
5
|
from .quantify_vars import QuantifyVars
|
|
6
6
|
from .splinter import Splinter
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@ __all__ = [
|
|
|
9
9
|
"CDC",
|
|
10
10
|
"ExtractCommon",
|
|
11
11
|
"ExtractKeys",
|
|
12
|
-
"
|
|
12
|
+
"FunctionAnnotations",
|
|
13
13
|
"QuantifyVars",
|
|
14
14
|
"Splinter",
|
|
15
15
|
]
|
|
@@ -5,7 +5,7 @@ from relationalai.semantics.metamodel import ir, compiler as c, visitor as v, bu
|
|
|
5
5
|
from relationalai.semantics.metamodel.util import OrderedSet, ordered_set
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class
|
|
8
|
+
class FunctionAnnotations(c.Pass):
|
|
9
9
|
"""
|
|
10
10
|
Pass marks all appropriate relations with `function` annotation.
|
|
11
11
|
Criteria:
|
|
@@ -17,7 +17,7 @@ class FDConstraints(c.Pass):
|
|
|
17
17
|
collect_fd = CollectFunctionalRelationsVisitor()
|
|
18
18
|
new_model = collect_fd.walk(model)
|
|
19
19
|
# mark relations collected by previous visitor with `@function` annotation
|
|
20
|
-
return
|
|
20
|
+
return FunctionalAnnotationsVisitor(collect_fd.functional_relations).walk(new_model)
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
@dataclass
|
|
@@ -57,9 +57,9 @@ class CollectFunctionalRelationsVisitor(v.Rewriter):
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
@dataclass
|
|
60
|
-
class
|
|
60
|
+
class FunctionalAnnotationsVisitor(v.Rewriter):
|
|
61
61
|
"""
|
|
62
|
-
This visitor marks functional_relations with `
|
|
62
|
+
This visitor marks functional_relations with `function` annotation.
|
|
63
63
|
"""
|
|
64
64
|
|
|
65
65
|
def __init__(self, functional_relations: OrderedSet):
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from relationalai.semantics.lqp import ir as lqp
|
|
2
2
|
from relationalai.semantics.metamodel import ir
|
|
3
|
+
from relationalai.semantics.metamodel.helpers import sanitize
|
|
3
4
|
from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
4
5
|
|
|
5
6
|
from hashlib import sha256
|
|
@@ -13,21 +14,24 @@ class UniqueNames:
|
|
|
13
14
|
self.id_to_name = dict[int,str]()
|
|
14
15
|
|
|
15
16
|
def get_name(self, name: str) -> str:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# so test the new name.
|
|
21
|
-
while f"{name}_{id}" in self.seen:
|
|
22
|
-
id += 1
|
|
23
|
-
self.seen[name] = id
|
|
24
|
-
new_name = f"{name}_{id}"
|
|
25
|
-
self.seen[new_name] = 1
|
|
26
|
-
return new_name
|
|
27
|
-
else:
|
|
17
|
+
# Names will eventually be sanitized, which could cause collisions, so we
|
|
18
|
+
# do the sanitization here.
|
|
19
|
+
name = '_' if name == '_' else sanitize(name)
|
|
20
|
+
if name not in self.seen:
|
|
28
21
|
self.seen[name] = 1
|
|
29
22
|
return f"{name}"
|
|
30
23
|
|
|
24
|
+
self.seen[name] += 1
|
|
25
|
+
id = self.seen[name]
|
|
26
|
+
# If the original name has a suffix we can get collisions with generated names,
|
|
27
|
+
# so test the new name.
|
|
28
|
+
while f"{name}_{id}" in self.seen:
|
|
29
|
+
id += 1
|
|
30
|
+
self.seen[name] = id
|
|
31
|
+
new_name = f"{name}_{id}"
|
|
32
|
+
self.seen[new_name] = 1
|
|
33
|
+
return new_name
|
|
34
|
+
|
|
31
35
|
# Get a unique name for the given id. If the id is already in the map, return the
|
|
32
36
|
# existing name. Otherwise, generate a new name using the suggested_name and
|
|
33
37
|
# store it in the map.
|
|
@@ -55,7 +59,7 @@ def gen_rel_id(ctx: TranslationCtx, orig_name: str, suffix: str = "") -> lqp.Rel
|
|
|
55
59
|
ctx.rel_id_to_orig_name[relation_id] = orig_name
|
|
56
60
|
return relation_id
|
|
57
61
|
|
|
58
|
-
def gen_unique_var(ctx: TranslationCtx, name_hint: str):
|
|
62
|
+
def gen_unique_var(ctx: TranslationCtx, name_hint: str) -> lqp.Var:
|
|
59
63
|
"""
|
|
60
64
|
Generate a new variable with a unique name based on the provided hint.
|
|
61
65
|
"""
|
|
@@ -12,7 +12,7 @@ from relationalai.semantics.metamodel.util import OrderedSet, group_by, NameCach
|
|
|
12
12
|
from relationalai.semantics.rel import rel, rel_utils as u, builtins as rel_bt
|
|
13
13
|
|
|
14
14
|
from ..metamodel.rewrite import (Flatten, ExtractNestedLogicals, DNFUnionSplitter, DischargeConstraints)
|
|
15
|
-
from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys,
|
|
15
|
+
from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
|
|
16
16
|
|
|
17
17
|
import math
|
|
18
18
|
|
|
@@ -24,7 +24,7 @@ import math
|
|
|
24
24
|
class Compiler(c.Compiler):
|
|
25
25
|
def __init__(self):
|
|
26
26
|
super().__init__([
|
|
27
|
-
|
|
27
|
+
FunctionAnnotations(),
|
|
28
28
|
DischargeConstraints(),
|
|
29
29
|
Checker(),
|
|
30
30
|
CDC(), # specialize to physical relations before extracting nested and typing
|