relationalai 0.13.2__tar.gz → 0.13.3__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.2 → relationalai-0.13.3}/PKG-INFO +1 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/pyproject.toml +1 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/client.py +3 -4
- relationalai-0.13.3/src/relationalai/clients/exec_txn_poller.py +122 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/direct_access_resources.py +6 -5
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/snowflake.py +47 -51
- relationalai-0.13.3/src/relationalai/semantics/lqp/algorithms.py +173 -0
- relationalai-0.13.3/src/relationalai/semantics/lqp/builtins.py +213 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/executor.py +65 -36
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/ir.py +28 -2
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/model2lqp.py +215 -45
- relationalai-0.13.3/src/relationalai/semantics/lqp/passes.py +35 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/__init__.py +12 -0
- relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/algorithm.py +385 -0
- relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/constants_to_vars.py +70 -0
- relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/deduplicate_vars.py +104 -0
- relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/eliminate_data.py +108 -0
- relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/period_math.py +77 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/quantify_vars.py +65 -31
- relationalai-0.13.3/src/relationalai/semantics/lqp/rewrite/unify_definitions.py +317 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/utils.py +11 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/validators.py +14 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/builtins.py +2 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/compiler.py +2 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/dependency.py +12 -3
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/executor.py +11 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/factory.py +2 -2
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/helpers.py +7 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/ir.py +3 -2
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +30 -20
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/flatten.py +50 -13
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/format_outputs.py +9 -3
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/typer/checker.py +6 -4
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/typer/typer.py +2 -5
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/visitor.py +4 -3
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +1 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +3 -4
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/compiler.py +2 -1
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/executor.py +3 -2
- relationalai-0.13.3/src/relationalai/semantics/tests/lqp/algorithms.py +345 -0
- relationalai-0.13.3/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cli_controls.py +216 -67
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/format.py +5 -2
- relationalai-0.13.2/src/relationalai/clients/exec_txn_poller.py +0 -91
- relationalai-0.13.2/src/relationalai/semantics/lqp/builtins.py +0 -16
- relationalai-0.13.2/src/relationalai/semantics/lqp/passes.py +0 -680
- {relationalai-0.13.2 → relationalai-0.13.3}/.gitignore +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/LICENSE +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/docs/pypi/README.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/direct_access_client.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/local.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/azure/azure.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/cache_store.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/cli_resources.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/engine_service.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/error_handlers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/export_procedure.py.jinja +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/resources_factory.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/use_index_poller.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/use_index_resources.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/resources/snowflake/util.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/types.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/compiler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/debugging.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/docutils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/dsl.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/csv.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/errors.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/README.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/api.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/code_organization.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/basic_example.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movie_example.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/paths_example.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/graph.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/product_graph.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/automaton.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/filter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/glushkov.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/rpq.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/rpq/transition.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/iterators.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/paths/utilities/utilities.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/metagen.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/rel.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/internal.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/internal/snowflake.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/README.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/constructors.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/intrinsics.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/primitives.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/extract_keys.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/core.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/rel/rel_utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/compiler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/result_helpers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/executor/snowflake.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/sql/sql.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/datetime.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/math.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/re.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.13.2/src/relationalai/tools → relationalai-0.13.3/src/relationalai/semantics/tests/lqp}/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/math.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/re.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/notes +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/query_utils.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.13.2 → relationalai-0.13.3}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -614,7 +614,6 @@ class Client():
|
|
|
614
614
|
self._timed_query(
|
|
615
615
|
"update_registry",
|
|
616
616
|
dependencies.generate_update_registry(),
|
|
617
|
-
readonly=False,
|
|
618
617
|
abort_on_error=False,
|
|
619
618
|
)
|
|
620
619
|
|
|
@@ -623,7 +622,6 @@ class Client():
|
|
|
623
622
|
self._timed_query(
|
|
624
623
|
"update_packages",
|
|
625
624
|
dependencies.generate_update_packages(),
|
|
626
|
-
readonly=False,
|
|
627
625
|
abort_on_error=False,
|
|
628
626
|
)
|
|
629
627
|
else:
|
|
@@ -646,10 +644,11 @@ class Client():
|
|
|
646
644
|
finally:
|
|
647
645
|
self._database = database_name
|
|
648
646
|
|
|
649
|
-
def _timed_query(self, span_name:str, code: str,
|
|
647
|
+
def _timed_query(self, span_name:str, code: str, abort_on_error=True):
|
|
650
648
|
with debugging.span(span_name, model=self._database) as end_span:
|
|
651
649
|
start = time.perf_counter()
|
|
652
|
-
|
|
650
|
+
# NOTE hardcoding to readonly=False, read-only Rel transactions are deprecated.
|
|
651
|
+
res, raw = self._query(code, None, end_span, readonly=False, abort_on_error=abort_on_error)
|
|
653
652
|
debugging.time(span_name, time.perf_counter() - start, code=code)
|
|
654
653
|
return res, raw
|
|
655
654
|
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import time
|
|
4
|
+
from typing import Dict, Optional, TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from relationalai import debugging
|
|
7
|
+
from relationalai.clients.util import poll_with_specified_overhead
|
|
8
|
+
from relationalai.tools.cli_controls import create_progress
|
|
9
|
+
from relationalai.util.format import format_duration
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from relationalai.clients.resources.snowflake import Resources
|
|
13
|
+
|
|
14
|
+
# Polling behavior constants
|
|
15
|
+
POLL_OVERHEAD_RATE = 0.1 # Overhead rate for exponential backoff
|
|
16
|
+
|
|
17
|
+
# Text color constants
|
|
18
|
+
GREEN_COLOR = '\033[92m'
|
|
19
|
+
GRAY_COLOR = '\033[90m'
|
|
20
|
+
ENDC = '\033[0m'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ExecTxnPoller:
|
|
24
|
+
"""
|
|
25
|
+
Encapsulates the polling logic for exec_async transaction completion.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
print_txn_progress: bool,
|
|
31
|
+
resource: "Resources",
|
|
32
|
+
txn_id: Optional[str] = None,
|
|
33
|
+
headers: Optional[Dict] = None,
|
|
34
|
+
txn_start_time: Optional[float] = None,
|
|
35
|
+
):
|
|
36
|
+
self.print_txn_progress = print_txn_progress
|
|
37
|
+
self.res = resource
|
|
38
|
+
self.txn_id = txn_id
|
|
39
|
+
self.headers = headers or {}
|
|
40
|
+
self.txn_start_time = txn_start_time or time.time()
|
|
41
|
+
|
|
42
|
+
def __enter__(self) -> ExecTxnPoller:
|
|
43
|
+
if not self.print_txn_progress:
|
|
44
|
+
return self
|
|
45
|
+
self.progress = create_progress(
|
|
46
|
+
description=lambda: self.description_with_timing(),
|
|
47
|
+
success_message="", # We'll handle this ourselves
|
|
48
|
+
leading_newline=False,
|
|
49
|
+
trailing_newline=False,
|
|
50
|
+
show_duration_summary=False,
|
|
51
|
+
)
|
|
52
|
+
self.progress.__enter__()
|
|
53
|
+
return self
|
|
54
|
+
|
|
55
|
+
def __exit__(self, exc_type, exc_value, traceback) -> None:
|
|
56
|
+
if not self.print_txn_progress or self.txn_id is None:
|
|
57
|
+
return
|
|
58
|
+
# Update to success message with duration
|
|
59
|
+
total_duration = time.time() - self.txn_start_time
|
|
60
|
+
txn_id = self.txn_id
|
|
61
|
+
self.progress.update_main_status(
|
|
62
|
+
query_complete_message(txn_id, total_duration)
|
|
63
|
+
)
|
|
64
|
+
self.progress.__exit__(exc_type, exc_value, traceback)
|
|
65
|
+
return
|
|
66
|
+
|
|
67
|
+
def poll(self) -> bool:
|
|
68
|
+
"""
|
|
69
|
+
Poll for transaction completion with interactive progress display.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
True if transaction completed successfully, False otherwise
|
|
73
|
+
"""
|
|
74
|
+
if not self.txn_id:
|
|
75
|
+
raise ValueError("Transaction ID must be provided for polling.")
|
|
76
|
+
else:
|
|
77
|
+
txn_id = self.txn_id
|
|
78
|
+
|
|
79
|
+
if self.print_txn_progress:
|
|
80
|
+
# Update the main status to include the new txn_id
|
|
81
|
+
self.progress.update_main_status_fn(
|
|
82
|
+
lambda: self.description_with_timing(txn_id),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Don't show duration summary - we handle our own completion message
|
|
86
|
+
def check_status() -> bool:
|
|
87
|
+
"""Check if transaction is complete."""
|
|
88
|
+
finished = self.res._check_exec_async_status(txn_id, headers=self.headers)
|
|
89
|
+
return finished
|
|
90
|
+
|
|
91
|
+
with debugging.span("wait", txn_id=self.txn_id):
|
|
92
|
+
poll_with_specified_overhead(check_status, overhead_rate=POLL_OVERHEAD_RATE)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
return True
|
|
96
|
+
|
|
97
|
+
def description_with_timing(self, txn_id: str | None = None) -> str:
|
|
98
|
+
elapsed = time.time() - self.txn_start_time
|
|
99
|
+
if txn_id is None:
|
|
100
|
+
return query_progress_header(elapsed)
|
|
101
|
+
else:
|
|
102
|
+
return query_progress_message(txn_id, elapsed)
|
|
103
|
+
|
|
104
|
+
def query_progress_header(duration: float) -> str:
|
|
105
|
+
# Don't print sub-second decimals, because it updates too fast and is distracting.
|
|
106
|
+
duration_str = format_duration(duration, seconds_decimals=False)
|
|
107
|
+
return f"Evaluating Query... {duration_str:>15}\n"
|
|
108
|
+
|
|
109
|
+
def query_progress_message(id: str, duration: float) -> str:
|
|
110
|
+
return (
|
|
111
|
+
query_progress_header(duration) +
|
|
112
|
+
# Print with whitespace to align with the end of the transaction ID
|
|
113
|
+
f"{GRAY_COLOR}ID: {id}{ENDC}"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def query_complete_message(id: str, duration: float, status_header: bool = False) -> str:
|
|
117
|
+
return (
|
|
118
|
+
(f"{GREEN_COLOR}✅ " if status_header else "") +
|
|
119
|
+
# Print with whitespace to align with the end of the transaction ID
|
|
120
|
+
f"Query Complete: {format_duration(duration):>21}\n" +
|
|
121
|
+
f"{GRAY_COLOR}ID: {id}{ENDC}"
|
|
122
|
+
)
|
|
@@ -13,7 +13,7 @@ from ...config import Config, ConfigStore, ENDPOINT_FILE
|
|
|
13
13
|
from ...direct_access_client import DirectAccessClient
|
|
14
14
|
from ...types import EngineState
|
|
15
15
|
from ...util import get_pyrel_version, safe_json_loads, ms_to_timestamp
|
|
16
|
-
from ....errors import GuardRailsException, ResponseStatusException, QueryTimeoutExceededException
|
|
16
|
+
from ....errors import GuardRailsException, ResponseStatusException, QueryTimeoutExceededException, RAIException
|
|
17
17
|
from snowflake.snowpark import Session
|
|
18
18
|
|
|
19
19
|
# Import UseIndexResources to enable use_index functionality with direct access
|
|
@@ -163,11 +163,12 @@ class DirectAccessResources(UseIndexResources):
|
|
|
163
163
|
headers=headers,
|
|
164
164
|
)
|
|
165
165
|
response = _send_request()
|
|
166
|
-
except requests.exceptions.ConnectionError as e:
|
|
166
|
+
except (requests.exceptions.ConnectionError, RAIException) as e:
|
|
167
167
|
messages = collect_error_messages(e)
|
|
168
|
-
if any("nameresolutionerror" in msg for msg in messages)
|
|
169
|
-
|
|
170
|
-
#
|
|
168
|
+
if any("nameresolutionerror" in msg for msg in messages) or \
|
|
169
|
+
any("could not find the service associated with endpoint" in msg for msg in messages):
|
|
170
|
+
# when we can not resolve the service endpoint or the service is not found,
|
|
171
|
+
# we assume the endpoint is outdated, so we retrieve it again and retry.
|
|
171
172
|
self.direct_access_client.service_endpoint = self._retrieve_service_endpoint(
|
|
172
173
|
enforce_update=True,
|
|
173
174
|
)
|
|
@@ -15,7 +15,7 @@ import hashlib
|
|
|
15
15
|
from dataclasses import dataclass
|
|
16
16
|
|
|
17
17
|
from ....auth.token_handler import TokenHandler
|
|
18
|
-
from relationalai.clients.exec_txn_poller import ExecTxnPoller
|
|
18
|
+
from relationalai.clients.exec_txn_poller import ExecTxnPoller
|
|
19
19
|
import snowflake.snowpark
|
|
20
20
|
|
|
21
21
|
from ....rel_utils import sanitize_identifier, to_fqn_relation_name
|
|
@@ -1788,65 +1788,61 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1788
1788
|
|
|
1789
1789
|
with debugging.span("transaction", **query_attrs_dict) as txn_span:
|
|
1790
1790
|
txn_start_time = time.time()
|
|
1791
|
-
|
|
1792
|
-
# Prepare headers for transaction creation
|
|
1793
|
-
request_headers['user-agent'] = get_pyrel_version(self.generation)
|
|
1794
|
-
request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
|
|
1795
|
-
request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
|
|
1796
|
-
|
|
1797
|
-
# Create the transaction
|
|
1798
|
-
result = self._create_v2_txn(
|
|
1799
|
-
database=database,
|
|
1800
|
-
engine=engine,
|
|
1801
|
-
raw_code=raw_code,
|
|
1802
|
-
inputs=inputs,
|
|
1803
|
-
headers=request_headers,
|
|
1804
|
-
readonly=readonly,
|
|
1805
|
-
nowait_durable=nowait_durable,
|
|
1806
|
-
bypass_index=bypass_index,
|
|
1807
|
-
language=language,
|
|
1808
|
-
query_timeout_mins=query_timeout_mins,
|
|
1809
|
-
)
|
|
1791
|
+
print_txn_progress = should_print_txn_progress(self.config)
|
|
1810
1792
|
|
|
1811
|
-
|
|
1812
|
-
|
|
1793
|
+
with ExecTxnPoller(
|
|
1794
|
+
print_txn_progress=print_txn_progress,
|
|
1795
|
+
resource=self, txn_id=None, headers=request_headers,
|
|
1796
|
+
txn_start_time=txn_start_time
|
|
1797
|
+
) as poller:
|
|
1798
|
+
with debugging.span("create_v2", **query_attrs_dict) as create_span:
|
|
1799
|
+
# Prepare headers for transaction creation
|
|
1800
|
+
request_headers['user-agent'] = get_pyrel_version(self.generation)
|
|
1801
|
+
request_headers['gi_setup_skipped'] = str(gi_setup_skipped)
|
|
1802
|
+
request_headers['pyrel_program_id'] = debugging.get_program_span_id() or ""
|
|
1803
|
+
|
|
1804
|
+
# Create the transaction
|
|
1805
|
+
result = self._create_v2_txn(
|
|
1806
|
+
database=database,
|
|
1807
|
+
engine=engine,
|
|
1808
|
+
raw_code=raw_code,
|
|
1809
|
+
inputs=inputs,
|
|
1810
|
+
headers=request_headers,
|
|
1811
|
+
readonly=readonly,
|
|
1812
|
+
nowait_durable=nowait_durable,
|
|
1813
|
+
bypass_index=bypass_index,
|
|
1814
|
+
language=language,
|
|
1815
|
+
query_timeout_mins=query_timeout_mins,
|
|
1816
|
+
)
|
|
1813
1817
|
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
debugging.event("transaction_created", txn_span, txn_id=txn_id)
|
|
1818
|
+
txn_id = result.txn_id
|
|
1819
|
+
state = result.state
|
|
1817
1820
|
|
|
1818
|
-
|
|
1821
|
+
txn_span["txn_id"] = txn_id
|
|
1822
|
+
create_span["txn_id"] = txn_id
|
|
1823
|
+
debugging.event("transaction_created", txn_span, txn_id=txn_id)
|
|
1819
1824
|
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
txn_end_time = time.time()
|
|
1823
|
-
if txn_id in self._pending_transactions:
|
|
1824
|
-
self._pending_transactions.remove(txn_id)
|
|
1825
|
+
# Set the transaction ID now that we have it, to update the progress text
|
|
1826
|
+
poller.txn_id = txn_id
|
|
1825
1827
|
|
|
1826
|
-
|
|
1828
|
+
# fast path: transaction already finished
|
|
1829
|
+
if state in ["COMPLETED", "ABORTED"]:
|
|
1830
|
+
if txn_id in self._pending_transactions:
|
|
1831
|
+
self._pending_transactions.remove(txn_id)
|
|
1827
1832
|
|
|
1828
|
-
|
|
1829
|
-
if print_txn_progress:
|
|
1830
|
-
print(
|
|
1831
|
-
query_complete_message(txn_id, txn_duration, status_header=True)
|
|
1832
|
-
)
|
|
1833
|
+
artifact_info = result.artifact_info
|
|
1833
1834
|
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
if print_txn_progress:
|
|
1840
|
-
poller = ExecTxnPoller(resource=self, txn_id=txn_id, headers=request_headers, txn_start_time=txn_start_time)
|
|
1835
|
+
# Slow path: transaction not done yet; start polling
|
|
1836
|
+
else:
|
|
1837
|
+
self._pending_transactions.append(txn_id)
|
|
1838
|
+
# Use the interactive poller for transaction status
|
|
1839
|
+
with debugging.span("wait", txn_id=txn_id):
|
|
1841
1840
|
poller.poll()
|
|
1842
|
-
else:
|
|
1843
|
-
poll_with_specified_overhead(
|
|
1844
|
-
lambda: self._check_exec_async_status(txn_id, headers=request_headers), 0.1
|
|
1845
|
-
)
|
|
1846
|
-
artifact_info = self._list_exec_async_artifacts(txn_id, headers=request_headers)
|
|
1847
1841
|
|
|
1848
|
-
|
|
1849
|
-
|
|
1842
|
+
artifact_info = self._list_exec_async_artifacts(txn_id, headers=request_headers)
|
|
1843
|
+
|
|
1844
|
+
with debugging.span("fetch"):
|
|
1845
|
+
return self._download_results(artifact_info, txn_id, state)
|
|
1850
1846
|
|
|
1851
1847
|
def get_user_based_engine_name(self):
|
|
1852
1848
|
if not self._session:
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
from typing import TypeGuard
|
|
2
|
+
from relationalai.semantics.metamodel import ir, factory, types
|
|
3
|
+
from relationalai.semantics.metamodel.visitor import Rewriter, collect_by_type
|
|
4
|
+
from relationalai.semantics.lqp import ir as lqp
|
|
5
|
+
from relationalai.semantics.lqp.types import meta_type_to_lqp
|
|
6
|
+
from relationalai.semantics.lqp.builtins import (
|
|
7
|
+
has_empty_annotation, has_assign_annotation, has_upsert_annotation,
|
|
8
|
+
has_monoid_annotation, has_monus_annotation, has_script_annotation,
|
|
9
|
+
has_algorithm_annotation, has_while_annotation, global_annotation,
|
|
10
|
+
empty_annotation, assign_annotation, upsert_annotation, monoid_annotation,
|
|
11
|
+
monus_annotation
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
# Complex tests for Loopy constructs in the metamodel
|
|
15
|
+
def is_script(task: ir.Task) -> TypeGuard[ir.Sequence]:
|
|
16
|
+
""" Check if it is a script i.e., a Sequence with @script annotation. """
|
|
17
|
+
if not isinstance(task, ir.Sequence):
|
|
18
|
+
return False
|
|
19
|
+
return has_script_annotation(task)
|
|
20
|
+
|
|
21
|
+
def is_algorithm_logical(task: ir.Task) -> TypeGuard[ir.Logical]:
|
|
22
|
+
""" Check if it is an algorithm logical i.e., a Logical task with all subtasks being
|
|
23
|
+
algorithm scripts. """
|
|
24
|
+
if not isinstance(task, ir.Logical):
|
|
25
|
+
return False
|
|
26
|
+
return all(is_algorithm_script(subtask) for subtask in task.body)
|
|
27
|
+
|
|
28
|
+
def is_algorithm_script(task: ir.Task) -> TypeGuard[ir.Sequence]:
|
|
29
|
+
""" Check if it is an algorithm script i.e., a Sequence with @script and @algorithm annotations. """
|
|
30
|
+
if not isinstance(task, ir.Sequence):
|
|
31
|
+
return False
|
|
32
|
+
return is_script(task) and has_algorithm_annotation(task)
|
|
33
|
+
|
|
34
|
+
def is_while_loop(task: ir.Task) -> TypeGuard[ir.Loop]:
|
|
35
|
+
""" Check if input is is a while loop i.e., a Loop with @while annotation. """
|
|
36
|
+
if not isinstance(task, ir.Loop):
|
|
37
|
+
return False
|
|
38
|
+
return has_while_annotation(task)
|
|
39
|
+
|
|
40
|
+
def is_while_script(task: ir.Task) -> TypeGuard[ir.Sequence]:
|
|
41
|
+
""" Check if input is a while script i.e., a Sequence with @script and @while annotations. """
|
|
42
|
+
if not isinstance(task, ir.Sequence):
|
|
43
|
+
return False
|
|
44
|
+
return is_script(task) and has_while_annotation(task)
|
|
45
|
+
|
|
46
|
+
# Tools for annotating Loopy constructs
|
|
47
|
+
class LoopyAnnoAdder(Rewriter):
|
|
48
|
+
""" Rewrites a node by adding the given annotation to all Update nodes. """
|
|
49
|
+
def __init__(self, anno: ir.Annotation):
|
|
50
|
+
self.anno = anno
|
|
51
|
+
super().__init__()
|
|
52
|
+
|
|
53
|
+
def handle_update(self, node: ir.Update, parent: ir.Node) -> ir.Update:
|
|
54
|
+
new_annos = list(node.annotations) + [self.anno]
|
|
55
|
+
return factory.update(node.relation, node.args, node.effect, new_annos, node.engine)
|
|
56
|
+
|
|
57
|
+
def mk_global(i: ir.Node):
|
|
58
|
+
return LoopyAnnoAdder(global_annotation()).walk(i)
|
|
59
|
+
|
|
60
|
+
def mk_empty(i: ir.Node):
|
|
61
|
+
return LoopyAnnoAdder(empty_annotation()).walk(i)
|
|
62
|
+
|
|
63
|
+
def mk_assign(i: ir.Node):
|
|
64
|
+
return LoopyAnnoAdder(assign_annotation()).walk(i)
|
|
65
|
+
|
|
66
|
+
def mk_upsert(i: ir.Node, arity: int):
|
|
67
|
+
return LoopyAnnoAdder(upsert_annotation(arity)).walk(i)
|
|
68
|
+
|
|
69
|
+
def mk_monoid(i: ir.Node, monoid_type: ir.ScalarType, monoid_op: str, arity: int):
|
|
70
|
+
return LoopyAnnoAdder(monoid_annotation(monoid_type, monoid_op, arity)).walk(i)
|
|
71
|
+
|
|
72
|
+
def mk_monus(i: ir.Node, monoid_type: ir.ScalarType, monoid_op: str, arity: int):
|
|
73
|
+
return LoopyAnnoAdder(monus_annotation(monoid_type, monoid_op, arity)).walk(i)
|
|
74
|
+
|
|
75
|
+
def construct_monoid(i: ir.Annotation):
|
|
76
|
+
base_type = None
|
|
77
|
+
op = None
|
|
78
|
+
for arg in i.args:
|
|
79
|
+
if isinstance(arg, ir.ScalarType):
|
|
80
|
+
base_type = meta_type_to_lqp(arg)
|
|
81
|
+
elif isinstance(arg, ir.Literal) and arg.type == types.String:
|
|
82
|
+
op = arg.value
|
|
83
|
+
assert isinstance(base_type, lqp.Type) and isinstance(op, str), "Failed to get monoid"
|
|
84
|
+
if op.lower() == "or":
|
|
85
|
+
return lqp.OrMonoid(meta=None)
|
|
86
|
+
elif op.lower() == "sum":
|
|
87
|
+
return lqp.SumMonoid(type=base_type, meta=None)
|
|
88
|
+
elif op.lower() == "min":
|
|
89
|
+
return lqp.MinMonoid(type=base_type, meta=None)
|
|
90
|
+
elif op.lower() == "max":
|
|
91
|
+
return lqp.MaxMonoid(type=base_type, meta=None)
|
|
92
|
+
else:
|
|
93
|
+
assert False, "Failed to get monoid"
|
|
94
|
+
|
|
95
|
+
# Tools for analyzing Loopy constructs
|
|
96
|
+
def is_logical_instruction(node: ir.Node) -> TypeGuard[ir.Logical]:
|
|
97
|
+
if not isinstance(node, ir.Logical):
|
|
98
|
+
return False
|
|
99
|
+
return any(collect_by_type(ir.Update, node)) and not any(collect_by_type(ir.Sequence, node))
|
|
100
|
+
|
|
101
|
+
def get_instruction_body_rels(node: ir.Logical) -> set[ir.Relation]:
|
|
102
|
+
assert is_logical_instruction(node)
|
|
103
|
+
body: set[ir.Relation] = set()
|
|
104
|
+
for update in collect_by_type(ir.Lookup, node):
|
|
105
|
+
body.add(update.relation)
|
|
106
|
+
return body
|
|
107
|
+
|
|
108
|
+
def get_instruction_head_rels(node: ir.Logical) -> set[ir.Relation]:
|
|
109
|
+
assert is_logical_instruction(node)
|
|
110
|
+
heads: set[ir.Relation] = set()
|
|
111
|
+
for update in collect_by_type(ir.Update, node):
|
|
112
|
+
heads.add(update.relation)
|
|
113
|
+
return heads
|
|
114
|
+
|
|
115
|
+
# base Loopy instruction: @empty, @assign, @upsert, @monoid, @monus
|
|
116
|
+
def is_instruction(update: ir.Task) -> TypeGuard[ir.Logical]:
|
|
117
|
+
if not is_logical_instruction(update):
|
|
118
|
+
return False
|
|
119
|
+
for u in collect_by_type(ir.Update, update):
|
|
120
|
+
if (has_empty_annotation(u) or
|
|
121
|
+
has_assign_annotation(u) or
|
|
122
|
+
has_upsert_annotation(u) or
|
|
123
|
+
has_monoid_annotation(u) or
|
|
124
|
+
has_monus_annotation(u)):
|
|
125
|
+
return True
|
|
126
|
+
return False
|
|
127
|
+
|
|
128
|
+
# update Loopy instruction @upsert, @monoid, @monus
|
|
129
|
+
def is_update_instruction(task: ir.Task) -> TypeGuard[ir.Logical]:
|
|
130
|
+
if not is_logical_instruction(task):
|
|
131
|
+
return False
|
|
132
|
+
for u in collect_by_type(ir.Update, task):
|
|
133
|
+
if (has_upsert_annotation(u) or
|
|
134
|
+
has_monoid_annotation(u) or
|
|
135
|
+
has_monus_annotation(u)):
|
|
136
|
+
return True
|
|
137
|
+
return False
|
|
138
|
+
|
|
139
|
+
def is_empty_instruction(node: ir.Node) -> TypeGuard[ir.Logical]:
|
|
140
|
+
""" Check if input is an empty Loopy instruction `empty rel = ∅`"""
|
|
141
|
+
if not is_logical_instruction(node):
|
|
142
|
+
return False
|
|
143
|
+
updates = collect_by_type(ir.Update, node)
|
|
144
|
+
if not any(has_empty_annotation(update) for update in updates):
|
|
145
|
+
return False
|
|
146
|
+
|
|
147
|
+
# At this point, we have the prerequisites for an empty instruction. We check it is
|
|
148
|
+
# well-formed:
|
|
149
|
+
# 1. It has only a single @empty Update operation
|
|
150
|
+
# 2. Has no other operations
|
|
151
|
+
assert len(updates) == 1, "[Loopy] Empty instruction must have single Update operation"
|
|
152
|
+
assert len(node.body) == 1, "[Loopy] Empty instruction must have only a single Update operation"
|
|
153
|
+
|
|
154
|
+
return True
|
|
155
|
+
|
|
156
|
+
# Splits a Loopy instruction into its head updates, body lookups, and other body tasks
|
|
157
|
+
def split_instruction(update_logical: ir.Logical) -> tuple[ir.Update,list[ir.Lookup],list[ir.Task]]:
|
|
158
|
+
assert is_instruction(update_logical)
|
|
159
|
+
lookups = []
|
|
160
|
+
update = None
|
|
161
|
+
others = []
|
|
162
|
+
for task in update_logical.body:
|
|
163
|
+
if isinstance(task, ir.Lookup):
|
|
164
|
+
lookups.append(task)
|
|
165
|
+
elif isinstance(task, ir.Update):
|
|
166
|
+
if update is not None:
|
|
167
|
+
raise AssertionError("[Loopy] Update instruction must have exactly one Update operation")
|
|
168
|
+
update = task
|
|
169
|
+
else:
|
|
170
|
+
others.append(task)
|
|
171
|
+
assert update is not None, "[Loopy] Update instruction must have exactly one Update operation"
|
|
172
|
+
|
|
173
|
+
return update, lookups, others
|