relationalai 0.11.2__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.2 → relationalai-0.11.3}/.gitignore +1 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/PKG-INFO +1 -1
- {relationalai-0.11.2 → relationalai-0.11.3}/pyproject.toml +1 -1
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/snowflake.py +38 -14
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/types.py +1 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/use_index_poller.py +165 -58
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/__init__.py +1 -1
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/csv.py +2 -2
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/executor.py +8 -6
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/model2lqp.py +3 -2
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/passes.py +1 -1
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/primitives.py +26 -13
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/builtins.py +144 -10
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/helpers.py +78 -2
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/core.py +289 -38
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rel_utils.py +29 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/compiler.py +444 -187
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/result_helpers.py +7 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/snowflake.py +9 -2
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/sql.py +93 -46
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/__init__.py +8 -4
- 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.2/src/relationalai/semantics/std/dates.py +0 -213
- relationalai-0.11.2/src/relationalai/semantics/std/math.py +0 -64
- {relationalai-0.11.2 → relationalai-0.11.3}/LICENSE +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/docs/pypi/README.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/.gitignore +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/assets/index-Cssla-O7.js +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/assets/index-DlHsYx1V.css +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/frontend/debugger/dist/index.html +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/events/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/procedures/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/procedures/procedure.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/rel/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/tables/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/tasks/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/raitoolkit/tasks/task.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/analysis/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/analysis/mechanistic.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/analysis/whynot.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/jwt_generator.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/oauth_callback_server.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/token_handler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/auth/util.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/azure.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/cache_store.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/client.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/config.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/export_procedure.py.jinja +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/hash_util.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/profile_polling.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/result_helpers.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/clients/util.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/compiler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/debugging.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/dependencies.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/docutils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/dsl.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/builder/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/snowflake/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/integers/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/math/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/strings/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/devtools/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/common.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/binder.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/common.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/helpers.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/relations.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/codegen/weaver.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/constants.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/logic.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/context.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/cset.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/instances.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/exists.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/logic/helper.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/namespaces.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/relations.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/rules.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/stack.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/std/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/concepts.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/standard.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/types/variables.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/core/utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/compiler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ir/executor.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/export.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/models.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/readings.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/roles.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/constraints.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/models.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/printer.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/reasoners.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/relations.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/relationships.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/types.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/orm/verb.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/relations.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/rulesets.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/builder.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/components.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/contexts.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/exprs.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/schemas/fragments.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialization.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/exporter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/serialize/model.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/api.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/snow/common.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/concepts.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/entities.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/types/values.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/graphs/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/compiler/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/constructors/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/executor/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/ir/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/passes/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/primitives/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/types/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/utils/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/lqp/validators/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/factory/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/ir/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/typer/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/types/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/util/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/api/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/graph/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/find_paths/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_repetition/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/one_sided_ball_upto/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/single/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_repetition/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/two_sided_balls_upto/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/path_algorithms/usp/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/rpq/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/utilities/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/paths/utilities/iterators/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/executor/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/rel/rewrite/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/solvers/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/sql/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/sql/executor/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/sql/rewrite/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/logging/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/tests/utils/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/base.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/ci.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/colab.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/generic.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/hex.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/ipython.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/jupyter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/snowbook.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/environments/terminal.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/errors.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/SF.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/graphs.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/inspect.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/api.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/automaton.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/bridge.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/compiler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/datalog.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/diagnostics.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/filter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/glushkov.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/options.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/pathfinder-v0.7.0.rel +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/rpq.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/transition.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/pathfinder/utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/paths/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/paths/pathfinder.rel +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/paths/tree_agg.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/experimental/solvers.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/csv.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/loader.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/loaders/types.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/metagen.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/metamodel.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/rel.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/rel_emitter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/rel_utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/designs/query_builder/identify_by.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/compilation_manager.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/devtools/extract_lqp.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/annotations.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/internal.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/internal/snowflake.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/builtins.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/compiler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/constructors.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/ir.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/pragmas.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/result_helpers.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/types.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/lqp/validators.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/compiler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/dataflow.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/dependency.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/executor.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/factory.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/ir.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/extract_keys.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/fd_constraints.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/list_types.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/rewrite/splinter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/checker.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/typer/typer.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/types.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/util.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/metamodel/visitor.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/README.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/README.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/api.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/benchmarks/grid_graph.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/code_organization.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/Movies.ipynb +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/basic_example.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/minimal_engine_warmup.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movie_example.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/actedin.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/directed.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/follows.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/movies.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/person.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/produced.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/ratings.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/movies_data/wrote.csv +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_benchmark.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/paths_example.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/examples/pattern_to_automaton.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/find_paths_via_automaton.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/graph.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/find_paths.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/one_sided_ball_upto.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/two_sided_balls_upto.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-old.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp-tuple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/path_algorithms/usp.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/product_graph.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/automaton.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/diagnostics.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/filter.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/glushkov.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/rpq.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/rpq/transition.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_max_length.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_sp_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_limit_walks_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_paths.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_single_walks_undirected.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_multiple.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/tests/tests_usp_nsp_single.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/iterators.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/prefix_sum.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/paths/utilities/utilities.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/graph/tests/README.md +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/common.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/reasoners/optimization/solvers_pb.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/builtins.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/compiler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/executor.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rel.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/cdc.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/extract_common.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/rel/rewrite/quantify_vars.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/snowflake/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/executor/duck_db.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/constraints.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/decimals.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/floats.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/integers.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/pragmas.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/std.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/std/strings.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/logging.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/test_snapshot_base.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/semantics/tests/utils.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/aggregates.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/dates.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/graphs.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/inspect.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/math.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/re.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/std/strings.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cleanup_snapshots.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cli.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cli_controls.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/cli_helpers.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/constants.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/debugger.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/debugger_client.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/debugger_server.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/dev.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/notes +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/qb_debugger.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/tools/snapshot_viewer.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/clean_up_databases.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/constants.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/format.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/graph.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/list_databases.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/otel_configuration.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/otel_handler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/snowflake_handler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/span_format_test.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/span_tracker.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/spans_file_handler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/timeout.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/util/tracing_handler.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/__init__.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/fixtures.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/snapshot.py +0 -0
- {relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai_test_util/traceback.py +0 -0
|
@@ -2048,7 +2048,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2048
2048
|
assert len(parsed) == 4, f"Invalid source: {source}"
|
|
2049
2049
|
db, schema, entity, identity = parsed
|
|
2050
2050
|
assert db and schema and entity and identity, f"Invalid source: {source}"
|
|
2051
|
-
source_types[identity] = cast(SourceInfo, {"type": None, "state": ""})
|
|
2051
|
+
source_types[identity] = cast(SourceInfo, {"type": None, "state": "", "columns_hash": None})
|
|
2052
2052
|
partitioned_sources[db][schema].append(entity)
|
|
2053
2053
|
|
|
2054
2054
|
# TODO: Move to NA layer
|
|
@@ -2057,6 +2057,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2057
2057
|
f"""SELECT
|
|
2058
2058
|
inf.FQN,
|
|
2059
2059
|
inf.KIND,
|
|
2060
|
+
inf.COLUMNS_HASH,
|
|
2060
2061
|
IFF(DATEDIFF(second, ds.created_at::TIMESTAMP, inf.LAST_DDL::TIMESTAMP) > 0, 'STALE', 'CURRENT') AS STATE
|
|
2061
2062
|
FROM (
|
|
2062
2063
|
SELECT (SELECT {app_name}.api.normalize_fq_ids(ARRAY_CONSTRUCT(FQ_OBJECT_NAME))[0]:identifier::string) as FQ_OBJECT_NAME,
|
|
@@ -2068,26 +2069,45 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2068
2069
|
(SELECT {app_name}.api.normalize_fq_ids(
|
|
2069
2070
|
ARRAY_CONSTRUCT(
|
|
2070
2071
|
CASE
|
|
2071
|
-
WHEN TABLE_CATALOG = UPPER(TABLE_CATALOG) THEN TABLE_CATALOG
|
|
2072
|
-
ELSE '"' || TABLE_CATALOG || '"'
|
|
2072
|
+
WHEN t.TABLE_CATALOG = UPPER(t.TABLE_CATALOG) THEN t.TABLE_CATALOG
|
|
2073
|
+
ELSE '"' || t.TABLE_CATALOG || '"'
|
|
2073
2074
|
END || '.' ||
|
|
2074
2075
|
CASE
|
|
2075
|
-
WHEN TABLE_SCHEMA = UPPER(TABLE_SCHEMA) THEN TABLE_SCHEMA
|
|
2076
|
-
ELSE '"' || TABLE_SCHEMA || '"'
|
|
2076
|
+
WHEN t.TABLE_SCHEMA = UPPER(t.TABLE_SCHEMA) THEN t.TABLE_SCHEMA
|
|
2077
|
+
ELSE '"' || t.TABLE_SCHEMA || '"'
|
|
2077
2078
|
END || '.' ||
|
|
2078
2079
|
CASE
|
|
2079
|
-
WHEN TABLE_NAME = UPPER(TABLE_NAME) THEN TABLE_NAME
|
|
2080
|
-
ELSE '"' || TABLE_NAME || '"'
|
|
2080
|
+
WHEN t.TABLE_NAME = UPPER(t.TABLE_NAME) THEN t.TABLE_NAME
|
|
2081
|
+
ELSE '"' || t.TABLE_NAME || '"'
|
|
2081
2082
|
END
|
|
2082
2083
|
)
|
|
2083
2084
|
)[0]:identifier::string) as FQN,
|
|
2084
2085
|
CONVERT_TIMEZONE('UTC', LAST_DDL) AS LAST_DDL,
|
|
2085
|
-
TABLE_TYPE as KIND
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
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)}))"
|
|
2089
2108
|
for schema, tables in schemas.items()
|
|
2090
2109
|
)})
|
|
2110
|
+
GROUP BY t.TABLE_CATALOG, t.TABLE_SCHEMA, t.TABLE_NAME, t.LAST_DDL, t.TABLE_TYPE
|
|
2091
2111
|
) inf on inf.FQN = ds.FQ_OBJECT_NAME
|
|
2092
2112
|
"""
|
|
2093
2113
|
for db, schemas in partitioned_sources.items()
|
|
@@ -2102,6 +2122,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
2102
2122
|
assert fqn, f"Error parsing returned FQN: {row_fqn}"
|
|
2103
2123
|
|
|
2104
2124
|
source_types[fqn]["type"] = "TABLE" if row["KIND"] == "BASE TABLE" else row["KIND"]
|
|
2125
|
+
source_types[fqn]["columns_hash"] = row["COLUMNS_HASH"]
|
|
2105
2126
|
source_types[fqn]["state"] = row["STATE"]
|
|
2106
2127
|
|
|
2107
2128
|
return source_types
|
|
@@ -3058,10 +3079,13 @@ class DirectAccessResources(Resources):
|
|
|
3058
3079
|
return self._retrieve_service_endpoint()
|
|
3059
3080
|
|
|
3060
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"
|
|
3061
3085
|
if self._service_endpoint and not enforce_update:
|
|
3062
3086
|
return self._service_endpoint
|
|
3063
|
-
if self._endpoint_info.get(
|
|
3064
|
-
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, ""))
|
|
3065
3089
|
return self._service_endpoint
|
|
3066
3090
|
|
|
3067
3091
|
is_snowflake_notebook = isinstance(runtime_env, SnowbookEnvironment)
|
|
@@ -3073,7 +3097,7 @@ class DirectAccessResources(Resources):
|
|
|
3073
3097
|
else:
|
|
3074
3098
|
self._service_endpoint = f"https://{result[0]['SERVICE_ENDPOINT']}"
|
|
3075
3099
|
|
|
3076
|
-
self._endpoint_info.set(
|
|
3100
|
+
self._endpoint_info.set(service_endpoint_key, self._service_endpoint)
|
|
3077
3101
|
# save the endpoint to `ENDPOINT_FILE` to avoid calling the endpoint with every
|
|
3078
3102
|
# pyrel execution
|
|
3079
3103
|
try:
|
|
@@ -155,72 +155,179 @@ class UseIndexPoller:
|
|
|
155
155
|
# Complete the subtask immediately since it's just informational
|
|
156
156
|
progress.complete_sub_task("cache_usage")
|
|
157
157
|
|
|
158
|
+
def _get_stream_column_hashes(self, sources: List[str]) -> Dict[str, str]:
|
|
159
|
+
"""
|
|
160
|
+
Query data_streams to get current column hashes for the given sources.
|
|
161
|
+
|
|
162
|
+
Returns a dict mapping FQN -> column hash.
|
|
163
|
+
"""
|
|
164
|
+
from relationalai.clients.snowflake import PYREL_ROOT_DB
|
|
165
|
+
|
|
166
|
+
fqn_list = ", ".join([f"'{source}'" for source in sources])
|
|
167
|
+
|
|
168
|
+
hash_query = f"""
|
|
169
|
+
SELECT
|
|
170
|
+
FQ_OBJECT_NAME,
|
|
171
|
+
SHA2(
|
|
172
|
+
LISTAGG(
|
|
173
|
+
value:name::VARCHAR ||
|
|
174
|
+
CASE
|
|
175
|
+
WHEN value:precision IS NOT NULL AND value:scale IS NOT NULL
|
|
176
|
+
THEN CASE value:type::VARCHAR
|
|
177
|
+
WHEN 'FIXED' THEN 'NUMBER'
|
|
178
|
+
WHEN 'REAL' THEN 'FLOAT'
|
|
179
|
+
WHEN 'TEXT' THEN 'TEXT'
|
|
180
|
+
ELSE value:type::VARCHAR
|
|
181
|
+
END || '(' || value:precision || ',' || value:scale || ')'
|
|
182
|
+
WHEN value:precision IS NOT NULL AND value:scale IS NULL
|
|
183
|
+
THEN CASE value:type::VARCHAR
|
|
184
|
+
WHEN 'FIXED' THEN 'NUMBER'
|
|
185
|
+
WHEN 'REAL' THEN 'FLOAT'
|
|
186
|
+
WHEN 'TEXT' THEN 'TEXT'
|
|
187
|
+
ELSE value:type::VARCHAR
|
|
188
|
+
END || '(0,' || value:precision || ')'
|
|
189
|
+
WHEN value:length IS NOT NULL
|
|
190
|
+
THEN CASE value:type::VARCHAR
|
|
191
|
+
WHEN 'FIXED' THEN 'NUMBER'
|
|
192
|
+
WHEN 'REAL' THEN 'FLOAT'
|
|
193
|
+
WHEN 'TEXT' THEN 'TEXT'
|
|
194
|
+
ELSE value:type::VARCHAR
|
|
195
|
+
END || '(' || value:length || ')'
|
|
196
|
+
ELSE CASE value:type::VARCHAR
|
|
197
|
+
WHEN 'FIXED' THEN 'NUMBER'
|
|
198
|
+
WHEN 'REAL' THEN 'FLOAT'
|
|
199
|
+
WHEN 'TEXT' THEN 'TEXT'
|
|
200
|
+
ELSE value:type::VARCHAR
|
|
201
|
+
END
|
|
202
|
+
END ||
|
|
203
|
+
CASE WHEN value:nullable::BOOLEAN THEN 'YES' ELSE 'NO' END,
|
|
204
|
+
','
|
|
205
|
+
) WITHIN GROUP (ORDER BY value:name::VARCHAR),
|
|
206
|
+
256
|
|
207
|
+
) AS STREAM_HASH
|
|
208
|
+
FROM {self.app_name}.api.data_streams,
|
|
209
|
+
LATERAL FLATTEN(input => COLUMNS) f
|
|
210
|
+
WHERE RAI_DATABASE = '{PYREL_ROOT_DB}' AND FQ_OBJECT_NAME IN ({fqn_list})
|
|
211
|
+
GROUP BY FQ_OBJECT_NAME;
|
|
212
|
+
"""
|
|
213
|
+
|
|
214
|
+
hash_results = self.res._exec(hash_query)
|
|
215
|
+
return {row["FQ_OBJECT_NAME"]: row["STREAM_HASH"] for row in hash_results}
|
|
216
|
+
|
|
217
|
+
def _filter_truly_stale_sources(self, stale_sources: List[str]) -> List[str]:
|
|
218
|
+
"""
|
|
219
|
+
Filter stale sources to only include those with mismatched column hashes.
|
|
220
|
+
|
|
221
|
+
A source is truly stale if:
|
|
222
|
+
- The stream doesn't exist (needs to be created), OR
|
|
223
|
+
- The column hashes don't match (needs to be recreated)
|
|
224
|
+
"""
|
|
225
|
+
stream_hashes = self._get_stream_column_hashes(stale_sources)
|
|
226
|
+
|
|
227
|
+
truly_stale = []
|
|
228
|
+
for source in stale_sources:
|
|
229
|
+
source_hash = self.source_info[source].get("columns_hash")
|
|
230
|
+
stream_hash = stream_hashes.get(source)
|
|
231
|
+
|
|
232
|
+
# Debug prints to see hash comparison
|
|
233
|
+
# print(f"\n[DEBUG] Source: {source}")
|
|
234
|
+
# print(f" Source table hash: {source_hash}")
|
|
235
|
+
# print(f" Stream hash: {stream_hash}")
|
|
236
|
+
# print(f" Match: {source_hash == stream_hash}")
|
|
237
|
+
# print(f" Action: {'KEEP (valid)' if stream_hash is not None and source_hash == stream_hash else 'DELETE (stale)'}")
|
|
238
|
+
|
|
239
|
+
if stream_hash is None or source_hash != stream_hash:
|
|
240
|
+
truly_stale.append(source)
|
|
241
|
+
|
|
242
|
+
# print(f"\n[DEBUG] Stale sources summary:")
|
|
243
|
+
# print(f" Total candidates: {len(stale_sources)}")
|
|
244
|
+
# print(f" Truly stale: {len(truly_stale)}")
|
|
245
|
+
# print(f" Skipped (valid): {len(stale_sources) - len(truly_stale)}\n")
|
|
246
|
+
|
|
247
|
+
return truly_stale
|
|
248
|
+
|
|
249
|
+
def _add_deletion_subtasks(self, progress, sources: List[str]) -> None:
|
|
250
|
+
"""Add progress subtasks for source deletion."""
|
|
251
|
+
if len(sources) <= MAX_INDIVIDUAL_SUBTASKS:
|
|
252
|
+
for i, source in enumerate(sources):
|
|
253
|
+
progress.add_sub_task(
|
|
254
|
+
f"Removing stale stream {source} ({i+1}/{len(sources)})",
|
|
255
|
+
task_id=f"stale_source_{i}"
|
|
256
|
+
)
|
|
257
|
+
else:
|
|
258
|
+
progress.add_sub_task(
|
|
259
|
+
f"Removing {len(sources)} stale data sources",
|
|
260
|
+
task_id="stale_sources_summary"
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
def _complete_deletion_subtasks(self, progress, sources: List[str], deleted_count: int) -> None:
|
|
264
|
+
"""Complete progress subtasks for source deletion."""
|
|
265
|
+
if len(sources) <= MAX_INDIVIDUAL_SUBTASKS:
|
|
266
|
+
for i in range(len(sources)):
|
|
267
|
+
if f"stale_source_{i}" in progress._tasks:
|
|
268
|
+
progress.complete_sub_task(f"stale_source_{i}")
|
|
269
|
+
else:
|
|
270
|
+
if "stale_sources_summary" in progress._tasks:
|
|
271
|
+
if deleted_count > 0:
|
|
272
|
+
s = "s" if deleted_count > 1 else ""
|
|
273
|
+
progress.update_sub_task(
|
|
274
|
+
"stale_sources_summary",
|
|
275
|
+
f"Removed {deleted_count} stale data source{s}"
|
|
276
|
+
)
|
|
277
|
+
progress.complete_sub_task("stale_sources_summary")
|
|
278
|
+
|
|
158
279
|
def _maybe_delete_stale(self, progress) -> None:
|
|
280
|
+
"""Check for and delete stale data streams that need recreation."""
|
|
159
281
|
with debugging.span("check_sources"):
|
|
160
|
-
# Source tables that have been altered/changed since the last stream creation
|
|
161
282
|
stale_sources = [
|
|
162
283
|
source
|
|
163
284
|
for source, info in self.source_info.items()
|
|
164
285
|
if info["state"] == "STALE"
|
|
165
286
|
]
|
|
166
|
-
if stale_sources:
|
|
167
|
-
with DebuggingSpan("validate_sources"):
|
|
168
|
-
try:
|
|
169
|
-
# Delete all stale streams, so use_index could recreate them again
|
|
170
|
-
from relationalai.clients.snowflake import PYREL_ROOT_DB
|
|
171
|
-
query = f"CALL {self.app_name}.api.delete_data_streams({stale_sources}, '{PYREL_ROOT_DB}');"
|
|
172
|
-
|
|
173
|
-
# Add subtasks based on count
|
|
174
|
-
if len(stale_sources) <= MAX_INDIVIDUAL_SUBTASKS:
|
|
175
|
-
# Add individual subtasks for each stale source
|
|
176
|
-
for i, source in enumerate(stale_sources):
|
|
177
|
-
progress.add_sub_task(f"Removing stale stream {source} ({i+1}/{len(stale_sources)})", task_id=f"stale_source_{i}")
|
|
178
|
-
else:
|
|
179
|
-
# Add single summary subtask for many sources
|
|
180
|
-
progress.add_sub_task(f"Removing {len(stale_sources)} stale data sources", task_id="stale_sources_summary")
|
|
181
|
-
|
|
182
|
-
delete_response = self.res._exec(query)
|
|
183
|
-
delete_json_str = delete_response[0]["DELETE_DATA_STREAMS"].lower()
|
|
184
|
-
delete_data = json.loads(delete_json_str)
|
|
185
|
-
deleted_count = delete_data.get("deleted", 0)
|
|
186
|
-
diff = len(stale_sources) - deleted_count
|
|
187
|
-
|
|
188
|
-
# Complete subtasks
|
|
189
|
-
if len(stale_sources) <= MAX_INDIVIDUAL_SUBTASKS:
|
|
190
|
-
# Complete all individual subtasks
|
|
191
|
-
for i in range(len(stale_sources)):
|
|
192
|
-
if f"stale_source_{i}" in progress._tasks:
|
|
193
|
-
progress.complete_sub_task(f"stale_source_{i}")
|
|
194
|
-
else:
|
|
195
|
-
# Complete summary subtask
|
|
196
|
-
if "stale_sources_summary" in progress._tasks:
|
|
197
|
-
if deleted_count > 0:
|
|
198
|
-
is_many = deleted_count > 1
|
|
199
|
-
s = "s" if is_many else ""
|
|
200
|
-
progress.update_sub_task("stale_sources_summary", f"Removed {deleted_count} stale data source{s}")
|
|
201
|
-
progress.complete_sub_task("stale_sources_summary")
|
|
202
|
-
|
|
203
|
-
if diff > 0:
|
|
204
|
-
errors = delete_data.get("errors", None)
|
|
205
|
-
if errors:
|
|
206
|
-
raise Exception(f"Error(s) deleting streams with modified sources: {errors}")
|
|
207
|
-
except Exception as e:
|
|
208
|
-
# Complete any remaining subtasks
|
|
209
|
-
if len(stale_sources) <= MAX_INDIVIDUAL_SUBTASKS:
|
|
210
|
-
for i in range(len(stale_sources)):
|
|
211
|
-
if f"stale_source_{i}" in progress._tasks:
|
|
212
|
-
progress.complete_sub_task(f"stale_source_{i}")
|
|
213
|
-
else:
|
|
214
|
-
if "stale_sources_summary" in progress._tasks:
|
|
215
|
-
progress.update_sub_task("stale_sources_summary", f"❌ Failed to remove stale sources: {str(e)}")
|
|
216
|
-
progress.complete_sub_task("stale_sources_summary")
|
|
217
287
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
288
|
+
if not stale_sources:
|
|
289
|
+
return
|
|
290
|
+
|
|
291
|
+
with DebuggingSpan("validate_sources"):
|
|
292
|
+
try:
|
|
293
|
+
# Validate which sources truly need deletion by comparing column hashes
|
|
294
|
+
truly_stale = self._filter_truly_stale_sources(stale_sources)
|
|
295
|
+
|
|
296
|
+
if not truly_stale:
|
|
297
|
+
return
|
|
298
|
+
|
|
299
|
+
# Delete truly stale streams
|
|
300
|
+
from relationalai.clients.snowflake import PYREL_ROOT_DB
|
|
301
|
+
query = f"CALL {self.app_name}.api.delete_data_streams({truly_stale}, '{PYREL_ROOT_DB}');"
|
|
302
|
+
|
|
303
|
+
self._add_deletion_subtasks(progress, truly_stale)
|
|
304
|
+
|
|
305
|
+
delete_response = self.res._exec(query)
|
|
306
|
+
delete_json_str = delete_response[0]["DELETE_DATA_STREAMS"].lower()
|
|
307
|
+
delete_data = json.loads(delete_json_str)
|
|
308
|
+
deleted_count = delete_data.get("deleted", 0)
|
|
309
|
+
|
|
310
|
+
self._complete_deletion_subtasks(progress, truly_stale, deleted_count)
|
|
311
|
+
|
|
312
|
+
# Check for errors
|
|
313
|
+
diff = len(truly_stale) - deleted_count
|
|
314
|
+
if diff > 0:
|
|
315
|
+
errors = delete_data.get("errors", None)
|
|
316
|
+
if errors:
|
|
317
|
+
raise Exception(f"Error(s) deleting streams with modified sources: {errors}")
|
|
318
|
+
|
|
319
|
+
except Exception as e:
|
|
320
|
+
# Complete any remaining subtasks
|
|
321
|
+
self._complete_deletion_subtasks(progress, stale_sources, 0)
|
|
322
|
+
if "stale_sources_summary" in progress._tasks:
|
|
323
|
+
progress.update_sub_task(
|
|
324
|
+
"stale_sources_summary",
|
|
325
|
+
f"❌ Failed to remove stale sources: {str(e)}"
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# Don't raise if streams don't exist - this is expected
|
|
329
|
+
if "data streams do not exist" not in str(e).lower():
|
|
330
|
+
raise e from None
|
|
224
331
|
|
|
225
332
|
def _poll_loop(self, progress) -> None:
|
|
226
333
|
source_references = self.res._get_source_references(self.source_info)
|
{relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/builder/std/__init__.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import warnings
|
|
2
2
|
|
|
3
|
-
from relationalai.semantics.std import range, hash, cast, dates, math, strings, decimals, integers, pragmas, \
|
|
3
|
+
from relationalai.semantics.std import range, hash, cast, datetime as dates, math, strings, decimals, integers, pragmas, \
|
|
4
4
|
constraints, uuid_to_string
|
|
5
5
|
|
|
6
6
|
__all__ = [
|
{relationalai-0.11.2 → relationalai-0.11.3}/src/relationalai/early_access/dsl/bindings/csv.py
RENAMED
|
@@ -157,13 +157,13 @@ class CsvSourceModule:
|
|
|
157
157
|
def _row_to_date_value_rule(column, row, value):
|
|
158
158
|
parse_date = b.Relationship.builtins['parse_date']
|
|
159
159
|
rez = b.Date.ref()
|
|
160
|
-
where(parse_date(value, '
|
|
160
|
+
where(parse_date(value, 'yyyy-mm-dd', rez)).define(column(row, rez))
|
|
161
161
|
|
|
162
162
|
@staticmethod
|
|
163
163
|
def _row_to_date_time_value_rule(column, row, value):
|
|
164
164
|
parse_datetime = b.Relationship.builtins['parse_datetime']
|
|
165
165
|
rez = b.DateTime.ref()
|
|
166
|
-
where(parse_datetime(value, '
|
|
166
|
+
where(parse_datetime(value, 'yyy-mm-dd HH:MM:SS z', rez)).define(column(row, rez))
|
|
167
167
|
|
|
168
168
|
@staticmethod
|
|
169
169
|
def _row_to_decimal_value_rule(column, row, value):
|
|
@@ -120,13 +120,15 @@ class LQPExecutor(e.Executor):
|
|
|
120
120
|
pyrel_errors[problem["props"]["pyrel_id"]].append(problem)
|
|
121
121
|
elif abort_on_error:
|
|
122
122
|
e = errors.RelQueryError(problem, source)
|
|
123
|
-
supplementary_message = "Troubleshooting:\n" + \
|
|
124
|
-
" 1. Please retry with a new name for your model. This can work around state-related issues.\n" + \
|
|
125
|
-
" 2. If the error persists, please retry with the `use_lqp` flag set to `False`, for example:\n" + \
|
|
126
|
-
" `model = Model(..., use_lqp=False)`\n" + \
|
|
127
|
-
" This will switch the execution to the legacy backend, which may avoid the issue with some performance cost.\n"
|
|
128
123
|
|
|
129
|
-
|
|
124
|
+
if code == 'SYSTEM_INTERNAL':
|
|
125
|
+
supplementary_message = "Troubleshooting:\n" + \
|
|
126
|
+
" 1. Please retry with a new name for your model. This can work around state-related issues.\n" + \
|
|
127
|
+
" 2. If the error persists, please retry with the `use_lqp` flag set to `False`, for example:\n" + \
|
|
128
|
+
" `model = Model(..., use_lqp=False)`\n" + \
|
|
129
|
+
" This will switch the execution to the legacy backend, which may avoid the issue with some performance cost.\n"
|
|
130
|
+
|
|
131
|
+
e.content = f"{e.content}{supplementary_message}"
|
|
130
132
|
all_errors.append(e)
|
|
131
133
|
else:
|
|
132
134
|
if code == "ARITY_MISMATCH":
|
|
@@ -13,7 +13,7 @@ from relationalai.semantics.lqp.utils import TranslationCtx, gen_unique_var
|
|
|
13
13
|
from relationalai.semantics.lqp.validators import assert_valid_input
|
|
14
14
|
|
|
15
15
|
from decimal import Decimal as PyDecimal
|
|
16
|
-
from datetime import datetime, date
|
|
16
|
+
from datetime import datetime, date, timezone
|
|
17
17
|
from typing import Tuple, cast, Union, Optional
|
|
18
18
|
from warnings import warn
|
|
19
19
|
import re
|
|
@@ -627,7 +627,8 @@ def to_lqp_value(value: ir.PyValue, value_type: ir.Type) -> lqp.Value:
|
|
|
627
627
|
elif typ.type_name == lqp.TypeName.DATE and isinstance(value, date):
|
|
628
628
|
val = lqp.DateValue(value=value, meta=None)
|
|
629
629
|
elif typ.type_name == lqp.TypeName.DATETIME and isinstance(value, datetime):
|
|
630
|
-
|
|
630
|
+
utc_value = value.astimezone(timezone.utc) if value.tzinfo is not None else value # Convert to UTC cf. Iceberg
|
|
631
|
+
val = lqp.DateTimeValue(value=utc_value, meta=None)
|
|
631
632
|
elif typ.type_name == lqp.TypeName.BOOLEAN and isinstance(value, bool):
|
|
632
633
|
val = lqp.BooleanValue(value=value, meta=None)
|
|
633
634
|
else:
|
|
@@ -548,7 +548,7 @@ class PeriodMath(Pass):
|
|
|
548
548
|
return node
|
|
549
549
|
|
|
550
550
|
if node.relation.name not in {
|
|
551
|
-
"year", "month", "week", "day", "hour", "minute", "second", "millisecond"
|
|
551
|
+
"year", "month", "week", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"
|
|
552
552
|
}:
|
|
553
553
|
return node
|
|
554
554
|
|
|
@@ -22,12 +22,18 @@ rel_to_lqp = {
|
|
|
22
22
|
"sinh": "rel_primitive_sinh",
|
|
23
23
|
"asin": "rel_primitive_asin",
|
|
24
24
|
"asinh": "rel_primitive_asinh",
|
|
25
|
+
"tan": "rel_primitive_tan",
|
|
26
|
+
"tanh": "rel_primitive_tanh",
|
|
27
|
+
"atan": "rel_primitive_atan",
|
|
28
|
+
"atanh": "rel_primitive_atanh",
|
|
29
|
+
"cot": "rel_primitive_cot",
|
|
30
|
+
"acot": "rel_primitive_acot",
|
|
25
31
|
"construct_date": "rel_primitive_construct_date",
|
|
26
32
|
"construct_date_from_datetime": "rel_primitive_datetime_date_convert",
|
|
27
|
-
"construct_datetime": "rel_primitive_construct_datetime",
|
|
28
33
|
"construct_datetime_ms_tz": "rel_primitive_construct_datetime",
|
|
29
34
|
"hash": "rel_primitive_hash_tuple_uint128",
|
|
30
35
|
"uuid_to_string": "rel_primitive_uuid_string",
|
|
36
|
+
"parse_uuid": "rel_primitive_parse_uuid",
|
|
31
37
|
"parse_date": "rel_primitive_parse_date",
|
|
32
38
|
"parse_datetime": "rel_primitive_parse_datetime",
|
|
33
39
|
"parse_decimal": "rel_primitive_parse_decimal",
|
|
@@ -47,23 +53,41 @@ rel_to_lqp = {
|
|
|
47
53
|
"replace": "rel_primitive_replace",
|
|
48
54
|
"strip": "rel_primitive_trim",
|
|
49
55
|
"date_year": "rel_primitive_date_year",
|
|
56
|
+
"date_quarter": "rel_primitive_date_quarterofyear",
|
|
50
57
|
"date_month": "rel_primitive_date_month",
|
|
51
58
|
"date_week": "rel_primitive_date_week",
|
|
52
59
|
"date_day": "rel_primitive_date_day",
|
|
60
|
+
"date_dayofyear": "rel_primitive_date_dayofyear",
|
|
61
|
+
"date_weekday": "rel_primitive_date_dayofweek",
|
|
53
62
|
"date_add": "rel_primitive_typed_add_date_period",
|
|
54
63
|
"date_subtract": "rel_primitive_typed_subtract_date_period",
|
|
55
64
|
"dates_period_days": "rel_primitive_date_days_between",
|
|
56
65
|
"datetime_add": "rel_primitive_typed_add_datetime_period",
|
|
57
66
|
"datetime_subtract": "rel_primitive_typed_subtract_datetime_period",
|
|
67
|
+
"datetime_year": "rel_primitive_datetime_year",
|
|
68
|
+
"datetime_quarter": "rel_primitive_datetime_quarterofyear",
|
|
69
|
+
"datetime_month": "rel_primitive_datetime_month",
|
|
58
70
|
"datetime_week": "rel_primitive_datetime_week",
|
|
71
|
+
"datetime_day": "rel_primitive_datetime_day",
|
|
72
|
+
"datetime_dayofyear": "rel_primitive_datetime_dayofyear",
|
|
73
|
+
"datetime_hour": "rel_primitive_datetime_hour",
|
|
74
|
+
"datetime_minute": "rel_primitive_datetime_minute",
|
|
75
|
+
"datetime_second": "rel_primitive_datetime_second",
|
|
76
|
+
"datetime_weekday": "rel_primitive_datetime_dayofweek",
|
|
59
77
|
"datetimes_period_milliseconds": "rel_primitive_datetime_milliseconds_between",
|
|
60
78
|
"date_format": "rel_primitive_format_date",
|
|
61
79
|
"datetime_format": "rel_primitive_format_datetime",
|
|
62
80
|
"range": "rel_primitive_range",
|
|
63
81
|
"natural_log": "rel_primitive_natural_log",
|
|
82
|
+
"log": "rel_primitive_log",
|
|
83
|
+
"log2": "rel_primitive_log2",
|
|
84
|
+
"log10": "rel_primitive_log10",
|
|
64
85
|
"sqrt": "rel_primitive_sqrt",
|
|
65
86
|
"isinf": "rel_primitive_isinf",
|
|
66
87
|
"isnan": "rel_primitive_isnan",
|
|
88
|
+
"exp": "rel_primitive_natural_exp",
|
|
89
|
+
"erf": "rel_primitive_error_function",
|
|
90
|
+
"erfinv": "rel_primitive_error_function_inverse",
|
|
67
91
|
# Division is monotype, but only on the input args. Until we distinguish between input
|
|
68
92
|
# and output args, we can't use the same assertions for monotype-ness as the other ops.
|
|
69
93
|
"/": "rel_primitive_divide_monotype",
|
|
@@ -101,18 +125,7 @@ rel_to_lqp_monotype = {
|
|
|
101
125
|
# Insert extra terms where a raicode primitive expects more terms, and there are possible
|
|
102
126
|
# defaults.
|
|
103
127
|
def _extend_primitive_terms(name: str, terms: list[lqp.RelTerm], term_types: list[lqp.Type]) -> tuple[list[lqp.RelTerm], list[lqp.Type]]:
|
|
104
|
-
if name == "
|
|
105
|
-
# construct_datetime does not provide a timezone or milliseconds so we
|
|
106
|
-
# default to 0 milliseconds and UTC timezone.
|
|
107
|
-
terms = [*terms[:-1], mk_value(0), mk_value("UTC"), terms[-1]]
|
|
108
|
-
term_types = [
|
|
109
|
-
*term_types[:-1],
|
|
110
|
-
mk_type(lqp.TypeName.INT),
|
|
111
|
-
mk_type(lqp.TypeName.STRING),
|
|
112
|
-
term_types[-1],
|
|
113
|
-
]
|
|
114
|
-
|
|
115
|
-
elif name == "rel_primitive_parse_decimal" and len(terms) == 2:
|
|
128
|
+
if name == "rel_primitive_parse_decimal" and len(terms) == 2:
|
|
116
129
|
assert term_types
|
|
117
130
|
py_precision = term_types[1].parameters[0].value
|
|
118
131
|
bit_value = mk_value(digits_to_bits(py_precision))
|