relationalai 0.13.3__tar.gz → 0.13.4__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.13.3 → relationalai-0.13.4}/PKG-INFO +2 -2
- {relationalai-0.13.3 → relationalai-0.13.4}/pyproject.toml +2 -2
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/snowflake.py +7 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/use_index_poller.py +1 -1
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/snowflake.py +5 -1
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/executor.py +28 -8
- relationalai-0.13.4/src/relationalai/semantics/lqp/export_rewriter.py +40 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/model2lqp.py +3 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +22 -10
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +31 -2
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/test_snapshot_abstract.py +2 -1
- {relationalai-0.13.3 → relationalai-0.13.4}/.gitignore +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/LICENSE +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/docs/pypi/README.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/exec_txn_poller.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/local.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/azure/azure.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/cache_store.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/cli_resources.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/direct_access_resources.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/engine_service.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/error_handlers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/resources_factory.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/use_index_resources.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/util.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/debugging.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/docutils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/dsl.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/errors.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/README.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/api.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/code_organization.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/metagen.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/rel.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/internal.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/README.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/algorithms.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/constructors.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/passes.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/algorithm.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/constants_to_vars.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/deduplicate_vars.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/eliminate_data.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/period_math.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/rewrite/unify_definitions.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/builtins.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/helpers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/executor.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/lqp/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/lqp/algorithms.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/math.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/re.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cli_controls.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/notes +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/query_utils.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/format.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.13.3 → relationalai-0.13.4}/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.13.
|
|
3
|
+
Version: 0.13.4
|
|
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.2.
|
|
14
|
+
Requires-Dist: lqp==0.2.3
|
|
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.13.
|
|
3
|
+
version = '0.13.4'
|
|
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.2.
|
|
11
|
+
"lqp==0.2.3",
|
|
12
12
|
"snowflake-connector-python[secure-local-storage]",
|
|
13
13
|
"snowflake-snowpark-python>=1.38.0",
|
|
14
14
|
"typing-extensions",
|
|
@@ -105,6 +105,9 @@ TXN_ABORT_REASON_TIMEOUT = "transaction timeout"
|
|
|
105
105
|
GUARDRAILS_ABORT_REASON = "guard rail violation"
|
|
106
106
|
|
|
107
107
|
PRINT_TXN_PROGRESS_FLAG = "print_txn_progress"
|
|
108
|
+
ENABLE_GUARD_RAILS_FLAG = "enable_guard_rails"
|
|
109
|
+
|
|
110
|
+
ENABLE_GUARD_RAILS_HEADER = "X-RAI-Enable-Guard-Rails"
|
|
108
111
|
|
|
109
112
|
#--------------------------------------------------
|
|
110
113
|
# Helpers
|
|
@@ -113,6 +116,9 @@ PRINT_TXN_PROGRESS_FLAG = "print_txn_progress"
|
|
|
113
116
|
def should_print_txn_progress(config) -> bool:
|
|
114
117
|
return bool(config.get(PRINT_TXN_PROGRESS_FLAG, False))
|
|
115
118
|
|
|
119
|
+
def should_enable_guard_rails(config) -> bool:
|
|
120
|
+
return bool(config.get(ENABLE_GUARD_RAILS_FLAG, False))
|
|
121
|
+
|
|
116
122
|
#--------------------------------------------------
|
|
117
123
|
# Resources
|
|
118
124
|
#--------------------------------------------------
|
|
@@ -1800,6 +1806,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1800
1806
|
request_headers['user-agent'] = get_pyrel_version(self.generation)
|
|
1801
1807
|
request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
|
|
1802
1808
|
request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
|
|
1809
|
+
request_headers[ENABLE_GUARD_RAILS_HEADER] = str(should_enable_guard_rails(self.config))
|
|
1803
1810
|
|
|
1804
1811
|
# Create the transaction
|
|
1805
1812
|
result = self._create_v2_txn(
|
|
@@ -66,7 +66,7 @@ ERP_CHECK_FREQUENCY = 15
|
|
|
66
66
|
|
|
67
67
|
# Polling behavior constants
|
|
68
68
|
POLL_OVERHEAD_RATE = 0.1 # Overhead rate for exponential backoff
|
|
69
|
-
POLL_MAX_DELAY =
|
|
69
|
+
POLL_MAX_DELAY = 0 # Maximum delay between polls in seconds
|
|
70
70
|
|
|
71
71
|
# SQL query template for getting stream column hashes
|
|
72
72
|
# This query calculates a hash of column metadata (name, type, precision, scale, nullable)
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/semantics/internal/snowflake.py
RENAMED
|
@@ -214,6 +214,7 @@ class Table():
|
|
|
214
214
|
self._col_names = cols
|
|
215
215
|
self._iceberg_config = config
|
|
216
216
|
self._is_iceberg = config is not None
|
|
217
|
+
self._skip_cdc = False
|
|
217
218
|
info = self._schemas.get((self._database, self._schema))
|
|
218
219
|
if not info:
|
|
219
220
|
info = self._schemas[(self._database, self._schema)] = SchemaInfo(self._database, self._schema)
|
|
@@ -303,7 +304,10 @@ class Table():
|
|
|
303
304
|
|
|
304
305
|
def _compile_lookup(self, compiler:b.Compiler, ctx:b.CompilerContext):
|
|
305
306
|
self._lazy_init()
|
|
306
|
-
|
|
307
|
+
if not self._skip_cdc:
|
|
308
|
+
# Don't do CDC if the underlying data has been loaded
|
|
309
|
+
# directly via `api.load_data`.
|
|
310
|
+
Table._used_sources.add(self)
|
|
307
311
|
compiler.lookup(self._rel, ctx)
|
|
308
312
|
return compiler.lookup(b.RelationshipFieldRef(None, self._rel, 0), ctx)
|
|
309
313
|
|
|
@@ -10,8 +10,9 @@ from snowflake.snowpark import Session
|
|
|
10
10
|
|
|
11
11
|
from relationalai import debugging
|
|
12
12
|
from relationalai.errors import NonDefaultLQPSemanticsVersionWarning
|
|
13
|
-
from relationalai.semantics.lqp import result_helpers
|
|
13
|
+
from relationalai.semantics.lqp import result_helpers, export_rewriter
|
|
14
14
|
from relationalai.semantics.metamodel import ir, factory as f, executor as e
|
|
15
|
+
from relationalai.semantics.metamodel.visitor import collect_by_type
|
|
15
16
|
|
|
16
17
|
if TYPE_CHECKING:
|
|
17
18
|
from relationalai.semantics.internal.internal import Model as InternalModel
|
|
@@ -368,7 +369,7 @@ class LQPExecutor(e.Executor):
|
|
|
368
369
|
meta=None,
|
|
369
370
|
)
|
|
370
371
|
|
|
371
|
-
def compile_lqp(self, model: ir.Model, task: ir.Task):
|
|
372
|
+
def compile_lqp(self, model: ir.Model, task: ir.Task, format: Optional[Literal["pandas", "snowpark", "csv"]] = "pandas"):
|
|
372
373
|
configure = self._construct_configure()
|
|
373
374
|
# Merge the epochs into a single transaction. Long term the query bits should all
|
|
374
375
|
# go into a WhatIf action and the intrinsics could be fused with either of them. But
|
|
@@ -394,6 +395,21 @@ class LQPExecutor(e.Executor):
|
|
|
394
395
|
result, final_model = self.compiler.compile_inner(query, options)
|
|
395
396
|
export_info, query_epoch = result
|
|
396
397
|
|
|
398
|
+
if format == "csv":
|
|
399
|
+
# Extract original column names from Output
|
|
400
|
+
outputs = collect_by_type(ir.Output, task)
|
|
401
|
+
assert outputs, "No Output found in the task"
|
|
402
|
+
assert len(outputs) == 1, "Multiple Outputs found in the task"
|
|
403
|
+
output = outputs[0]
|
|
404
|
+
original_cols = []
|
|
405
|
+
for alias, _ in output.aliases:
|
|
406
|
+
if not alias:
|
|
407
|
+
continue
|
|
408
|
+
original_cols.append(alias)
|
|
409
|
+
# Use rewriter to filter data_columns
|
|
410
|
+
column_filter = export_rewriter.ExtraColumnsFilter(original_cols)
|
|
411
|
+
query_epoch = column_filter.filter_epoch(query_epoch)
|
|
412
|
+
|
|
397
413
|
epochs.append(query_epoch)
|
|
398
414
|
epochs.append(self._compile_undefine_query(query_epoch))
|
|
399
415
|
|
|
@@ -417,8 +433,7 @@ class LQPExecutor(e.Executor):
|
|
|
417
433
|
) -> DataFrame:
|
|
418
434
|
self.prepare_data()
|
|
419
435
|
previous_model = self._last_model
|
|
420
|
-
|
|
421
|
-
final_model, export_info, txn_proto = self.compile_lqp(model, task)
|
|
436
|
+
final_model, export_info, txn_proto = self.compile_lqp(model, task, format=format)
|
|
422
437
|
|
|
423
438
|
if self.dry_run:
|
|
424
439
|
return DataFrame()
|
|
@@ -440,7 +455,9 @@ class LQPExecutor(e.Executor):
|
|
|
440
455
|
nowait_durable=True,
|
|
441
456
|
headers=headers,
|
|
442
457
|
)
|
|
443
|
-
assert isinstance(raw_results, TransactionAsyncResponse)
|
|
458
|
+
assert isinstance(raw_results, TransactionAsyncResponse), "Expected TransactionAsyncResponse from LQP execution"
|
|
459
|
+
assert raw_results.transaction is not None, "Transaction result is missing"
|
|
460
|
+
txid = raw_results.transaction['id']
|
|
444
461
|
|
|
445
462
|
try:
|
|
446
463
|
cols, extra_cols = self._compute_cols(task, final_model)
|
|
@@ -453,7 +470,6 @@ class LQPExecutor(e.Executor):
|
|
|
453
470
|
|
|
454
471
|
if export_to:
|
|
455
472
|
assert cols, "No columns found in the output"
|
|
456
|
-
assert raw_results.transaction, "Invalid transaction result"
|
|
457
473
|
assert export_info, "Export info should be populated if we are exporting results"
|
|
458
474
|
result_cols = export_to._col_names
|
|
459
475
|
if result_cols is not None:
|
|
@@ -461,11 +477,15 @@ class LQPExecutor(e.Executor):
|
|
|
461
477
|
else:
|
|
462
478
|
result_cols = [col for col in cols if col not in extra_cols]
|
|
463
479
|
assert result_cols
|
|
464
|
-
self._export(
|
|
480
|
+
self._export(txid, export_info, export_to, cols, result_cols, update)
|
|
465
481
|
|
|
466
482
|
if format == "csv":
|
|
467
483
|
if export_info is not None and isinstance(export_info, tuple) and isinstance(export_info[0], str):
|
|
468
|
-
|
|
484
|
+
# The full CSV path has two parts. The first part is chosen by the frontend, while
|
|
485
|
+
# the second part is chosen by the backend to avoid collisions. We need to ensure
|
|
486
|
+
# the second part is synchronized with the future changes in the backend.
|
|
487
|
+
full_path = export_info[0] + f"/data_{txid}.gz"
|
|
488
|
+
return DataFrame([full_path], columns=["path"])
|
|
469
489
|
else:
|
|
470
490
|
raise ValueError("The CSV export was not successful!")
|
|
471
491
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#----------------------------------------------------------------------------------------------
|
|
2
|
+
# This is a custom LQP rewriter that filters extra columns from CSV export. It is used in the
|
|
3
|
+
# LQP executor, when the format="csv", to ensure only intended columns are being exported.
|
|
4
|
+
#----------------------------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
from dataclasses import replace
|
|
7
|
+
from lqp import ir as lqp_ir
|
|
8
|
+
|
|
9
|
+
class ExtraColumnsFilter:
|
|
10
|
+
|
|
11
|
+
def __init__(self, original_cols: list[str]):
|
|
12
|
+
self.original_cols = set(original_cols)
|
|
13
|
+
|
|
14
|
+
def filter_epoch(self, query_epoch: lqp_ir.Epoch) -> lqp_ir.Epoch:
|
|
15
|
+
|
|
16
|
+
# Only process epochs with a single read which is dedicated to Export
|
|
17
|
+
if not (query_epoch.reads and len(query_epoch.reads) == 1):
|
|
18
|
+
return query_epoch
|
|
19
|
+
|
|
20
|
+
old_read = query_epoch.reads[0]
|
|
21
|
+
if not isinstance(old_read.read_type, lqp_ir.Export):
|
|
22
|
+
return query_epoch
|
|
23
|
+
|
|
24
|
+
config = old_read.read_type.config
|
|
25
|
+
assert isinstance(config, lqp_ir.ExportCSVConfig) and config.data_columns is not None, \
|
|
26
|
+
"Expected ExportCSVConfig with data_columns in the read type"
|
|
27
|
+
|
|
28
|
+
data_columns = config.data_columns
|
|
29
|
+
|
|
30
|
+
# Filter data_columns to only include columns in original_cols
|
|
31
|
+
new_data_columns = [col for col in data_columns if col.column_name in self.original_cols]
|
|
32
|
+
|
|
33
|
+
# Reconstruct the nested structure with filtered data_columns
|
|
34
|
+
new_config = replace(old_read.read_type.config, data_columns=new_data_columns)
|
|
35
|
+
new_read_type = replace(old_read.read_type, config=new_config)
|
|
36
|
+
new_read = replace(old_read, read_type=new_read_type)
|
|
37
|
+
|
|
38
|
+
# Return new epoch with updated read
|
|
39
|
+
remaining_reads = list(query_epoch.reads[1:])
|
|
40
|
+
return replace(query_epoch, reads=[new_read] + remaining_reads)
|
|
@@ -142,8 +142,11 @@ def _translate_to_constraint_decls(ctx: TranslationCtx, rule: ir.Logical) -> lis
|
|
|
142
142
|
lqp_guard = mk_abstraction(lqp_typed_vars, mk_and(lqp_guard_atoms))
|
|
143
143
|
lqp_keys:list[lqp.Var] = [var for (var, _) in lqp_typed_keys] # type: ignore
|
|
144
144
|
lqp_values:list[lqp.Var] = [var for (var, _) in lqp_typed_values] # type: ignore
|
|
145
|
+
lqp_id = utils.lqp_hash(fd.canonical_str)
|
|
146
|
+
lqp_name:lqp.RelationId = lqp.RelationId(id=lqp_id, meta=None)
|
|
145
147
|
|
|
146
148
|
fd_decl = lqp.FunctionalDependency(
|
|
149
|
+
name=lqp_name,
|
|
147
150
|
guard=lqp_guard,
|
|
148
151
|
keys=lqp_keys,
|
|
149
152
|
values=lqp_values,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from relationalai.clients.config import Config
|
|
3
4
|
from relationalai.semantics.metamodel import builtins
|
|
4
5
|
from relationalai.semantics.metamodel.ir import Node, Model, Require
|
|
5
6
|
from relationalai.semantics.metamodel.compiler import Pass
|
|
@@ -10,8 +11,6 @@ from relationalai.semantics.lqp.rewrite.functional_dependencies import (
|
|
|
10
11
|
is_valid_unique_constraint, normalized_fd
|
|
11
12
|
)
|
|
12
13
|
|
|
13
|
-
_DISABLE_CONSTRAINT_DECLARATIONS = True
|
|
14
|
-
|
|
15
14
|
class AnnotateConstraints(Pass):
|
|
16
15
|
"""
|
|
17
16
|
Extends `DischargeConstraints` pass by discharging only those Require nodes that cannot
|
|
@@ -29,24 +28,37 @@ class AnnotateConstraints(Pass):
|
|
|
29
28
|
def rewrite(self, model: Model, options: dict = {}) -> Model:
|
|
30
29
|
return AnnotateConstraintsRewriter().walk(model)
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
@dataclass
|
|
33
32
|
class AnnotateConstraintsRewriter(DischargeConstraintsVisitor):
|
|
33
|
+
emit_constraints: bool = field(default=False)
|
|
34
34
|
"""
|
|
35
|
-
Visitor marks
|
|
35
|
+
Visitor marks Require nodes with
|
|
36
|
+
- `discharge` if they should be discharged from the metamodel
|
|
37
|
+
- `declare_constraint` if they should be kept and emitted as LQP constraint declarations
|
|
38
|
+
|
|
39
|
+
By default, all constraints are discharged. To enable emitting constraints, set the
|
|
40
|
+
`reasoner.rule.emit_constraints` flag to True in the config file.
|
|
41
|
+
```toml
|
|
42
|
+
[reasoner.rule]
|
|
43
|
+
emit_constraints = true
|
|
44
|
+
```
|
|
36
45
|
"""
|
|
37
46
|
|
|
38
|
-
def
|
|
39
|
-
|
|
47
|
+
def __post_init__(self):
|
|
48
|
+
from relationalai.semantics.internal.internal import overridable_flag
|
|
49
|
+
self.emit_constraints = overridable_flag('reasoner.rule.emit_constraints', Config(), None, False)
|
|
50
|
+
|
|
51
|
+
def _should_declare_constraint(self, node: Require) -> bool:
|
|
52
|
+
if not self.emit_constraints:
|
|
40
53
|
return False
|
|
41
54
|
if not is_valid_unique_constraint(node):
|
|
42
55
|
return False
|
|
43
56
|
# Currently, we only declare non-structural functional dependencies.
|
|
44
57
|
fd = normalized_fd(node)
|
|
45
|
-
|
|
46
|
-
return not fd.is_structural
|
|
58
|
+
return fd is not None and not fd.is_structural
|
|
47
59
|
|
|
48
60
|
def handle_require(self, node: Require, parent: Node):
|
|
49
|
-
if self.
|
|
61
|
+
if self._should_declare_constraint(node):
|
|
50
62
|
return node.reconstruct(
|
|
51
63
|
node.engine,
|
|
52
64
|
node.domain,
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
from typing import Optional, Sequence
|
|
3
3
|
from relationalai.semantics.internal import internal
|
|
4
4
|
from relationalai.semantics.metamodel.ir import (
|
|
5
|
-
Node, Require, Logical, Var, Relation, Lookup, ScalarType
|
|
5
|
+
Node, Require, Logical, Var, Relation, Lookup, ScalarType, Literal
|
|
6
6
|
)
|
|
7
7
|
from relationalai.semantics.metamodel import builtins
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ dependencies. The main functionalities provided are:
|
|
|
13
13
|
1. Check whether a `Require` node is a valid unique constraint representation
|
|
14
14
|
2. Represent the uniqueness constraint as a functional dependency
|
|
15
15
|
3. Check if the functional dependency is structural i.e., can be represented with
|
|
16
|
-
|
|
16
|
+
`@function(k)` annotation on a single relation.
|
|
17
17
|
|
|
18
18
|
=========================== Structure of unique constraints ================================
|
|
19
19
|
A `Require` node represents a _unique constraint_ if it meets the following criteria:
|
|
@@ -234,6 +234,9 @@ class FunctionalDependency:
|
|
|
234
234
|
|
|
235
235
|
self._determine_is_structural()
|
|
236
236
|
|
|
237
|
+
# compute canonical string representation of the fd
|
|
238
|
+
self._canonical_str = self._compute_canonical_str()
|
|
239
|
+
|
|
237
240
|
# A functional dependency `φ: X → Y` is _k-functional_ if `φ` consists of a single atom
|
|
238
241
|
# `R(x1,...,xm,y1,...,yk)` and `X = {x1,...,xm}`. Not all functional dependencies are
|
|
239
242
|
# k-functional. For instance, `R(x, y, z): {y, z} → {x}` cannot be expressed with
|
|
@@ -291,6 +294,32 @@ class FunctionalDependency:
|
|
|
291
294
|
values_str = ", ".join([str(var) for var in self.values]).strip()
|
|
292
295
|
return f"{guard_str}: {{{keys_str}}} -> {{{values_str}}}"
|
|
293
296
|
|
|
297
|
+
# computes a canonical string representation of the functional dependency
|
|
298
|
+
def _compute_canonical_str(self) -> str:
|
|
299
|
+
# we construct a stable tuple-term representation of the fd
|
|
300
|
+
fd_term = ("fd",)
|
|
301
|
+
for atom in sorted(self.guard, key=lambda x: x.relation.name):
|
|
302
|
+
atom_term = (atom.relation.name,)
|
|
303
|
+
for arg in atom.args:
|
|
304
|
+
if isinstance(arg, Var):
|
|
305
|
+
atom_term += (("var", arg.name, str(arg.type)),)
|
|
306
|
+
elif isinstance(arg, Literal):
|
|
307
|
+
atom_term += (("lit", arg.value, str(arg.type)),)
|
|
308
|
+
else:
|
|
309
|
+
atom_term += (("arg", str(arg)),)
|
|
310
|
+
fd_term += (atom_term,)
|
|
311
|
+
keys_term = tuple(sorted((("var", v.name, str(v.type)) for v in self.keys)))
|
|
312
|
+
values_term = tuple(sorted((("var", v.name, str(v.type)) for v in self.values)))
|
|
313
|
+
fd_term += (("keys", keys_term), ("values", values_term))
|
|
314
|
+
return str(fd_term)
|
|
315
|
+
|
|
316
|
+
@property
|
|
317
|
+
def canonical_str(self) -> str:
|
|
318
|
+
"""
|
|
319
|
+
A canonical string representation (depends on guard atoms, keys, and values).
|
|
320
|
+
"""
|
|
321
|
+
return self._canonical_str
|
|
322
|
+
|
|
294
323
|
def contains_only_declarable_constraints(node: Node) -> bool:
|
|
295
324
|
"""
|
|
296
325
|
Checks whether the input `Logical` node contains only `Require` nodes annotated with
|
|
@@ -20,7 +20,7 @@ class AbstractSnapshotTest(ABC):
|
|
|
20
20
|
provider:Provider = cast(SFProvider, Provider()) # type: ignore
|
|
21
21
|
|
|
22
22
|
def run_snapshot_test(self, snapshot, script_path, db_schema=None, use_sql=False, use_lqp=True, use_rel=False,
|
|
23
|
-
use_direct_access=False, e2e=False, use_csv=True, e2e_only=False):
|
|
23
|
+
use_direct_access=False, e2e=False, use_csv=True, e2e_only=False, emit_constraints=False):
|
|
24
24
|
# Resolve use_lqp
|
|
25
25
|
use_lqp = use_lqp and (not use_rel) # use_rel overrides because use_lqp is default.
|
|
26
26
|
|
|
@@ -47,6 +47,7 @@ class AbstractSnapshotTest(ABC):
|
|
|
47
47
|
'model_suffix': "" if not e2e else f"_{unique_name}",
|
|
48
48
|
'use_sql': use_sql,
|
|
49
49
|
'reasoner.rule.use_lqp': use_lqp,
|
|
50
|
+
'reasoner.rule.emit_constraints': emit_constraints,
|
|
50
51
|
'keep_model': False,
|
|
51
52
|
# fix the current time to keep snapshots stable
|
|
52
53
|
'datetime_now': datetime.datetime.fromisoformat("2025-12-01T12:00:00+00:00"),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png
RENAMED
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/frontend/debugger/dist/assets/index-DlHsYx1V.css
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/direct_access_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/azure/azure.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/clients/resources/snowflake/util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/builder/std/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/devtools/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/model.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/orm/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/model.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/adapters/owl/parser.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/__init__.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/common.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/csv.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/bindings/snowflake.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/__init__.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/binder.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/common.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/helpers.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/relations.py
RENAMED
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/codegen/weaver.py
RENAMED
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{relationalai-0.13.3 → relationalai-0.13.4}/src/relationalai/early_access/dsl/core/builders/logic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|