relationalai 0.11.1__tar.gz → 0.11.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.11.1 → relationalai-0.11.3}/.gitignore +1 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/PKG-INFO +1 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/pyproject.toml +1 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/azure.py +7 -4
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/client.py +15 -14
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/config.py +4 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/snowflake.py +108 -28
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/types.py +1 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/use_index_poller.py +165 -58
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/dsl.py +2 -2
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/__init__.py +1 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/csv.py +2 -2
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/weaver.py +1 -2
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/errors.py +37 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/solvers.py +44 -14
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/devtools/extract_lqp.py +4 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/internal/internal.py +209 -26
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/internal/snowflake.py +7 -5
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/executor.py +25 -4
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/model2lqp.py +56 -10
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/passes.py +1 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/primitives.py +43 -14
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/result_helpers.py +1 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/builtins.py +275 -12
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/executor.py +2 -2
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/helpers.py +78 -2
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/extract_keys.py +16 -5
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/typer.py +23 -16
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/__init__.py +0 -4
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/core.py +853 -74
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/executor.py +15 -6
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/rel_utils.py +46 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/cdc.py +6 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/compiler.py +568 -290
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/duck_db.py +4 -2
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/result_helpers.py +7 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/snowflake.py +16 -5
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/sql.py +106 -49
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/__init__.py +13 -7
- relationalai-0.11.3/src/relationalai/semantics/std/datetime.py +359 -0
- relationalai-0.11.3/src/relationalai/semantics/std/math.py +141 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/strings.py +12 -1
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/cli_controls.py +9 -3
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/constants.py +1 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/qb_debugger.py +22 -9
- relationalai-0.11.3/src/relationalai/util/timeout.py +24 -0
- relationalai-0.11.1/src/relationalai/semantics/std/dates.py +0 -189
- relationalai-0.11.1/src/relationalai/semantics/std/math.py +0 -31
- {relationalai-0.11.1 → relationalai-0.11.3}/LICENSE +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/docs/pypi/README.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/compiler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/debugging.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/docutils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/api/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/metagen.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/rel.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/constructors.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/fd_constraints.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/list_types.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/splinter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/compiler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/extract_common.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/quantify_vars.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/math.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/re.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/notes +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/format.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.11.1 → relationalai-0.11.3}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -12,7 +12,7 @@ from pandas import DataFrame
|
|
|
12
12
|
from relationalai import debugging
|
|
13
13
|
from relationalai.clients.util import poll_with_specified_overhead
|
|
14
14
|
|
|
15
|
-
from ..errors import EngineNotFoundException, RAIException
|
|
15
|
+
from ..errors import EngineNotFoundException, RAIException, AzureUnsupportedQueryTimeoutException
|
|
16
16
|
from ..rel_utils import assert_no_problems
|
|
17
17
|
from ..loaders.loader import emit_delete_import, import_file, list_available_resources
|
|
18
18
|
from .config import Config
|
|
@@ -227,10 +227,13 @@ class Resources(ResourcesBase):
|
|
|
227
227
|
def _exec(self, code:str, params:List[Any]|Any|None = None, raw=False, help=True):
|
|
228
228
|
raise Exception("Azure doesn't support _exec")
|
|
229
229
|
|
|
230
|
-
def exec_lqp(self, database: str, engine: str | None, raw_code: bytes, readonly=True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, bypass_index=False):
|
|
230
|
+
def exec_lqp(self, database: str, engine: str | None, raw_code: bytes, readonly=True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, bypass_index=False, query_timeout_mins: int | None = None):
|
|
231
231
|
raise Exception("Azure doesn't support exec_lqp")
|
|
232
232
|
|
|
233
|
-
def exec_raw(self, database:str, engine:str|None, raw_code:str, readonly=True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, raw_results=True):
|
|
233
|
+
def exec_raw(self, database:str, engine:str|None, raw_code:str, readonly=True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, raw_results=True, query_timeout_mins: int | None = None):
|
|
234
|
+
if query_timeout_mins is not None or self.config.get("query_timeout_mins", None) is not None:
|
|
235
|
+
config_file_path = getattr(self.config, 'file_path', None)
|
|
236
|
+
raise AzureUnsupportedQueryTimeoutException(config_file_path=config_file_path)
|
|
234
237
|
if engine is None:
|
|
235
238
|
engine = self.get_default_engine_name()
|
|
236
239
|
try:
|
|
@@ -289,7 +292,7 @@ class Resources(ResourcesBase):
|
|
|
289
292
|
# Exec format
|
|
290
293
|
#--------------------------------------------------
|
|
291
294
|
|
|
292
|
-
def exec_format(self, database: str, engine: str, raw_code: str,
|
|
295
|
+
def exec_format(self, database: str, engine: str, raw_code: str, cols:List[str], format:str, inputs: Dict | None = None, readonly: bool = True, nowait_durable=False, skip_invalid_data=False, headers: Dict | None = None, query_timeout_mins: int | None = None) -> Any: # @FIXME: Better type annotation
|
|
293
296
|
raise Exception("Azure doesn't support alternative formats yet")
|
|
294
297
|
|
|
295
298
|
def to_model_type(self, model:dsl.Graph, name: str, source:str):
|
|
@@ -3,7 +3,7 @@ import atexit
|
|
|
3
3
|
from datetime import datetime, timedelta, timezone
|
|
4
4
|
import re
|
|
5
5
|
from collections import defaultdict
|
|
6
|
-
from typing import Dict, List, Any, Tuple, cast, Callable
|
|
6
|
+
from typing import Dict, List, Any, Optional, Tuple, cast, Callable
|
|
7
7
|
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
from dataclasses import dataclass
|
|
@@ -401,15 +401,15 @@ class ResourcesBase(ABC):
|
|
|
401
401
|
pass
|
|
402
402
|
|
|
403
403
|
@abstractmethod
|
|
404
|
-
def exec_lqp(self, database: str, engine: str | None, raw_code: bytes, readonly: bool = True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None) -> Any: # @FIXME: Better type annotation
|
|
404
|
+
def exec_lqp(self, database: str, engine: str | None, raw_code: bytes, readonly: bool = True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, query_timeout_mins: int | None = None) -> Any: # @FIXME: Better type annotation
|
|
405
405
|
pass
|
|
406
406
|
|
|
407
407
|
@abstractmethod
|
|
408
|
-
def exec_raw(self, database: str, engine: str | None, raw_code: str, readonly: bool = True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None) -> Any: # @FIXME: Better type annotation
|
|
408
|
+
def exec_raw(self, database: str, engine: str | None, raw_code: str, readonly: bool = True, *, inputs: Dict | None = None, nowait_durable=False, headers: Dict | None = None, query_timeout_mins: Optional[int]=None) -> Any: # @FIXME: Better type annotation
|
|
409
409
|
pass
|
|
410
410
|
|
|
411
411
|
@abstractmethod
|
|
412
|
-
def exec_format(self, database: str, engine: str, raw_code: str,
|
|
412
|
+
def exec_format(self, database: str, engine: str, raw_code: str, cols:List[str], format:str, inputs: Dict | None = None, readonly: bool = True, nowait_durable=False, skip_invalid_data=False, headers: Dict | None = None, query_timeout_mins: Optional[int]=None) -> Any: # @FIXME: Better type annotation
|
|
413
413
|
pass
|
|
414
414
|
|
|
415
415
|
@abstractmethod
|
|
@@ -695,10 +695,10 @@ class Client():
|
|
|
695
695
|
code = self.compiler.compile(dsl.build.raw_task(content))
|
|
696
696
|
self._install_batch.set(path, code)
|
|
697
697
|
|
|
698
|
-
def exec_raw(self, code:str, readonly=True, raw_results=True, inputs: Dict | None = None, internal=False, nowait_durable=None, abort_on_error=True, headers: Dict | None = None) -> DataFrame|Any:
|
|
698
|
+
def exec_raw(self, code:str, readonly=True, raw_results=True, inputs: Dict | None = None, internal=False, nowait_durable=None, abort_on_error=True, headers: Dict | None = None, query_timeout_mins: Optional[int]=None) -> DataFrame|Any:
|
|
699
699
|
task = dsl.build.raw_task(code)
|
|
700
700
|
debugging.set_source(task)
|
|
701
|
-
return self.query(task, read_only=readonly, raw_results=raw_results, inputs=inputs, internal=internal, nowait_durable=nowait_durable, headers=headers, abort_on_error=abort_on_error)
|
|
701
|
+
return self.query(task, read_only=readonly, raw_results=raw_results, inputs=inputs, internal=internal, nowait_durable=nowait_durable, headers=headers, abort_on_error=abort_on_error, query_timeout_mins=query_timeout_mins)
|
|
702
702
|
|
|
703
703
|
def exec_control(self, code:str, cb:Callable[[DataFrame]]|None=None):
|
|
704
704
|
self._install_batch.control_items.append((code, cb))
|
|
@@ -719,12 +719,12 @@ class Client():
|
|
|
719
719
|
# Query
|
|
720
720
|
#--------------------------------------------------
|
|
721
721
|
|
|
722
|
-
def _query(self, code:str, task:m.Task|None, end_span, readonly=False, inputs: Dict | None = None, nowait_durable=None, headers: Dict | None = None, abort_on_error=True):
|
|
722
|
+
def _query(self, code:str, task:m.Task|None, end_span, readonly=False, inputs: Dict | None = None, nowait_durable=None, headers: Dict | None = None, abort_on_error=True, query_timeout_mins: Optional[int]=None):
|
|
723
723
|
if nowait_durable is None:
|
|
724
724
|
nowait_durable = self.isolated
|
|
725
725
|
|
|
726
726
|
try:
|
|
727
|
-
results = self.resources.exec_raw(self._database, self.get_engine_name(), code, readonly=readonly, inputs=inputs, nowait_durable=nowait_durable, headers=headers)
|
|
727
|
+
results = self.resources.exec_raw(self._database, self.get_engine_name(), code, readonly=readonly, inputs=inputs, nowait_durable=nowait_durable, headers=headers, query_timeout_mins=query_timeout_mins)
|
|
728
728
|
dataframe, errors = self.resources.format_results(results, task)
|
|
729
729
|
end_span["results"] = dataframe
|
|
730
730
|
end_span["errors"] = errors
|
|
@@ -736,13 +736,14 @@ class Client():
|
|
|
736
736
|
engine_name = self.get_engine_name()
|
|
737
737
|
self.resources.resume_engine(engine_name, headers=headers)
|
|
738
738
|
# invoke _query again to retry the query
|
|
739
|
-
return self._query(code, task, end_span, readonly=readonly, inputs=inputs, nowait_durable=nowait_durable, headers=headers, abort_on_error=abort_on_error)
|
|
739
|
+
return self._query(code, task, end_span, readonly=readonly, inputs=inputs, nowait_durable=nowait_durable, headers=headers, abort_on_error=abort_on_error, query_timeout_mins=query_timeout_mins)
|
|
740
740
|
else:
|
|
741
741
|
raise e
|
|
742
742
|
|
|
743
743
|
|
|
744
|
-
def _query_format(self, code:str, task:m.Task, end_span, format, readonly=False, skip_invalid_data=False, inputs: Dict | None = None):
|
|
745
|
-
|
|
744
|
+
def _query_format(self, code:str, task:m.Task, end_span, format, readonly=False, skip_invalid_data=False, inputs: Dict | None = None, query_timeout_mins: Optional[int]=None):
|
|
745
|
+
cols = task.return_cols(allow_dups=False)
|
|
746
|
+
results, raw = self.resources.exec_format(self._database, self.get_engine_name(), code, cols, readonly=readonly, inputs=inputs, format=format, skip_invalid_data=skip_invalid_data, query_timeout_mins=query_timeout_mins)
|
|
746
747
|
errors = []
|
|
747
748
|
if raw:
|
|
748
749
|
dataframe, errors = self.resources.format_results(raw, task)
|
|
@@ -752,7 +753,7 @@ class Client():
|
|
|
752
753
|
# return results if raw_results else dataframe
|
|
753
754
|
return results, raw
|
|
754
755
|
|
|
755
|
-
def query(self, task:m.Task, rentrant=False, read_only=False, raw_results=False, inputs: Dict | None = None, format="pandas", tag=None, nowait_durable=None, headers: Dict | None = None, internal=False, abort_on_error=True, skip_invalid_data = False) -> DataFrame|Any:
|
|
756
|
+
def query(self, task:m.Task, rentrant=False, read_only=False, raw_results=False, inputs: Dict | None = None, format="pandas", tag=None, nowait_durable=None, headers: Dict | None = None, internal=False, abort_on_error=True, skip_invalid_data = False, query_timeout_mins: Optional[int]=None) -> DataFrame|Any:
|
|
756
757
|
if not self.dry_run and self.use_graph_index:
|
|
757
758
|
self.create_database(isolated=self.isolated, headers=headers)
|
|
758
759
|
|
|
@@ -793,10 +794,10 @@ class Client():
|
|
|
793
794
|
|
|
794
795
|
start = time.perf_counter()
|
|
795
796
|
if format == "pandas":
|
|
796
|
-
results, raw = self._query(code, task, end_span, readonly=read_only, inputs=inputs, nowait_durable=nowait_durable, headers=headers, abort_on_error=abort_on_error)
|
|
797
|
+
results, raw = self._query(code, task, end_span, readonly=read_only, inputs=inputs, nowait_durable=nowait_durable, headers=headers, abort_on_error=abort_on_error, query_timeout_mins=query_timeout_mins)
|
|
797
798
|
debugging.time("query", time.perf_counter() - start, DataFrame() if raw_results else results, internal=internal, source_map=source_map)
|
|
798
799
|
else:
|
|
799
|
-
results, raw = self._query_format(code, task, end_span, readonly=read_only, inputs=inputs, format=format, skip_invalid_data=skip_invalid_data)
|
|
800
|
+
results, raw = self._query_format(code, task, end_span, readonly=read_only, inputs=inputs, format=format, skip_invalid_data=skip_invalid_data, query_timeout_mins=query_timeout_mins)
|
|
800
801
|
debugging.time("query", time.perf_counter() - start, DataFrame(), source_map=source_map, alt_format_results=results)
|
|
801
802
|
|
|
802
803
|
self._install_batch.clear_dirty()
|
|
@@ -28,6 +28,10 @@ PUBLIC_CONFIG_KEYS = [
|
|
|
28
28
|
"ensure_change_tracking",
|
|
29
29
|
"download_url_type",
|
|
30
30
|
"use_direct_access",
|
|
31
|
+
# query_timeout_mins allows to specify a timeout in minutes applied to all queries. When
|
|
32
|
+
# a query execution time exceeds this timeout, the query will be aborted. This is useful
|
|
33
|
+
# to avoid long-running queries that can incur high costs.
|
|
34
|
+
"query_timeout_mins",
|
|
31
35
|
]
|
|
32
36
|
|
|
33
37
|
#--------------------------------------------------
|
|
@@ -21,7 +21,7 @@ from relationalai.clients.use_index_poller import DirectUseIndexPoller, UseIndex
|
|
|
21
21
|
import snowflake.snowpark
|
|
22
22
|
|
|
23
23
|
from relationalai.rel_utils import sanitize_identifier, to_fqn_relation_name
|
|
24
|
-
from relationalai.tools.constants import FIELD_PLACEHOLDER, RAI_APP_NAME, SNOWFLAKE_AUTHS, USE_GRAPH_INDEX, USE_DIRECT_ACCESS, WAIT_FOR_STREAM_SYNC, Generation
|
|
24
|
+
from relationalai.tools.constants import FIELD_PLACEHOLDER, RAI_APP_NAME, SNOWFLAKE_AUTHS, USE_GRAPH_INDEX, USE_DIRECT_ACCESS, DEFAULT_QUERY_TIMEOUT_MINS, WAIT_FOR_STREAM_SYNC, Generation
|
|
25
25
|
from .. import std
|
|
26
26
|
from collections import defaultdict
|
|
27
27
|
import requests
|
|
@@ -1516,8 +1516,11 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1516
1516
|
request_headers: Dict | None = None,
|
|
1517
1517
|
bypass_index=False,
|
|
1518
1518
|
language: str = "rel",
|
|
1519
|
+
query_timeout_mins: int | None = None,
|
|
1519
1520
|
):
|
|
1520
1521
|
assert language == "rel" or language == "lqp", "Only 'rel' and 'lqp' languages are supported"
|
|
1522
|
+
if query_timeout_mins is None and (timeout_value := self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS)) is not None:
|
|
1523
|
+
query_timeout_mins = int(timeout_value)
|
|
1521
1524
|
# Depending on the shape of the input, the behavior of exec_async_v2 changes.
|
|
1522
1525
|
# When using the new format (with an object), the function retrieves the
|
|
1523
1526
|
# 'rai' database by hashing the model and username. In contrast, the
|
|
@@ -1526,9 +1529,23 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1526
1529
|
# graph index to ensure the correct database is utilized.
|
|
1527
1530
|
use_graph_index = self.config.get("use_graph_index", USE_GRAPH_INDEX)
|
|
1528
1531
|
if use_graph_index and not bypass_index:
|
|
1529
|
-
|
|
1532
|
+
payload = {
|
|
1533
|
+
'database': database,
|
|
1534
|
+
'engine': engine,
|
|
1535
|
+
'inputs': inputs,
|
|
1536
|
+
'readonly': readonly,
|
|
1537
|
+
'nowait_durable': nowait_durable,
|
|
1538
|
+
'language': language,
|
|
1539
|
+
'headers': request_headers
|
|
1540
|
+
}
|
|
1541
|
+
if query_timeout_mins is not None:
|
|
1542
|
+
payload["timeout_mins"] = query_timeout_mins
|
|
1543
|
+
sql_string = f"CALL {APP_NAME}.api.exec_async_v2(?, {payload});"
|
|
1530
1544
|
else:
|
|
1531
|
-
|
|
1545
|
+
if query_timeout_mins is not None:
|
|
1546
|
+
sql_string = f"CALL {APP_NAME}.api.exec_async_v2('{database}','{engine}', ?, {inputs}, {readonly}, {nowait_durable}, '{language}', {query_timeout_mins}, {request_headers});"
|
|
1547
|
+
else:
|
|
1548
|
+
sql_string = f"CALL {APP_NAME}.api.exec_async_v2('{database}','{engine}', ?, {inputs}, {readonly}, {nowait_durable}, '{language}', {request_headers});"
|
|
1532
1549
|
response = self._exec(
|
|
1533
1550
|
sql_string,
|
|
1534
1551
|
raw_code,
|
|
@@ -1548,6 +1565,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1548
1565
|
headers: Dict | None = None,
|
|
1549
1566
|
bypass_index=False,
|
|
1550
1567
|
language: str = "rel",
|
|
1568
|
+
query_timeout_mins: int | None = None,
|
|
1551
1569
|
):
|
|
1552
1570
|
if inputs is None:
|
|
1553
1571
|
inputs = {}
|
|
@@ -1567,6 +1585,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1567
1585
|
request_headers=request_headers,
|
|
1568
1586
|
bypass_index=bypass_index,
|
|
1569
1587
|
language=language,
|
|
1588
|
+
query_timeout_mins=query_timeout_mins,
|
|
1570
1589
|
)
|
|
1571
1590
|
|
|
1572
1591
|
artifact_info = {}
|
|
@@ -1825,14 +1844,16 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1825
1844
|
inputs: Dict | None = None,
|
|
1826
1845
|
nowait_durable=False,
|
|
1827
1846
|
headers: Dict | None = None,
|
|
1828
|
-
bypass_index=False
|
|
1847
|
+
bypass_index=False,
|
|
1848
|
+
query_timeout_mins: int | None = None,
|
|
1829
1849
|
):
|
|
1830
1850
|
raw_code_b64 = base64.b64encode(raw_code).decode("utf-8")
|
|
1831
1851
|
|
|
1832
1852
|
try:
|
|
1833
1853
|
return self._exec_async_v2(
|
|
1834
1854
|
database, engine, raw_code_b64, inputs, readonly, nowait_durable,
|
|
1835
|
-
headers=headers, bypass_index=bypass_index, language='lqp'
|
|
1855
|
+
headers=headers, bypass_index=bypass_index, language='lqp',
|
|
1856
|
+
query_timeout_mins=query_timeout_mins,
|
|
1836
1857
|
)
|
|
1837
1858
|
except Exception as e:
|
|
1838
1859
|
err_message = str(e).lower()
|
|
@@ -1840,7 +1861,8 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1840
1861
|
self.auto_create_engine(engine)
|
|
1841
1862
|
self._exec_async_v2(
|
|
1842
1863
|
database, engine, raw_code_b64, inputs, readonly, nowait_durable,
|
|
1843
|
-
headers=headers, bypass_index=bypass_index, language='lqp'
|
|
1864
|
+
headers=headers, bypass_index=bypass_index, language='lqp',
|
|
1865
|
+
query_timeout_mins=query_timeout_mins,
|
|
1844
1866
|
)
|
|
1845
1867
|
else:
|
|
1846
1868
|
raise e
|
|
@@ -1856,19 +1878,38 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1856
1878
|
inputs: Dict | None = None,
|
|
1857
1879
|
nowait_durable=False,
|
|
1858
1880
|
headers: Dict | None = None,
|
|
1859
|
-
bypass_index=False
|
|
1881
|
+
bypass_index=False,
|
|
1882
|
+
query_timeout_mins: int | None = None,
|
|
1860
1883
|
):
|
|
1861
1884
|
raw_code = raw_code.replace("'", "\\'")
|
|
1862
1885
|
|
|
1863
1886
|
try:
|
|
1864
1887
|
return self._exec_async_v2(
|
|
1865
|
-
database,
|
|
1888
|
+
database,
|
|
1889
|
+
engine,
|
|
1890
|
+
raw_code,
|
|
1891
|
+
inputs,
|
|
1892
|
+
readonly,
|
|
1893
|
+
nowait_durable,
|
|
1894
|
+
headers=headers,
|
|
1895
|
+
bypass_index=bypass_index,
|
|
1896
|
+
query_timeout_mins=query_timeout_mins,
|
|
1866
1897
|
)
|
|
1867
1898
|
except Exception as e:
|
|
1868
1899
|
err_message = str(e).lower()
|
|
1869
1900
|
if _is_engine_issue(err_message):
|
|
1870
1901
|
self.auto_create_engine(engine)
|
|
1871
|
-
return self._exec_async_v2(
|
|
1902
|
+
return self._exec_async_v2(
|
|
1903
|
+
database,
|
|
1904
|
+
engine,
|
|
1905
|
+
raw_code,
|
|
1906
|
+
inputs,
|
|
1907
|
+
readonly,
|
|
1908
|
+
nowait_durable,
|
|
1909
|
+
headers=headers,
|
|
1910
|
+
bypass_index=bypass_index,
|
|
1911
|
+
query_timeout_mins=query_timeout_mins,
|
|
1912
|
+
)
|
|
1872
1913
|
else:
|
|
1873
1914
|
raise e
|
|
1874
1915
|
|
|
@@ -1885,13 +1926,14 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1885
1926
|
database: str,
|
|
1886
1927
|
engine: str,
|
|
1887
1928
|
raw_code: str,
|
|
1888
|
-
|
|
1929
|
+
cols: List[str],
|
|
1889
1930
|
format: str,
|
|
1890
1931
|
inputs: Dict | None = None,
|
|
1891
1932
|
readonly=True,
|
|
1892
1933
|
nowait_durable=False,
|
|
1893
1934
|
skip_invalid_data=False,
|
|
1894
1935
|
headers: Dict | None = None,
|
|
1936
|
+
query_timeout_mins: int | None = None,
|
|
1895
1937
|
):
|
|
1896
1938
|
if inputs is None:
|
|
1897
1939
|
inputs = {}
|
|
@@ -1899,6 +1941,8 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1899
1941
|
headers = {}
|
|
1900
1942
|
if 'user-agent' not in headers:
|
|
1901
1943
|
headers['user-agent'] = get_pyrel_version(self.generation)
|
|
1944
|
+
if query_timeout_mins is None and (timeout_value := self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS)) is not None:
|
|
1945
|
+
query_timeout_mins = int(timeout_value)
|
|
1902
1946
|
# TODO: add headers
|
|
1903
1947
|
start = time.perf_counter()
|
|
1904
1948
|
output_table = "out" + str(uuid.uuid4()).replace("-", "_")
|
|
@@ -1909,18 +1953,25 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1909
1953
|
col_names_map = None
|
|
1910
1954
|
artifacts = None
|
|
1911
1955
|
assert self._session
|
|
1912
|
-
temp = self._session.createDataFrame([], StructType([StructField(name, StringType()) for name in
|
|
1956
|
+
temp = self._session.createDataFrame([], StructType([StructField(name, StringType()) for name in cols]))
|
|
1913
1957
|
with debugging.span("transaction") as txn_span:
|
|
1914
1958
|
try:
|
|
1915
1959
|
# In the graph index case we need to use the new exec_into_table proc as it obfuscates the db name
|
|
1916
1960
|
with debugging.span("exec_format"):
|
|
1917
1961
|
if use_graph_index:
|
|
1918
|
-
|
|
1962
|
+
# we do not provide a default value for query_timeout_mins so that we can control the default on app level
|
|
1963
|
+
if query_timeout_mins is not None:
|
|
1964
|
+
res = self._exec(f"call {APP_NAME}.api.exec_into_table(?, ?, ?, ?, ?, ?, ?, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data, query_timeout_mins])
|
|
1965
|
+
else:
|
|
1966
|
+
res = self._exec(f"call {APP_NAME}.api.exec_into_table(?, ?, ?, ?, ?, ?, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data])
|
|
1919
1967
|
txn_id = json.loads(res[0]["EXEC_INTO_TABLE"])["rai_transaction_id"]
|
|
1920
1968
|
rejected_rows = json.loads(res[0]["EXEC_INTO_TABLE"]).get("rejected_rows", [])
|
|
1921
1969
|
rejected_rows_count = json.loads(res[0]["EXEC_INTO_TABLE"]).get("rejected_rows_count", 0)
|
|
1922
1970
|
else:
|
|
1923
|
-
|
|
1971
|
+
if query_timeout_mins is not None:
|
|
1972
|
+
res = self._exec(f"call {APP_NAME}.api.exec_into(?, ?, ?, ?, ?, {inputs}, ?, {headers}, ?, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data, query_timeout_mins])
|
|
1973
|
+
else:
|
|
1974
|
+
res = self._exec(f"call {APP_NAME}.api.exec_into(?, ?, ?, ?, ?, {inputs}, ?, {headers}, ?);", [database, engine, raw_code, output_table, readonly, nowait_durable, skip_invalid_data])
|
|
1924
1975
|
txn_id = json.loads(res[0]["EXEC_INTO"])["rai_transaction_id"]
|
|
1925
1976
|
rejected_rows = json.loads(res[0]["EXEC_INTO"]).get("rejected_rows", [])
|
|
1926
1977
|
rejected_rows_count = json.loads(res[0]["EXEC_INTO"]).get("rejected_rows_count", 0)
|
|
@@ -1932,7 +1983,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1932
1983
|
if out_sample:
|
|
1933
1984
|
keys = set([k.lower() for k in out_sample[0].as_dict().keys()])
|
|
1934
1985
|
col_names_map = {}
|
|
1935
|
-
for ix, name in enumerate(
|
|
1986
|
+
for ix, name in enumerate(cols):
|
|
1936
1987
|
col_key = f"col{ix:03}"
|
|
1937
1988
|
if col_key in keys:
|
|
1938
1989
|
col_names_map[col_key] = IdentityParser(name).identity
|
|
@@ -1997,7 +2048,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
1997
2048
|
assert len(parsed) == 4, f"Invalid source: {source}"
|
|
1998
2049
|
db, schema, entity, identity = parsed
|
|
1999
2050
|
assert db and schema and entity and identity, f"Invalid source: {source}"
|
|
2000
|
-
source_types[identity] = cast(SourceInfo, {"type": None, "state": ""})
|
|
2051
|
+
source_types[identity] = cast(SourceInfo, {"type": None, "state": "", "columns_hash": None})
|
|
2001
2052
|
partitioned_sources[db][schema].append(entity)
|
|
2002
2053
|
|
|
2003
2054
|
# TODO: Move to NA layer
|
|
@@ -2006,6 +2057,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2006
2057
|
f"""SELECT
|
|
2007
2058
|
inf.FQN,
|
|
2008
2059
|
inf.KIND,
|
|
2060
|
+
inf.COLUMNS_HASH,
|
|
2009
2061
|
IFF(DATEDIFF(second, ds.created_at::TIMESTAMP, inf.LAST_DDL::TIMESTAMP) > 0, 'STALE', 'CURRENT') AS STATE
|
|
2010
2062
|
FROM (
|
|
2011
2063
|
SELECT (SELECT {app_name}.api.normalize_fq_ids(ARRAY_CONSTRUCT(FQ_OBJECT_NAME))[0]:identifier::string) as FQ_OBJECT_NAME,
|
|
@@ -2017,26 +2069,45 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2017
2069
|
(SELECT {app_name}.api.normalize_fq_ids(
|
|
2018
2070
|
ARRAY_CONSTRUCT(
|
|
2019
2071
|
CASE
|
|
2020
|
-
WHEN TABLE_CATALOG = UPPER(TABLE_CATALOG) THEN TABLE_CATALOG
|
|
2021
|
-
ELSE '"' || TABLE_CATALOG || '"'
|
|
2072
|
+
WHEN t.TABLE_CATALOG = UPPER(t.TABLE_CATALOG) THEN t.TABLE_CATALOG
|
|
2073
|
+
ELSE '"' || t.TABLE_CATALOG || '"'
|
|
2022
2074
|
END || '.' ||
|
|
2023
2075
|
CASE
|
|
2024
|
-
WHEN TABLE_SCHEMA = UPPER(TABLE_SCHEMA) THEN TABLE_SCHEMA
|
|
2025
|
-
ELSE '"' || TABLE_SCHEMA || '"'
|
|
2076
|
+
WHEN t.TABLE_SCHEMA = UPPER(t.TABLE_SCHEMA) THEN t.TABLE_SCHEMA
|
|
2077
|
+
ELSE '"' || t.TABLE_SCHEMA || '"'
|
|
2026
2078
|
END || '.' ||
|
|
2027
2079
|
CASE
|
|
2028
|
-
WHEN TABLE_NAME = UPPER(TABLE_NAME) THEN TABLE_NAME
|
|
2029
|
-
ELSE '"' || TABLE_NAME || '"'
|
|
2080
|
+
WHEN t.TABLE_NAME = UPPER(t.TABLE_NAME) THEN t.TABLE_NAME
|
|
2081
|
+
ELSE '"' || t.TABLE_NAME || '"'
|
|
2030
2082
|
END
|
|
2031
2083
|
)
|
|
2032
2084
|
)[0]:identifier::string) as FQN,
|
|
2033
2085
|
CONVERT_TIMEZONE('UTC', LAST_DDL) AS LAST_DDL,
|
|
2034
|
-
TABLE_TYPE as KIND
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2086
|
+
TABLE_TYPE as KIND,
|
|
2087
|
+
SHA2(LISTAGG(
|
|
2088
|
+
COLUMN_NAME ||
|
|
2089
|
+
CASE
|
|
2090
|
+
WHEN c.NUMERIC_PRECISION IS NOT NULL AND c.NUMERIC_SCALE IS NOT NULL
|
|
2091
|
+
THEN c.DATA_TYPE || '(' || c.NUMERIC_PRECISION || ',' || c.NUMERIC_SCALE || ')'
|
|
2092
|
+
WHEN c.DATETIME_PRECISION IS NOT NULL
|
|
2093
|
+
THEN c.DATA_TYPE || '(0,' || c.DATETIME_PRECISION || ')'
|
|
2094
|
+
WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT NULL
|
|
2095
|
+
THEN c.DATA_TYPE || '(' || c.CHARACTER_MAXIMUM_LENGTH || ')'
|
|
2096
|
+
ELSE c.DATA_TYPE
|
|
2097
|
+
END ||
|
|
2098
|
+
IS_NULLABLE,
|
|
2099
|
+
','
|
|
2100
|
+
) WITHIN GROUP (ORDER BY COLUMN_NAME), 256) as COLUMNS_HASH
|
|
2101
|
+
FROM {db}.INFORMATION_SCHEMA.TABLES t
|
|
2102
|
+
JOIN {db}.INFORMATION_SCHEMA.COLUMNS c
|
|
2103
|
+
ON t.TABLE_CATALOG = c.TABLE_CATALOG
|
|
2104
|
+
AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
|
|
2105
|
+
AND t.TABLE_NAME = c.TABLE_NAME
|
|
2106
|
+
WHERE t.TABLE_CATALOG = {IdentityParser.to_sql_value(db)} AND ({" OR ".join(
|
|
2107
|
+
f"(t.TABLE_SCHEMA = {IdentityParser.to_sql_value(schema)} AND t.TABLE_NAME IN ({','.join(f'{IdentityParser.to_sql_value(table)}' for table in tables)}))"
|
|
2038
2108
|
for schema, tables in schemas.items()
|
|
2039
2109
|
)})
|
|
2110
|
+
GROUP BY t.TABLE_CATALOG, t.TABLE_SCHEMA, t.TABLE_NAME, t.LAST_DDL, t.TABLE_TYPE
|
|
2040
2111
|
) inf on inf.FQN = ds.FQ_OBJECT_NAME
|
|
2041
2112
|
"""
|
|
2042
2113
|
for db, schemas in partitioned_sources.items()
|
|
@@ -2051,6 +2122,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2051
2122
|
assert fqn, f"Error parsing returned FQN: {row_fqn}"
|
|
2052
2123
|
|
|
2053
2124
|
source_types[fqn]["type"] = "TABLE" if row["KIND"] == "BASE TABLE" else row["KIND"]
|
|
2125
|
+
source_types[fqn]["columns_hash"] = row["COLUMNS_HASH"]
|
|
2054
2126
|
source_types[fqn]["state"] = row["STATE"]
|
|
2055
2127
|
|
|
2056
2128
|
return source_types
|
|
@@ -3007,10 +3079,13 @@ class DirectAccessResources(Resources):
|
|
|
3007
3079
|
return self._retrieve_service_endpoint()
|
|
3008
3080
|
|
|
3009
3081
|
def _retrieve_service_endpoint(self, enforce_update=False) -> str:
|
|
3082
|
+
account = self.config.get("account")
|
|
3083
|
+
app_name = self.config.get("rai_app_name")
|
|
3084
|
+
service_endpoint_key = f"{account}.{app_name}.service_endpoint"
|
|
3010
3085
|
if self._service_endpoint and not enforce_update:
|
|
3011
3086
|
return self._service_endpoint
|
|
3012
|
-
if self._endpoint_info.get(
|
|
3013
|
-
self._service_endpoint = str(self._endpoint_info.get(
|
|
3087
|
+
if self._endpoint_info.get(service_endpoint_key, "") and not enforce_update:
|
|
3088
|
+
self._service_endpoint = str(self._endpoint_info.get(service_endpoint_key, ""))
|
|
3014
3089
|
return self._service_endpoint
|
|
3015
3090
|
|
|
3016
3091
|
is_snowflake_notebook = isinstance(runtime_env, SnowbookEnvironment)
|
|
@@ -3022,7 +3097,7 @@ class DirectAccessResources(Resources):
|
|
|
3022
3097
|
else:
|
|
3023
3098
|
self._service_endpoint = f"https://{result[0]['SERVICE_ENDPOINT']}"
|
|
3024
3099
|
|
|
3025
|
-
self._endpoint_info.set(
|
|
3100
|
+
self._endpoint_info.set(service_endpoint_key, self._service_endpoint)
|
|
3026
3101
|
# save the endpoint to `ENDPOINT_FILE` to avoid calling the endpoint with every
|
|
3027
3102
|
# pyrel execution
|
|
3028
3103
|
try:
|
|
@@ -3095,6 +3170,7 @@ class DirectAccessResources(Resources):
|
|
|
3095
3170
|
headers: Dict[str, str] | None = None,
|
|
3096
3171
|
bypass_index=False,
|
|
3097
3172
|
language: str = "rel",
|
|
3173
|
+
query_timeout_mins: int | None = None,
|
|
3098
3174
|
):
|
|
3099
3175
|
|
|
3100
3176
|
with debugging.span("transaction") as txn_span:
|
|
@@ -3111,6 +3187,10 @@ class DirectAccessResources(Resources):
|
|
|
3111
3187
|
"readonly": readonly,
|
|
3112
3188
|
"language": language,
|
|
3113
3189
|
}
|
|
3190
|
+
if query_timeout_mins is None and (timeout_value := self.config.get("query_timeout_mins", DEFAULT_QUERY_TIMEOUT_MINS)) is not None:
|
|
3191
|
+
query_timeout_mins = int(timeout_value)
|
|
3192
|
+
if query_timeout_mins is not None:
|
|
3193
|
+
payload["timeout_mins"] = query_timeout_mins
|
|
3114
3194
|
query_params={"use_graph_index": str(use_graph_index and not bypass_index)}
|
|
3115
3195
|
|
|
3116
3196
|
response = self.request(
|