relationalai 0.12.7__tar.gz → 0.12.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {relationalai-0.12.7 → relationalai-0.12.8}/PKG-INFO +1 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/pyproject.toml +1 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/snowflake.py +37 -5
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/use_index_poller.py +11 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/passes.py +2 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/builtins.py +1 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/__init__.py +2 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +1 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +5 -6
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/flatten.py +18 -149
- relationalai-0.12.8/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/graph/core.py +98 -70
- relationalai-0.12.8/src/relationalai/semantics/reasoners/optimization/__init__.py +68 -0
- relationalai-0.12.8/src/relationalai/semantics/reasoners/optimization/common.py +88 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +39 -33
- relationalai-0.12.8/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +1163 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/rel/compiler.py +2 -1
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/cli.py +10 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/cli_controls.py +15 -0
- relationalai-0.12.7/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -23
- relationalai-0.12.7/src/relationalai/semantics/reasoners/optimization/common.py +0 -33
- relationalai-0.12.7/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -515
- {relationalai-0.12.7 → relationalai-0.12.8}/.gitignore +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/LICENSE +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/docs/pypi/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/azure.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/debugging.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/docutils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/dsl.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/errors.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/api.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/code_organization.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/metagen.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/rel.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/internal/internal.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/internal/snowflake.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/constructors.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/model2lqp.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/rel/executor.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/math.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/re.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/notes +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/query_utils.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/format.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -851,7 +851,17 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
851
851
|
self.generation
|
|
852
852
|
)
|
|
853
853
|
# If cache is valid (data freshness has not expired), skip polling
|
|
854
|
-
if
|
|
854
|
+
if poller.cache.is_valid():
|
|
855
|
+
cached_sources = len(poller.cache.sources)
|
|
856
|
+
total_sources = len(sources_list)
|
|
857
|
+
cached_timestamp = poller.cache._metadata.get("cachedIndices", {}).get(poller.cache.key, {}).get("last_use_index_update_on", "")
|
|
858
|
+
|
|
859
|
+
message = f"Using cached data for {cached_sources}/{total_sources} data streams"
|
|
860
|
+
if cached_timestamp:
|
|
861
|
+
print(f"\n{message} (cached at {cached_timestamp})\n")
|
|
862
|
+
else:
|
|
863
|
+
print(f"\n{message}\n")
|
|
864
|
+
else:
|
|
855
865
|
return poller.poll()
|
|
856
866
|
|
|
857
867
|
#--------------------------------------------------
|
|
@@ -3284,12 +3294,24 @@ class DirectAccessResources(Resources):
|
|
|
3284
3294
|
try:
|
|
3285
3295
|
response = _send_request()
|
|
3286
3296
|
if response.status_code != 200:
|
|
3297
|
+
# For 404 responses with skip_auto_create=True, return immediately to let caller handle it
|
|
3298
|
+
# (e.g., get_engine needs to check 404 and return None for auto_create_engine)
|
|
3299
|
+
# For skip_auto_create=False, continue to auto-creation logic below
|
|
3300
|
+
if response.status_code == 404 and skip_auto_create:
|
|
3301
|
+
return response
|
|
3302
|
+
|
|
3287
3303
|
try:
|
|
3288
3304
|
message = response.json().get("message", "")
|
|
3289
3305
|
except requests.exceptions.JSONDecodeError:
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3306
|
+
# Can't parse JSON response. For skip_auto_create=True (e.g., get_engine),
|
|
3307
|
+
# this should have been caught by the 404 check above, so this is an error.
|
|
3308
|
+
# For skip_auto_create=False, we explicitly check status_code below,
|
|
3309
|
+
# so we don't need to parse the message.
|
|
3310
|
+
if skip_auto_create:
|
|
3311
|
+
raise ResponseStatusException(
|
|
3312
|
+
f"Failed to parse error response from endpoint {endpoint}.", response
|
|
3313
|
+
)
|
|
3314
|
+
message = "" # Not used when we check status_code directly
|
|
3293
3315
|
|
|
3294
3316
|
# fix engine on engine error and retry
|
|
3295
3317
|
# Skip auto-retry if skip_auto_create is True to avoid recursion
|
|
@@ -3482,7 +3504,17 @@ class DirectAccessResources(Resources):
|
|
|
3482
3504
|
generation=self.generation,
|
|
3483
3505
|
)
|
|
3484
3506
|
# If cache is valid (data freshness has not expired), skip polling
|
|
3485
|
-
if
|
|
3507
|
+
if poller.cache.is_valid():
|
|
3508
|
+
cached_sources = len(poller.cache.sources)
|
|
3509
|
+
total_sources = len(sources_list)
|
|
3510
|
+
cached_timestamp = poller.cache._metadata.get("cachedIndices", {}).get(poller.cache.key, {}).get("last_use_index_update_on", "")
|
|
3511
|
+
|
|
3512
|
+
message = f"Using cached data for {cached_sources}/{total_sources} data streams"
|
|
3513
|
+
if cached_timestamp:
|
|
3514
|
+
print(f"\n{message} (cached at {cached_timestamp})\n")
|
|
3515
|
+
else:
|
|
3516
|
+
print(f"\n{message}\n")
|
|
3517
|
+
else:
|
|
3486
3518
|
return poller.poll()
|
|
3487
3519
|
|
|
3488
3520
|
def _check_exec_async_status(self, txn_id: str, headers: Dict[str, str] | None = None) -> bool:
|
|
@@ -250,7 +250,17 @@ class UseIndexPoller:
|
|
|
250
250
|
# Cache was used - show how many sources were cached
|
|
251
251
|
total_sources = len(self.cache.sources)
|
|
252
252
|
cached_sources = total_sources - len(self.sources)
|
|
253
|
-
|
|
253
|
+
|
|
254
|
+
# Get the timestamp when sources were cached
|
|
255
|
+
entry = self.cache._metadata.get("cachedIndices", {}).get(self.cache.key, {})
|
|
256
|
+
cached_timestamp = entry.get("last_use_index_update_on", "")
|
|
257
|
+
|
|
258
|
+
message = f"Using cached data for {cached_sources}/{total_sources} data streams"
|
|
259
|
+
# Format the message with timestamp
|
|
260
|
+
if cached_timestamp:
|
|
261
|
+
message += f" (cached at {cached_timestamp})"
|
|
262
|
+
|
|
263
|
+
progress.add_sub_task(message, task_id="cache_usage", category=TASK_CATEGORY_CACHE)
|
|
254
264
|
# Complete the subtask immediately since it's just informational
|
|
255
265
|
progress.complete_sub_task("cache_usage")
|
|
256
266
|
|
|
@@ -6,7 +6,7 @@ from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
|
6
6
|
|
|
7
7
|
from relationalai.semantics.metamodel.rewrite import Flatten
|
|
8
8
|
|
|
9
|
-
from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals
|
|
9
|
+
from ..metamodel.rewrite import DischargeConstraints, DNFUnionSplitter, ExtractNestedLogicals, FormatOutputs
|
|
10
10
|
from .rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
|
|
11
11
|
|
|
12
12
|
from relationalai.semantics.lqp.utils import output_names
|
|
@@ -27,6 +27,7 @@ def lqp_passes() -> list[Pass]:
|
|
|
27
27
|
DNFUnionSplitter(),
|
|
28
28
|
ExtractKeys(),
|
|
29
29
|
ExtractCommon(),
|
|
30
|
+
FormatOutputs(),
|
|
30
31
|
Flatten(),
|
|
31
32
|
Splinter(), # Splits multi-headed rules into multiple rules
|
|
32
33
|
QuantifyVars(), # Adds missing existentials
|
{relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/builtins.py
RENAMED
|
@@ -654,6 +654,7 @@ rel_primitive_solverlib_ho_appl = aggregation("rel_primitive_solverlib_ho_appl",
|
|
|
654
654
|
])
|
|
655
655
|
implies = f.relation("implies", [f.input_field("a", types.Bool), f.input_field("b", types.Bool)])
|
|
656
656
|
all_different = aggregation("all_different", [f.input_field("over", types.Any)])
|
|
657
|
+
special_ordered_set_type_2 = aggregation("special_ordered_set_type_2", [f.input_field("rank", types.Any)])
|
|
657
658
|
|
|
658
659
|
# graph primitive algorithm helpers
|
|
659
660
|
infomap = aggregation("infomap", [
|
{relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/__init__.py
RENAMED
|
@@ -2,5 +2,6 @@ from .discharge_constraints import DischargeConstraints
|
|
|
2
2
|
from .dnf_union_splitter import DNFUnionSplitter
|
|
3
3
|
from .extract_nested_logicals import ExtractNestedLogicals
|
|
4
4
|
from .flatten import Flatten
|
|
5
|
+
from .format_outputs import FormatOutputs
|
|
5
6
|
|
|
6
|
-
__all__ = ["DischargeConstraints", "DNFUnionSplitter", "ExtractNestedLogicals", "Flatten"]
|
|
7
|
+
__all__ = ["DischargeConstraints", "DNFUnionSplitter", "ExtractNestedLogicals", "Flatten", "FormatOutputs"]
|
|
@@ -150,7 +150,7 @@ class DNFExtractor(Visitor):
|
|
|
150
150
|
|
|
151
151
|
replacement_tasks: list[ir.Task] = []
|
|
152
152
|
for body in replacement_bodies:
|
|
153
|
-
new_task = f.logical(body)
|
|
153
|
+
new_task = f.logical(body, node.hoisted)
|
|
154
154
|
replacement_tasks.append(new_task)
|
|
155
155
|
self.replaced_by[node] = replacement_tasks
|
|
156
156
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from relationalai.semantics.metamodel import ir, factory as f, helpers
|
|
4
|
-
from relationalai.semantics.metamodel.visitor import Rewriter
|
|
4
|
+
from relationalai.semantics.metamodel.visitor import Rewriter, collect_by_type
|
|
5
5
|
from relationalai.semantics.metamodel.compiler import Pass
|
|
6
6
|
from relationalai.semantics.metamodel.util import OrderedSet, ordered_set, NameCache
|
|
7
7
|
from relationalai.semantics.metamodel import dependency
|
|
@@ -61,11 +61,10 @@ class LogicalExtractor(Rewriter):
|
|
|
61
61
|
|
|
62
62
|
# if there are aggregations, make sure we don't expose the projected and input vars,
|
|
63
63
|
# but expose groupbys
|
|
64
|
-
for
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
exposed_vars.update(child.group)
|
|
64
|
+
for agg in collect_by_type(ir.Aggregate, node):
|
|
65
|
+
exposed_vars.difference_update(agg.projection)
|
|
66
|
+
exposed_vars.difference_update(helpers.aggregate_inputs(agg))
|
|
67
|
+
exposed_vars.update(agg.group)
|
|
69
68
|
# add the values (hoisted)
|
|
70
69
|
exposed_vars.update(helpers.hoisted_vars(logical.hoisted))
|
|
71
70
|
|
{relationalai-0.12.7 → relationalai-0.12.8}/src/relationalai/semantics/metamodel/rewrite/flatten.py
RENAMED
|
@@ -3,12 +3,11 @@ from dataclasses import dataclass
|
|
|
3
3
|
from typing import cast, Optional, TypeVar
|
|
4
4
|
from typing import Tuple
|
|
5
5
|
|
|
6
|
-
from relationalai.semantics.metamodel import builtins, ir, factory as f, helpers
|
|
6
|
+
from relationalai.semantics.metamodel import builtins, ir, factory as f, helpers
|
|
7
7
|
from relationalai.semantics.metamodel.compiler import Pass, group_tasks
|
|
8
8
|
from relationalai.semantics.metamodel.util import OrderedSet, ordered_set, NameCache
|
|
9
9
|
from relationalai.semantics.metamodel import dependency
|
|
10
|
-
from relationalai.semantics.metamodel.
|
|
11
|
-
from relationalai.semantics.metamodel.typer.typer import to_type, is_primitive
|
|
10
|
+
from relationalai.semantics.metamodel.typer.typer import to_type
|
|
12
11
|
|
|
13
12
|
class Flatten(Pass):
|
|
14
13
|
"""
|
|
@@ -225,15 +224,26 @@ class Flatten(Pass):
|
|
|
225
224
|
"ranks": ir.Rank,
|
|
226
225
|
})
|
|
227
226
|
|
|
228
|
-
#
|
|
227
|
+
# If there are outputs, flatten each into its own top-level rule, along with its
|
|
228
|
+
# dependencies.
|
|
229
229
|
if groups["outputs"]:
|
|
230
|
-
if self._handle_outputs:
|
|
231
|
-
return self.adjust_outputs(task, body, groups, ctx)
|
|
232
|
-
else:
|
|
233
|
-
# When we do not handle outputs. For example, in SQL compiler. We need to leave output as a top-level element.
|
|
230
|
+
if not self._handle_outputs:
|
|
234
231
|
ctx.rewrite_ctx.top_level.append(ir.Logical(task.engine, task.hoisted, tuple(body), task.annotations))
|
|
235
232
|
return Flatten.HandleResult(None)
|
|
236
233
|
|
|
234
|
+
# Analyze the dependencies in the newly rewritten body
|
|
235
|
+
new_logical = ir.Logical(task.engine, task.hoisted, tuple(body))
|
|
236
|
+
info = dependency.analyze(new_logical)
|
|
237
|
+
|
|
238
|
+
for output in groups["outputs"]:
|
|
239
|
+
assert(isinstance(output, ir.Output))
|
|
240
|
+
new_body = info.task_dependencies(output)
|
|
241
|
+
new_body.update(ctx.extra_tasks)
|
|
242
|
+
new_body.add(output)
|
|
243
|
+
ctx.rewrite_ctx.top_level.append(ir.Logical(task.engine, task.hoisted, tuple(new_body), task.annotations))
|
|
244
|
+
|
|
245
|
+
return Flatten.HandleResult(None)
|
|
246
|
+
|
|
237
247
|
# if there are updates, extract as a new top level rule
|
|
238
248
|
if groups["updates"]:
|
|
239
249
|
# add task dependencies to the body
|
|
@@ -455,147 +465,6 @@ class Flatten(Pass):
|
|
|
455
465
|
task.annotations
|
|
456
466
|
))
|
|
457
467
|
|
|
458
|
-
#--------------------------------------------------
|
|
459
|
-
# GNF vs wide output support
|
|
460
|
-
#--------------------------------------------------
|
|
461
|
-
def adjust_outputs(self, task: ir.Logical, body: OrderedSet[ir.Task], groups: dict[str, OrderedSet[ir.Task]], ctx: Context):
|
|
462
|
-
|
|
463
|
-
# for wide outputs, only adjust the output task to include the keys.
|
|
464
|
-
if ctx.options.get("wide_outputs", False):
|
|
465
|
-
for output in groups["outputs"]:
|
|
466
|
-
assert(isinstance(output, ir.Output))
|
|
467
|
-
if output.keys:
|
|
468
|
-
body.remove(output)
|
|
469
|
-
body.add(self.rewrite_wide_output(output))
|
|
470
|
-
# self.remove_subsumptions(body, ctx)
|
|
471
|
-
return Flatten.HandleResult(ir.Logical(task.engine, task.hoisted, tuple(body), task.annotations))
|
|
472
|
-
|
|
473
|
-
# for GNF outputs we need to generate a rule for each "column" in the output
|
|
474
|
-
else:
|
|
475
|
-
# first split outputs in potentially multiple outputs, one for each "column"
|
|
476
|
-
for output in groups["outputs"]:
|
|
477
|
-
assert(isinstance(output, ir.Output))
|
|
478
|
-
if output.keys:
|
|
479
|
-
# we will replace the output bellow,
|
|
480
|
-
body.remove(output)
|
|
481
|
-
|
|
482
|
-
is_export = builtins.export_annotation in output.annotations
|
|
483
|
-
|
|
484
|
-
# generate an output for each "column"
|
|
485
|
-
# output looks like def output(:cols, :col000, key0, key1, value):
|
|
486
|
-
original_cols = OrderedSet()
|
|
487
|
-
for idx, alias in enumerate(output.aliases):
|
|
488
|
-
# skip None values which are used as a placeholder for missing values
|
|
489
|
-
if alias[1] is None:
|
|
490
|
-
continue
|
|
491
|
-
original_cols.add(alias[1])
|
|
492
|
-
self._generate_output_column(body, output, idx, alias, is_export)
|
|
493
|
-
|
|
494
|
-
idx = len(output.aliases)
|
|
495
|
-
for key in output.keys:
|
|
496
|
-
if key not in original_cols:
|
|
497
|
-
self._generate_output_column(body, output, idx, (key.name, key), is_export)
|
|
498
|
-
idx += 1
|
|
499
|
-
|
|
500
|
-
# analyse the resulting logical to be able to pull dependencies
|
|
501
|
-
logical = ir.Logical(task.engine, task.hoisted, tuple(body), task.annotations)
|
|
502
|
-
info = dependency.analyze(logical)
|
|
503
|
-
|
|
504
|
-
# now extract a logical for each output, bringing together its dependencies
|
|
505
|
-
for output in filter_by_type(body, ir.Output):
|
|
506
|
-
deps = info.task_dependencies(output)
|
|
507
|
-
# TODO: verify safety of doing this
|
|
508
|
-
# self.remove_subsumptions(deps, ctx)
|
|
509
|
-
|
|
510
|
-
deps.add(output)
|
|
511
|
-
ctx.rewrite_ctx.top_level.append(ir.Logical(task.engine, tuple(), tuple(deps)))
|
|
512
|
-
|
|
513
|
-
return Flatten.HandleResult(None)
|
|
514
|
-
|
|
515
|
-
def _generate_output_column(self, body: OrderedSet[ir.Task], output: ir.Output, idx: int, alias: tuple[str, ir.Value], is_export: bool):
|
|
516
|
-
if not output.keys:
|
|
517
|
-
return output
|
|
518
|
-
|
|
519
|
-
aliases = [("cols", f.literal("cols", types.Symbol))] if not is_export else []
|
|
520
|
-
aliases.append(("col", f.literal(f"col{idx:03}", types.Symbol)))
|
|
521
|
-
|
|
522
|
-
for k in output.keys:
|
|
523
|
-
aliases.append((f"key_{k.name}_{idx}", k))
|
|
524
|
-
|
|
525
|
-
if (is_export and
|
|
526
|
-
isinstance(alias[1], ir.Var) and
|
|
527
|
-
(not is_primitive(alias[1].type) or alias[1].type == types.Hash)):
|
|
528
|
-
|
|
529
|
-
uuid = f.var(f"{alias[0]}_{idx}_uuid", types.String)
|
|
530
|
-
body.add(f.lookup(builtins.uuid_to_string, [alias[1], uuid]))
|
|
531
|
-
aliases.append((uuid.name, uuid))
|
|
532
|
-
else:
|
|
533
|
-
aliases.append(alias)
|
|
534
|
-
|
|
535
|
-
body.add(ir.Output(
|
|
536
|
-
output.engine,
|
|
537
|
-
FrozenOrderedSet.from_iterable(aliases),
|
|
538
|
-
output.keys,
|
|
539
|
-
output.annotations
|
|
540
|
-
))
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
def remove_subsumptions(self, body:OrderedSet[ir.Task], ctx: Context):
|
|
544
|
-
# remove from the body all the tasks that are subsumed by some other task in the set;
|
|
545
|
-
# this can be done because some tasks are references to extracted nested logical that
|
|
546
|
-
# contain filters they dependend on, so we don't need those filters here if the
|
|
547
|
-
# reference is present.
|
|
548
|
-
for logical in filter_by_type(body, ir.Logical):
|
|
549
|
-
if logical.id in ctx.included:
|
|
550
|
-
# if the logical id is included, it means it's a reference to an extracted
|
|
551
|
-
# rule, so remove all other items in the body that are already included in
|
|
552
|
-
# the body referenced by it
|
|
553
|
-
for item in body:
|
|
554
|
-
if item in ctx.included[logical.id]:
|
|
555
|
-
body.remove(item)
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
def rewrite_wide_output(self, output: ir.Output):
|
|
559
|
-
assert(output.keys)
|
|
560
|
-
|
|
561
|
-
# only append keys that are not already in the output
|
|
562
|
-
suffix_keys = []
|
|
563
|
-
for key in output.keys:
|
|
564
|
-
if all([val is not key for _, val in output.aliases]):
|
|
565
|
-
suffix_keys.append(key)
|
|
566
|
-
|
|
567
|
-
aliases: OrderedSet[Tuple[str, ir.Value]] = ordered_set()
|
|
568
|
-
|
|
569
|
-
# add the remaining args, unless it is already a key
|
|
570
|
-
for name, val in output.aliases:
|
|
571
|
-
if not isinstance(val, ir.Var) or val not in suffix_keys:
|
|
572
|
-
aliases.add((name, val))
|
|
573
|
-
|
|
574
|
-
# add the keys to the output
|
|
575
|
-
for key in suffix_keys:
|
|
576
|
-
aliases.add((key.name, key))
|
|
577
|
-
|
|
578
|
-
# TODO - we are assuming that the Rel compiler will translate nullable lookups
|
|
579
|
-
# properly, returning a `Missing` if necessary, like this:
|
|
580
|
-
# (nested_192(_adult, _adult_name) or (not nested_192(_adult, _) and _adult_name = Missing)) and
|
|
581
|
-
return ir.Output(
|
|
582
|
-
output.engine,
|
|
583
|
-
aliases.frozen(),
|
|
584
|
-
output.keys,
|
|
585
|
-
output.annotations
|
|
586
|
-
)
|
|
587
|
-
|
|
588
|
-
# TODO: in the rel compiler, see if we can do this outer join
|
|
589
|
-
# 1. number of keys
|
|
590
|
-
# 2. each relation
|
|
591
|
-
# 3. each variable, starting with the keys
|
|
592
|
-
# 4. tag output with @arrow
|
|
593
|
-
|
|
594
|
-
# @arrow def output(_book, _book_title, _author_name):
|
|
595
|
-
# rel_primitive_outer_join(#1, book_title, author_name, _book, _book_title, _author_name)
|
|
596
|
-
# def output(p, n, c):
|
|
597
|
-
# rel_primitive_outer_join(#1, name, coolness, p, n, c)
|
|
598
|
-
|
|
599
468
|
#--------------------------------------------------
|
|
600
469
|
# Helpers
|
|
601
470
|
#--------------------------------------------------
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import Tuple
|
|
3
|
+
|
|
4
|
+
from relationalai.semantics.metamodel import builtins, ir, factory as f, types, visitor
|
|
5
|
+
from relationalai.semantics.metamodel.compiler import Pass, group_tasks
|
|
6
|
+
from relationalai.semantics.metamodel.util import OrderedSet
|
|
7
|
+
from relationalai.semantics.metamodel.util import FrozenOrderedSet
|
|
8
|
+
from relationalai.semantics.metamodel.typer.typer import is_primitive
|
|
9
|
+
|
|
10
|
+
class FormatOutputs(Pass):
|
|
11
|
+
def __init__(self, handle_outputs: bool=True):
|
|
12
|
+
super().__init__()
|
|
13
|
+
self._handle_outputs = handle_outputs
|
|
14
|
+
|
|
15
|
+
#--------------------------------------------------
|
|
16
|
+
# Public API
|
|
17
|
+
#--------------------------------------------------
|
|
18
|
+
def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
|
|
19
|
+
wide_outputs = options.get("wide_outputs", False)
|
|
20
|
+
return self.OutputRewriter(wide_outputs).walk(model)
|
|
21
|
+
|
|
22
|
+
class OutputRewriter(visitor.Rewriter):
|
|
23
|
+
def __init__(self, wide_outputs: bool = False):
|
|
24
|
+
super().__init__()
|
|
25
|
+
self.wide_outputs = wide_outputs
|
|
26
|
+
|
|
27
|
+
def handle_logical(self, node: ir.Logical, parent: ir.Node):
|
|
28
|
+
# Rewrite children first
|
|
29
|
+
node = super().handle_logical(node, parent)
|
|
30
|
+
|
|
31
|
+
groups = group_tasks(node.body, {
|
|
32
|
+
"outputs": ir.Output,
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
# If no outputs, return as is
|
|
36
|
+
if not groups["outputs"]:
|
|
37
|
+
return node
|
|
38
|
+
|
|
39
|
+
return adjust_outputs(node, groups["outputs"], self.wide_outputs)
|
|
40
|
+
|
|
41
|
+
#--------------------------------------------------
|
|
42
|
+
# GNF vs wide output support
|
|
43
|
+
#--------------------------------------------------
|
|
44
|
+
def adjust_outputs(task: ir.Logical, outputs: OrderedSet[ir.Task], wide_outputs: bool = False):
|
|
45
|
+
|
|
46
|
+
body = list(task.body)
|
|
47
|
+
|
|
48
|
+
# For wide outputs, only adjust the output task to include the keys.
|
|
49
|
+
if wide_outputs:
|
|
50
|
+
for output in outputs:
|
|
51
|
+
assert(isinstance(output, ir.Output))
|
|
52
|
+
if output.keys:
|
|
53
|
+
body.remove(output)
|
|
54
|
+
body.append(rewrite_wide_output(output))
|
|
55
|
+
return ir.Logical(task.engine, task.hoisted, tuple(body), task.annotations)
|
|
56
|
+
|
|
57
|
+
# For GNF outputs we need to generate a rule for each "column" in the output
|
|
58
|
+
else:
|
|
59
|
+
# First split outputs in potentially multiple outputs, one for each "column"
|
|
60
|
+
for output in outputs:
|
|
61
|
+
assert(isinstance(output, ir.Output))
|
|
62
|
+
if output.keys:
|
|
63
|
+
# Remove the original output. This is replaced by per-column outputs below
|
|
64
|
+
body.remove(output)
|
|
65
|
+
|
|
66
|
+
is_export = builtins.export_annotation in output.annotations
|
|
67
|
+
|
|
68
|
+
# Generate an output for each "column"
|
|
69
|
+
# output looks like def output(:cols, :col000, key0, key1, value):
|
|
70
|
+
original_cols = OrderedSet()
|
|
71
|
+
for idx, alias in enumerate(output.aliases):
|
|
72
|
+
# Skip None values which are used as a placeholder for missing values
|
|
73
|
+
if alias[1] is None:
|
|
74
|
+
continue
|
|
75
|
+
original_cols.add(alias[1])
|
|
76
|
+
body.extend(_generate_output_column(output, idx, alias, is_export))
|
|
77
|
+
|
|
78
|
+
idx = len(output.aliases)
|
|
79
|
+
for key in output.keys:
|
|
80
|
+
if key not in original_cols:
|
|
81
|
+
body.extend(_generate_output_column(output, idx, (key.name, key), is_export))
|
|
82
|
+
idx += 1
|
|
83
|
+
|
|
84
|
+
return ir.Logical(task.engine, task.hoisted, tuple(body), task.annotations)
|
|
85
|
+
|
|
86
|
+
# TODO: return non list?
|
|
87
|
+
def _generate_output_column(output: ir.Output, idx: int, alias: tuple[str, ir.Value], is_export: bool):
|
|
88
|
+
if not output.keys:
|
|
89
|
+
return [output]
|
|
90
|
+
|
|
91
|
+
aliases = [("cols", f.literal("cols", types.Symbol))] if not is_export else []
|
|
92
|
+
aliases.append(("col", f.literal(f"col{idx:03}", types.Symbol)))
|
|
93
|
+
|
|
94
|
+
# Append all keys at the start
|
|
95
|
+
for k in output.keys:
|
|
96
|
+
aliases.append((f"key_{k.name}_{idx}", k))
|
|
97
|
+
|
|
98
|
+
if (is_export and
|
|
99
|
+
isinstance(alias[1], ir.Var) and
|
|
100
|
+
(not is_primitive(alias[1].type) or alias[1].type == types.Hash)):
|
|
101
|
+
|
|
102
|
+
uuid = f.var(f"{alias[0]}_{idx}_uuid", types.String)
|
|
103
|
+
aliases.append((uuid.name, uuid))
|
|
104
|
+
|
|
105
|
+
return [
|
|
106
|
+
ir.Lookup(None, builtins.uuid_to_string, (alias[1], uuid)),
|
|
107
|
+
ir.Output(
|
|
108
|
+
output.engine,
|
|
109
|
+
FrozenOrderedSet.from_iterable(aliases),
|
|
110
|
+
output.keys,
|
|
111
|
+
output.annotations
|
|
112
|
+
)
|
|
113
|
+
]
|
|
114
|
+
else:
|
|
115
|
+
aliases.append(alias)
|
|
116
|
+
|
|
117
|
+
return [
|
|
118
|
+
ir.Output(
|
|
119
|
+
output.engine,
|
|
120
|
+
FrozenOrderedSet.from_iterable(aliases),
|
|
121
|
+
output.keys,
|
|
122
|
+
output.annotations
|
|
123
|
+
)
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
def rewrite_wide_output(output: ir.Output):
|
|
127
|
+
assert(output.keys)
|
|
128
|
+
|
|
129
|
+
# Only append keys that are not already in the output
|
|
130
|
+
suffix_keys = []
|
|
131
|
+
for key in output.keys:
|
|
132
|
+
if all([val is not key for _, val in output.aliases]):
|
|
133
|
+
suffix_keys.append(key)
|
|
134
|
+
|
|
135
|
+
aliases: OrderedSet[Tuple[str, ir.Value]] = OrderedSet()
|
|
136
|
+
|
|
137
|
+
# Add the remaining args, unless it is already a key
|
|
138
|
+
for name, val in output.aliases:
|
|
139
|
+
if not isinstance(val, ir.Var) or val not in suffix_keys:
|
|
140
|
+
aliases.add((name, val))
|
|
141
|
+
|
|
142
|
+
# Add the keys to the output
|
|
143
|
+
for key in suffix_keys:
|
|
144
|
+
aliases.add((key.name, key))
|
|
145
|
+
|
|
146
|
+
# TODO - we are assuming that the Rel compiler will translate nullable lookups
|
|
147
|
+
# properly, returning a `Missing` if necessary, like this:
|
|
148
|
+
# (nested_192(_adult, _adult_name) or (not nested_192(_adult, _) and _adult_name = Missing)) and
|
|
149
|
+
return ir.Output(
|
|
150
|
+
output.engine,
|
|
151
|
+
aliases.frozen(),
|
|
152
|
+
output.keys,
|
|
153
|
+
output.annotations
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
# TODO: in the rel compiler, see if we can do this outer join
|
|
157
|
+
# 1. number of keys
|
|
158
|
+
# 2. each relation
|
|
159
|
+
# 3. each variable, starting with the keys
|
|
160
|
+
# 4. tag output with @arrow
|
|
161
|
+
|
|
162
|
+
# @arrow def output(_book, _book_title, _author_name):
|
|
163
|
+
# rel_primitive_outer_join(#1, book_title, author_name, _book, _book_title, _author_name)
|
|
164
|
+
# def output(p, n, c):
|
|
165
|
+
# rel_primitive_outer_join(#1, name, coolness, p, n, c)
|