relationalai 1.0.0a3__tar.gz → 1.0.0a4__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.
Files changed (510) hide show
  1. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/PKG-INFO +5 -3
  2. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/README.md +23 -0
  3. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/pyproject.toml +5 -3
  4. relationalai-1.0.0a4/src/relationalai/config/shims.py +2 -0
  5. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/__init__.py +7 -1
  6. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/base.py +19 -13
  7. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/core.py +30 -2
  8. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/front_compiler.py +38 -11
  9. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/pprint.py +1 -1
  10. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/rewriter.py +6 -2
  11. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/typer.py +70 -26
  12. relationalai-1.0.0a4/src/relationalai/semantics/reasoners/__init__.py +11 -0
  13. relationalai-1.0.0a4/src/relationalai/semantics/reasoners/graph/__init__.py +38 -0
  14. relationalai-1.0.0a4/src/relationalai/semantics/reasoners/graph/core.py +9015 -0
  15. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/shims/hoister.py +9 -0
  16. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/shims/mm2v0.py +32 -24
  17. relationalai-1.0.0a4/src/relationalai/tools/cli/cli.py +228 -0
  18. relationalai-1.0.0a4/src/relationalai/tools/cli/docs.py +394 -0
  19. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai.egg-info/PKG-INFO +5 -3
  20. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai.egg-info/SOURCES.txt +5 -0
  21. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai.egg-info/requires.txt +4 -2
  22. relationalai-1.0.0a4/src/v0/relationalai/clients/exec_txn_poller.py +91 -0
  23. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/__init__.py +2 -2
  24. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/direct_access_resources.py +16 -10
  25. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/snowflake.py +43 -14
  26. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/use_index_poller.py +8 -0
  27. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/errors.py +18 -0
  28. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/executor.py +3 -1
  29. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/extract_keys.py +25 -3
  30. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/solvers_pb.py +335 -84
  31. relationalai-1.0.0a3/src/relationalai/config/shims.py +0 -1
  32. relationalai-1.0.0a3/src/relationalai/tools/cli/cli.py +0 -90
  33. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/setup.cfg +0 -0
  34. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/__init__.py +0 -0
  35. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/__init__.py +0 -0
  36. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/config.py +0 -0
  37. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/config_fields.py +0 -0
  38. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/connections/__init__.py +0 -0
  39. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/connections/base.py +0 -0
  40. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/connections/duckdb.py +0 -0
  41. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/connections/snowflake.py +0 -0
  42. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/external/__init__.py +0 -0
  43. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/external/dbt_converter.py +0 -0
  44. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/external/dbt_models.py +0 -0
  45. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/external/snowflake_converter.py +0 -0
  46. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/external/snowflake_models.py +0 -0
  47. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/config/external/utils.py +0 -0
  48. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/backends/lqp/annotations.py +0 -0
  49. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/backends/sql/sql_compiler.py +0 -0
  50. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/frontend/__init__.py +0 -0
  51. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/__init__.py +0 -0
  52. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/builtins.py +0 -0
  53. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/metamodel.py +0 -0
  54. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/metamodel_analyzer.py +0 -0
  55. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/metamodel_compiler.py +0 -0
  56. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/metamodel/pprint.py +0 -0
  57. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/__init__.py +0 -0
  58. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/aggregates.py +0 -0
  59. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/common.py +0 -0
  60. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/constraints.py +0 -0
  61. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/datetime.py +0 -0
  62. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/decimals.py +0 -0
  63. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/floats.py +0 -0
  64. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/integers.py +0 -0
  65. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/math.py +0 -0
  66. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/numbers.py +0 -0
  67. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/re.py +0 -0
  68. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/semantics/std/strings.py +0 -0
  69. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/shims/__init__.py +0 -0
  70. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/shims/executor.py +0 -0
  71. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/shims/helpers.py +0 -0
  72. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/cli/__init__.py +0 -0
  73. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/cli/components/__init__.py +0 -0
  74. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/cli/components/progress_reader.py +0 -0
  75. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/cli/components/utils.py +0 -0
  76. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/cli/config_template.py +0 -0
  77. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/cli/dev.py +0 -0
  78. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/debugger.py +0 -0
  79. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/tools/typer_debugger.py +0 -0
  80. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/dataclasses.py +0 -0
  81. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/docutils.py +0 -0
  82. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/error.py +0 -0
  83. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/format.py +0 -0
  84. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/naming.py +0 -0
  85. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/python.py +0 -0
  86. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/runtime.py +0 -0
  87. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/schema.py +0 -0
  88. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/source.py +0 -0
  89. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/structures.py +0 -0
  90. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai/util/tracing.py +0 -0
  91. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai.egg-info/dependency_links.txt +0 -0
  92. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai.egg-info/entry_points.txt +0 -0
  93. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/relationalai.egg-info/top_level.txt +0 -0
  94. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/__init__.py +0 -0
  95. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/analysis/__init__.py +0 -0
  96. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/analysis/mechanistic.py +0 -0
  97. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/analysis/whynot.py +0 -0
  98. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/auth/__init__.py +0 -0
  99. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/auth/jwt_generator.py +0 -0
  100. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/auth/oauth_callback_server.py +0 -0
  101. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/auth/token_handler.py +0 -0
  102. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/auth/util.py +0 -0
  103. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/__init__.py +0 -0
  104. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/client.py +0 -0
  105. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/config.py +0 -0
  106. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/direct_access_client.py +0 -0
  107. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/hash_util.py +0 -0
  108. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/local.py +0 -0
  109. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/profile_polling.py +0 -0
  110. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/__init__.py +0 -0
  111. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/azure/azure.py +0 -0
  112. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/cache_store.py +0 -0
  113. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/cli_resources.py +0 -0
  114. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/engine_state_handlers.py +0 -0
  115. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/error_handlers.py +0 -0
  116. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/resources_factory.py +0 -0
  117. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/use_index_resources.py +0 -0
  118. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/resources/snowflake/util.py +0 -0
  119. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/result_helpers.py +0 -0
  120. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/types.py +0 -0
  121. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/clients/util.py +0 -0
  122. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/compiler.py +0 -0
  123. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/debugging.py +0 -0
  124. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/dependencies.py +0 -0
  125. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/docutils.py +0 -0
  126. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/dsl.py +0 -0
  127. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/__init__.py +0 -0
  128. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/__init__.py +0 -0
  129. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/builder/__init__.py +0 -0
  130. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/snowflake/__init__.py +0 -0
  131. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/__init__.py +0 -0
  132. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/decimals/__init__.py +0 -0
  133. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/integers/__init__.py +0 -0
  134. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/math/__init__.py +0 -0
  135. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/builder/std/strings/__init__.py +0 -0
  136. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/devtools/__init__.py +0 -0
  137. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/devtools/benchmark_lqp/__init__.py +0 -0
  138. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/devtools/extract_lqp/__init__.py +0 -0
  139. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/__init__.py +0 -0
  140. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/__init__.py +0 -0
  141. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/__init__.py +0 -0
  142. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/adapter_qb.py +0 -0
  143. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/model.py +0 -0
  144. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/orm/parser.py +0 -0
  145. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/__init__.py +0 -0
  146. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/adapter.py +0 -0
  147. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/model.py +0 -0
  148. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/adapters/owl/parser.py +0 -0
  149. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/__init__.py +0 -0
  150. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/common.py +0 -0
  151. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/csv.py +0 -0
  152. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/legacy/__init__.py +0 -0
  153. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/legacy/binding_models.py +0 -0
  154. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/bindings/snowflake.py +0 -0
  155. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/__init__.py +0 -0
  156. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/binder.py +0 -0
  157. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/common.py +0 -0
  158. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/helpers.py +0 -0
  159. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/relations.py +0 -0
  160. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/codegen/weaver.py +0 -0
  161. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/constants.py +0 -0
  162. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/__init__.py +0 -0
  163. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/builders/__init__.py +0 -0
  164. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/builders/logic.py +0 -0
  165. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/builders/scalar_constraint.py +0 -0
  166. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/__init__.py +0 -0
  167. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/predicate/__init__.py +0 -0
  168. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/predicate/atomic.py +0 -0
  169. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/predicate/universal.py +0 -0
  170. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/constraints/scalar.py +0 -0
  171. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/context.py +0 -0
  172. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/cset.py +0 -0
  173. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/exprs/__init__.py +0 -0
  174. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/exprs/relational.py +0 -0
  175. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/exprs/scalar.py +0 -0
  176. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/instances.py +0 -0
  177. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/__init__.py +0 -0
  178. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/aggregation.py +0 -0
  179. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/exists.py +0 -0
  180. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/logic/helper.py +0 -0
  181. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/namespaces.py +0 -0
  182. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/relations.py +0 -0
  183. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/rules.py +0 -0
  184. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/stack.py +0 -0
  185. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/std/__init__.py +0 -0
  186. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/temporal/__init__.py +0 -0
  187. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/temporal/recall.py +0 -0
  188. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/__init__.py +0 -0
  189. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/concepts.py +0 -0
  190. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/constrained/__init__.py +0 -0
  191. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/constrained/nominal.py +0 -0
  192. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/constrained/subtype.py +0 -0
  193. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/standard.py +0 -0
  194. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/unconstrained.py +0 -0
  195. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/types/variables.py +0 -0
  196. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/core/utils.py +0 -0
  197. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ir/__init__.py +0 -0
  198. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ir/compiler.py +0 -0
  199. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ir/executor.py +0 -0
  200. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/__init__.py +0 -0
  201. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/constraints.py +0 -0
  202. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/export.py +0 -0
  203. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/models.py +0 -0
  204. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/python_printer.py +0 -0
  205. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/raw_source.py +0 -0
  206. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/readings.py +0 -0
  207. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/relationships.py +0 -0
  208. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/roles.py +0 -0
  209. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/ontologies/subtyping.py +0 -0
  210. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/__init__.py +0 -0
  211. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/constraints.py +0 -0
  212. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/__init__.py +0 -0
  213. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/dimensions.py +0 -0
  214. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/initializer.py +0 -0
  215. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/measure_rules.py +0 -0
  216. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/measures.py +0 -0
  217. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/measures/role_exprs.py +0 -0
  218. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/models.py +0 -0
  219. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/object_oriented_printer.py +0 -0
  220. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/printer.py +0 -0
  221. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/reasoner_errors.py +0 -0
  222. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/reasoners.py +0 -0
  223. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/relations.py +0 -0
  224. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/relationships.py +0 -0
  225. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/types.py +0 -0
  226. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/utils.py +0 -0
  227. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/orm/verb.py +0 -0
  228. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/physical_metadata/__init__.py +0 -0
  229. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/physical_metadata/tables.py +0 -0
  230. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/relations.py +0 -0
  231. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/rulesets.py +0 -0
  232. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/__init__.py +0 -0
  233. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/builder.py +0 -0
  234. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/comp_names.py +0 -0
  235. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/components.py +0 -0
  236. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/contexts.py +0 -0
  237. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/exprs.py +0 -0
  238. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/schemas/fragments.py +0 -0
  239. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialization.py +0 -0
  240. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/__init__.py +0 -0
  241. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/binding_model.py +0 -0
  242. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/exporter.py +0 -0
  243. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/serialize/model.py +0 -0
  244. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/snow/__init__.py +0 -0
  245. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/snow/api.py +0 -0
  246. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/snow/common.py +0 -0
  247. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/state_mgmt/__init__.py +0 -0
  248. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/state_mgmt/state_charts.py +0 -0
  249. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/state_mgmt/transitions.py +0 -0
  250. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/__init__.py +0 -0
  251. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/concepts.py +0 -0
  252. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/entities.py +0 -0
  253. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/types/values.py +0 -0
  254. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/dsl/utils.py +0 -0
  255. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/graphs/__init__.py +0 -0
  256. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/__init__.py +0 -0
  257. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/compiler/__init__.py +0 -0
  258. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/constructors/__init__.py +0 -0
  259. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/executor/__init__.py +0 -0
  260. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/ir/__init__.py +0 -0
  261. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/passes/__init__.py +0 -0
  262. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/pragmas/__init__.py +0 -0
  263. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/primitives/__init__.py +0 -0
  264. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/types/__init__.py +0 -0
  265. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/utils/__init__.py +0 -0
  266. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/lqp/validators/__init__.py +0 -0
  267. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/__init__.py +0 -0
  268. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/builtins/__init__.py +0 -0
  269. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/compiler/__init__.py +0 -0
  270. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/dependency/__init__.py +0 -0
  271. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/factory/__init__.py +0 -0
  272. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/helpers/__init__.py +0 -0
  273. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/ir/__init__.py +0 -0
  274. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/rewrite/__init__.py +0 -0
  275. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/typer/__init__.py +0 -0
  276. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/typer/typer/__init__.py +0 -0
  277. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/types/__init__.py +0 -0
  278. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/util/__init__.py +0 -0
  279. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/metamodel/visitor/__init__.py +0 -0
  280. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/__init__.py +0 -0
  281. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/executor/__init__.py +0 -0
  282. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/rel_utils/__init__.py +0 -0
  283. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/rel/rewrite/__init__.py +0 -0
  284. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/solvers/__init__.py +0 -0
  285. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/sql/__init__.py +0 -0
  286. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/sql/executor/__init__.py +0 -0
  287. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/sql/rewrite/__init__.py +0 -0
  288. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/__init__.py +0 -0
  289. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/logging/__init__.py +0 -0
  290. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/test_snapshot_base/__init__.py +0 -0
  291. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/early_access/tests/utils/__init__.py +0 -0
  292. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/__init__.py +0 -0
  293. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/base.py +0 -0
  294. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/ci.py +0 -0
  295. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/colab.py +0 -0
  296. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/generic.py +0 -0
  297. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/hex.py +0 -0
  298. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/ipython.py +0 -0
  299. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/jupyter.py +0 -0
  300. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/snowbook.py +0 -0
  301. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/environments/terminal.py +0 -0
  302. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/SF.py +0 -0
  303. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/__init__.py +0 -0
  304. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/graphs.py +0 -0
  305. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/inspect.py +0 -0
  306. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/__init__.py +0 -0
  307. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/api.py +0 -0
  308. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/automaton.py +0 -0
  309. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/bridge.py +0 -0
  310. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/compiler.py +0 -0
  311. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/datalog.py +0 -0
  312. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/diagnostics.py +0 -0
  313. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/filter.py +0 -0
  314. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/glushkov.py +0 -0
  315. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/options.py +0 -0
  316. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/rpq.py +0 -0
  317. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/transition.py +0 -0
  318. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/pathfinder/utils.py +0 -0
  319. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/__init__.py +0 -0
  320. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/api.py +0 -0
  321. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/benchmarks/__init__.py +0 -0
  322. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/benchmarks/grid_graph.py +0 -0
  323. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/basic_example.py +0 -0
  324. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/minimal_engine_warmup.py +0 -0
  325. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/movie_example.py +0 -0
  326. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/paths_benchmark.py +0 -0
  327. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/paths_example.py +0 -0
  328. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/examples/pattern_to_automaton.py +0 -0
  329. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/find_paths_via_automaton.py +0 -0
  330. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/graph.py +0 -0
  331. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/__init__.py +0 -0
  332. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/find_paths.py +0 -0
  333. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_repetition.py +0 -0
  334. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/one_sided_ball_upto.py +0 -0
  335. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/single.py +0 -0
  336. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_repetition.py +0 -0
  337. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/two_sided_balls_upto.py +0 -0
  338. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/usp-old.py +0 -0
  339. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/usp-tuple.py +0 -0
  340. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/path_algorithms/usp.py +0 -0
  341. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/product_graph.py +0 -0
  342. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/__init__.py +0 -0
  343. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/automaton.py +0 -0
  344. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/diagnostics.py +0 -0
  345. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/filter.py +0 -0
  346. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/glushkov.py +0 -0
  347. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/rpq.py +0 -0
  348. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/rpq/transition.py +0 -0
  349. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_sp_max_length.py +0 -0
  350. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_sp_multiple.py +0 -0
  351. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_sp_single.py +0 -0
  352. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_walks_multiple.py +0 -0
  353. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_limit_walks_single.py +0 -0
  354. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_multiple.py +0 -0
  355. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_repetition_single.py +0 -0
  356. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_multiple.py +0 -0
  357. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_one_sided_ball_upto_single.py +0 -0
  358. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_single_paths.py +0 -0
  359. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_single_walks.py +0 -0
  360. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_single_walks_undirected.py +0 -0
  361. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_multiple.py +0 -0
  362. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_repetition_single.py +0 -0
  363. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_multiple.py +0 -0
  364. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_two_sided_balls_upto_single.py +0 -0
  365. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_usp_nsp_multiple.py +0 -0
  366. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tests/tests_usp_nsp_single.py +0 -0
  367. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/tree_agg.py +0 -0
  368. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/__init__.py +0 -0
  369. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/iterators.py +0 -0
  370. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/prefix_sum.py +0 -0
  371. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/paths/utilities/utilities.py +0 -0
  372. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/experimental/solvers.py +0 -0
  373. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/__init__.py +0 -0
  374. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/csv.py +0 -0
  375. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/loader.py +0 -0
  376. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/loaders/types.py +0 -0
  377. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/metagen.py +0 -0
  378. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/metamodel.py +0 -0
  379. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/rel.py +0 -0
  380. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/rel_emitter.py +0 -0
  381. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/rel_utils.py +0 -0
  382. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/__init__.py +0 -0
  383. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/__init__.py +0 -0
  384. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/benchmark_lqp.py +0 -0
  385. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/compilation_manager.py +0 -0
  386. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/devtools/extract_lqp.py +0 -0
  387. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/__init__.py +0 -0
  388. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/annotations.py +0 -0
  389. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/internal.py +0 -0
  390. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/internal/snowflake.py +0 -0
  391. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/__init__.py +0 -0
  392. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/builtins.py +0 -0
  393. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/compiler.py +0 -0
  394. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/constructors.py +0 -0
  395. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/intrinsics.py +0 -0
  396. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/ir.py +0 -0
  397. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/model2lqp.py +0 -0
  398. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/passes.py +0 -0
  399. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/pragmas.py +0 -0
  400. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/primitives.py +0 -0
  401. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/result_helpers.py +0 -0
  402. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/__init__.py +0 -0
  403. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/annotate_constraints.py +0 -0
  404. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/cdc.py +0 -0
  405. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/extract_common.py +0 -0
  406. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/function_annotations.py +0 -0
  407. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/functional_dependencies.py +0 -0
  408. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/quantify_vars.py +0 -0
  409. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/rewrite/splinter.py +0 -0
  410. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/types.py +0 -0
  411. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/utils.py +0 -0
  412. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/lqp/validators.py +0 -0
  413. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/__init__.py +0 -0
  414. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/builtins.py +0 -0
  415. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/compiler.py +0 -0
  416. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/dataflow.py +0 -0
  417. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/dependency.py +0 -0
  418. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/executor.py +0 -0
  419. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/factory.py +0 -0
  420. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/helpers.py +0 -0
  421. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/ir.py +0 -0
  422. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/__init__.py +0 -0
  423. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/discharge_constraints.py +0 -0
  424. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +0 -0
  425. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +0 -0
  426. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/flatten.py +0 -0
  427. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/rewrite/format_outputs.py +0 -0
  428. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/typer/__init__.py +0 -0
  429. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/typer/checker.py +0 -0
  430. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/typer/typer.py +0 -0
  431. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/types.py +0 -0
  432. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/util.py +0 -0
  433. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/metamodel/visitor.py +0 -0
  434. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/__init__.py +0 -0
  435. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/experimental/__init__.py +0 -0
  436. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/graph/__init__.py +0 -0
  437. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/graph/core.py +0 -0
  438. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/__init__.py +0 -0
  439. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/common.py +0 -0
  440. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/reasoners/optimization/solvers_dev.py +0 -0
  441. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/__init__.py +0 -0
  442. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/builtins.py +0 -0
  443. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/compiler.py +0 -0
  444. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/executor.py +0 -0
  445. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/rel.py +0 -0
  446. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/rel/rel_utils.py +0 -0
  447. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/snowflake/__init__.py +0 -0
  448. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/__init__.py +0 -0
  449. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/compiler.py +0 -0
  450. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/__init__.py +0 -0
  451. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/duck_db.py +0 -0
  452. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/result_helpers.py +0 -0
  453. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/executor/snowflake.py +0 -0
  454. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/__init__.py +0 -0
  455. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/denormalize.py +0 -0
  456. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/double_negation.py +0 -0
  457. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/recursive_union.py +0 -0
  458. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/rewrite/sort_output_query.py +0 -0
  459. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/sql/sql.py +0 -0
  460. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/__init__.py +0 -0
  461. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/constraints.py +0 -0
  462. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/datetime.py +0 -0
  463. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/decimals.py +0 -0
  464. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/floats.py +0 -0
  465. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/integers.py +0 -0
  466. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/math.py +0 -0
  467. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/pragmas.py +0 -0
  468. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/re.py +0 -0
  469. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/std.py +0 -0
  470. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/std/strings.py +0 -0
  471. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/__init__.py +0 -0
  472. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/logging.py +0 -0
  473. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/test_snapshot_abstract.py +0 -0
  474. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/test_snapshot_base.py +0 -0
  475. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/semantics/tests/utils.py +0 -0
  476. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/__init__.py +0 -0
  477. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/aggregates.py +0 -0
  478. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/dates.py +0 -0
  479. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/graphs.py +0 -0
  480. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/inspect.py +0 -0
  481. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/math.py +0 -0
  482. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/re.py +0 -0
  483. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/std/strings.py +0 -0
  484. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/__init__.py +0 -0
  485. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cleanup_snapshots.py +0 -0
  486. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cli.py +0 -0
  487. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cli_controls.py +0 -0
  488. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/cli_helpers.py +0 -0
  489. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/constants.py +0 -0
  490. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/debugger.py +0 -0
  491. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/debugger_client.py +0 -0
  492. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/debugger_server.py +0 -0
  493. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/dev.py +0 -0
  494. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/qb_debugger.py +0 -0
  495. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/query_utils.py +0 -0
  496. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/tools/snapshot_viewer.py +0 -0
  497. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/__init__.py +0 -0
  498. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/clean_up_databases.py +0 -0
  499. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/constants.py +0 -0
  500. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/format.py +0 -0
  501. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/graph.py +0 -0
  502. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/list_databases.py +0 -0
  503. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/otel_configuration.py +0 -0
  504. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/otel_handler.py +0 -0
  505. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/snowflake_handler.py +0 -0
  506. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/span_format_test.py +0 -0
  507. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/span_tracker.py +0 -0
  508. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/spans_file_handler.py +0 -0
  509. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/timeout.py +0 -0
  510. {relationalai-1.0.0a3 → relationalai-1.0.0a4}/src/v0/relationalai/util/tracing_handler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 1.0.0a3
3
+ Version: 1.0.0a4
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  Requires-Python: >=3.10
@@ -15,10 +15,9 @@ Requires-Dist: numpy<2
15
15
  Requires-Dist: pandas
16
16
  Requires-Dist: colorama
17
17
  Requires-Dist: inquirerpy
18
- Requires-Dist: click==8.2.1
18
+ Requires-Dist: click
19
19
  Requires-Dist: gravis
20
20
  Requires-Dist: toml
21
- Requires-Dist: tomlkit
22
21
  Requires-Dist: requests
23
22
  Requires-Dist: pyarrow
24
23
  Requires-Dist: websockets
@@ -35,6 +34,9 @@ Requires-Dist: sqlglot
35
34
  Requires-Dist: pyyaml
36
35
  Requires-Dist: pydantic<2.12.0,>=2.0.0
37
36
  Requires-Dist: pydantic-settings<2.11.0,>=2.0.0
37
+ Requires-Dist: tomlkit
38
+ Requires-Dist: fastapi
39
+ Requires-Dist: uvicorn[standard]
38
40
  Provides-Extra: dev
39
41
  Requires-Dist: pytest; extra == "dev"
40
42
  Requires-Dist: pytest-cov; extra == "dev"
@@ -15,6 +15,29 @@ make install
15
15
  make sync
16
16
  ```
17
17
 
18
+ ### Running Tests
19
+
20
+ The repository includes two test suites that can be run using Make commands:
21
+
22
+ **Unified tests** (general test suite):
23
+ ```bash
24
+ make test # run all unified tests
25
+ make test unions # run tests matching "q03"
26
+ make test "unions or strings" # run tests matching pattern with spaces
27
+ make test unions --update # run tests and update snapshots
28
+ make test --update # update snapshots for all tests
29
+ ```
30
+
31
+ **TPCH tests** (TPC-H benchmark queries):
32
+ ```bash
33
+ make tpch # run all TPCH tests
34
+ make tpch q01 # run only q01
35
+ make tpch q22 --update # run q22 and update snapshots
36
+ make tpch --update # update snapshots for all TPCH tests
37
+ ```
38
+
39
+ The `--update` flag (or `-u` for short) can be placed before or after the pattern.
40
+
18
41
  ### Docstrings
19
42
 
20
43
  API reference documentation is generated from docstrings in the code.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = 'relationalai'
3
- version = '1.0.0a3'
3
+ version = '1.0.0a4'
4
4
  description = 'RelationalAI Library and CLI'
5
5
  readme="docs/pypi/README.md"
6
6
  authors = [
@@ -18,10 +18,9 @@ dependencies = [
18
18
  "pandas",
19
19
  "colorama",
20
20
  "inquirerpy",
21
- "click==8.2.1",
21
+ "click",
22
22
  "gravis",
23
23
  "toml",
24
- "tomlkit",
25
24
  "requests",
26
25
  "pyarrow",
27
26
  "websockets",
@@ -40,6 +39,9 @@ dependencies = [
40
39
  # "confocal @ git+https://github.com/joshuafcole/confocal.git",
41
40
  "pydantic>=2.0.0,<2.12.0",
42
41
  "pydantic-settings>=2.0.0,<2.11.0",
42
+ "tomlkit",
43
+ "fastapi",
44
+ "uvicorn[standard]",
43
45
  ]
44
46
  [project.optional-dependencies]
45
47
  dev = [
@@ -0,0 +1,2 @@
1
+ DRY_RUN=False
2
+ ENFORCE_TYPE_CORRECT=False
@@ -120,6 +120,7 @@ Date = core.Date
120
120
  DateTime = core.DateTime
121
121
  # RawSource = core.RawSource
122
122
  # Hash = core.Hash
123
+ Error = core.Error
123
124
 
124
125
  #------------------------------------------------------
125
126
  # Convenience aggregates
@@ -147,7 +148,12 @@ per = aggs.per
147
148
  __all__ = [
148
149
  "Alias", "CoreLibrary", "Concept", "Data", "Distinct", "Expression", "Field", "FieldRef", "Fragment",
149
150
  "Library", "Literal", "Match", "Model", "New", "Not", "Chain", "Property", "Reading", "Relationship",
150
- "Table", "Union", "Value", "Variable", "core",
151
+ "Table", "Union", "Value", "Variable", "core", "Error",
152
+ "Any", "AnyEntity", "TypeVar", "EntityTypeVar",
153
+ "Number", "String", "Integer", "Int", "Int64", "Int128", "Float", "Decimal", "Bool", "Boolean", "Date", "DateTime",
154
+
155
+ "rank", "limit", "asc", "desc",
156
+ "count", "sum", "min", "max", "avg", "string_join", "per",
151
157
 
152
158
  "select", "define", "where", "require", "union", "data", "not_",
153
159
  ]
@@ -6,7 +6,7 @@ import decimal
6
6
  import math
7
7
  import re
8
8
  import datetime as dt
9
- from typing import TYPE_CHECKING, Any, Generic, Iterable, Iterator, NoReturn, Optional, Sequence, Tuple, Type, TypeGuard, TypeVar, cast
9
+ from typing import TYPE_CHECKING, Any, Iterator, NoReturn, Optional, Sequence, Tuple, Type, TypeGuard, cast
10
10
  import itertools
11
11
  from more_itertools import peekable
12
12
  from pandas import DataFrame
@@ -19,7 +19,7 @@ from ...util.naming import Namer, sanitize
19
19
  from ...util.python import pytype_to_concept_name
20
20
  from ...util.source import SourcePos
21
21
  from ...util.tracing import get_tracer
22
- from ...util.error import err, exc, warn, source
22
+ from ...util.error import exc, warn, source
23
23
  from ...util.docutils import include_in_docs
24
24
  from ..metamodel.builtins import builtins
25
25
  from ..metamodel.metamodel import Model as mModel
@@ -236,16 +236,16 @@ class Variable(DSLBase):
236
236
  invalid = next((bool_check for bool_check in ["if ", "while ", " and ", " or "] if bool_check in cur_source), "bool check").strip()
237
237
  mapped = {"and": "`&` or `,`", "or": "`|`", "if": "`where`"}
238
238
  if m := mapped.get(invalid):
239
- exc(f"Invalid operator", f"Cannot use python's `{invalid}` in model expressions. Use {m} instead.", [source(self)])
239
+ exc("Invalid operator", f"Cannot use python's `{invalid}` in model expressions. Use {m} instead.", [source(self)])
240
240
  else:
241
- exc(f"Invalid operator", f"Cannot use python's `{invalid}` in model expressions.", [source(self)])
241
+ exc("Invalid operator", f"Cannot use python's `{invalid}` in model expressions.", [source(self)])
242
242
 
243
243
  if not TYPE_CHECKING:
244
244
  def __iter__(self):
245
245
  common_incorrect = ["sum", "min", "max"]
246
246
  for agg in common_incorrect:
247
247
  if agg in self._source.block.source:
248
- exc(f"Invalid built-in", f"The Python built-in `{agg}()` was used instead of the RAI equivalent.", [
248
+ exc("Invalid built-in", f"The Python built-in `{agg}()` was used instead of the RAI equivalent.", [
249
249
  source(self),
250
250
  f"Use [cyan]`relationalai.semantics.std.aggregates.{agg}`[/cyan] instead.",
251
251
  ])
@@ -405,7 +405,7 @@ class Ref(Variable):
405
405
  def _to_concept(self) -> Concept:
406
406
  return self._concept
407
407
 
408
- def FilterBy(self, **kwargs: Any) -> Expression:
408
+ def filter_by(self, **kwargs: Any) -> Expression:
409
409
  return FilterBy(self, kwargs)
410
410
 
411
411
  #------------------------------------------------------
@@ -741,7 +741,7 @@ class Reading(Relationship):
741
741
  precision = fields[part].type._precision
742
742
  scale = fields[part].type._scale
743
743
  if scale == 0:
744
- correct_type_name = f"Integer"
744
+ correct_type_name = "Integer"
745
745
  else:
746
746
  correct_type_name = f"Number.size({precision},{scale})"
747
747
  if type_name.lower() != fields[part].name and correct_type_name.lower() != fields[part].name:
@@ -782,7 +782,13 @@ class Literal(Variable):
782
782
  if type(value) is float and (math.isnan(value) or math.isinf(value)):
783
783
  return CoreConcepts["Float"]
784
784
  if type(value) is float:
785
- fractional_digits = 0 if math.isnan(value) else min(len(str(value).split(".")[1]), 14)
785
+ if math.isnan(value):
786
+ fractional_digits = 0
787
+ else:
788
+ str_value = str(value)
789
+ if 'e' in str_value:
790
+ str_value = format(decimal.Decimal(value), 'f')
791
+ fractional_digits = min(len(str_value.split('.')[1]) if '.' in str_value else 1, 14)
786
792
  return CoreConcepts["Decimal"].size(38, fractional_digits) # type: ignore
787
793
  if type(value) is decimal.Decimal:
788
794
  str_value = format(value, 'f')
@@ -1000,17 +1006,17 @@ class AsBool(Variable):
1000
1006
  class Alias(Variable):
1001
1007
  def __init__(self, source: Variable, alias: str):
1002
1008
  super().__init__(source._model)
1003
- self._source = source
1009
+ self._source_item = source
1004
1010
  self._alias = alias
1005
1011
 
1006
1012
  def _to_concept(self) -> Concept|None:
1007
- return self._source._to_concept()
1013
+ return self._source_item._to_concept()
1008
1014
 
1009
1015
  def __format__(self, format_spec: str) -> str:
1010
- if isinstance(self._source, Concept):
1016
+ if isinstance(self._source_item, Concept):
1011
1017
  if format_spec:
1012
1018
  exc("Invalid alias", f"Alias already specifies an alias for this concept, you can remove `:{format_spec}`")
1013
- return self._source.__format__(self._alias)
1019
+ return self._source_item.__format__(self._alias)
1014
1020
  return super().__format__(format_spec)
1015
1021
 
1016
1022
  #------------------------------------------------------
@@ -1157,7 +1163,7 @@ class Aggregate(Variable):
1157
1163
  return None
1158
1164
 
1159
1165
 
1160
- def where(self, *args: Value) -> Aggregate:
1166
+ def where(self, *args: Statement) -> Aggregate:
1161
1167
  new = self._clone()
1162
1168
  new._where = new._where.where(*args)
1163
1169
  return new
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import re
4
- from .base import CoreLibrary as Core, Concept, NumberConcept, Field as dslField, Relationship
4
+ from .base import CoreLibrary as Core, Concept, NumberConcept, Field as dslField, Relationship, Library
5
5
  from ..metamodel.builtins import builtins as b
6
6
  from ..metamodel import metamodel as mm
7
7
  from typing import cast
@@ -102,6 +102,26 @@ DateTime = Core.Type("DateTime")
102
102
  Float = Core.Type("Float", super_types=[Numeric])
103
103
  Hash = Core.Type("Hash") # TODO: we shouldn't really need this?
104
104
 
105
+ def is_primitive_concept(concept: Concept) -> bool:
106
+ """ Check if the given concept is one of the core primitive concepts. """
107
+ if isinstance(concept, NumberConcept):
108
+ return True
109
+ if (concept is Boolean
110
+ or concept is Number
111
+ or concept is Float
112
+ or concept is String
113
+ or concept is Date
114
+ or concept is DateTime
115
+ or concept is Hash):
116
+ return True
117
+ return any(is_primitive_concept(a) for a in concept._extends)
118
+
119
+ def extends(concept: Concept, super_concept: Concept) -> bool:
120
+ """ Check if the given concept extends the given super_concept (directly or indirectly). """
121
+ if concept is super_concept:
122
+ return True
123
+ return any(extends(a, super_concept) for a in concept._extends)
124
+
105
125
  #------------------------------------------------------
106
126
  # Aliases for Types
107
127
  #------------------------------------------------------
@@ -176,4 +196,12 @@ Core.Relation("unique", [dslField.input("fields", Any, is_list=True)])
176
196
  # Downstream annotations
177
197
  #------------------------------------------------------
178
198
 
179
- Core.Relation("output_value_is_key", [dslField.input("is_key", Integer)])
199
+ Core.Relation("output_value_is_key", [dslField.input("is_key", Integer)])
200
+
201
+ #------------------------------------------------------
202
+ # Core Entities
203
+ #------------------------------------------------------
204
+
205
+ CoreEntities = Library("CoreEntities")
206
+
207
+ Error = CoreEntities.Concept("Error")
@@ -56,6 +56,8 @@ def find_keys(item: Value | Statement, root_only: bool = False) -> list[Value]:
56
56
  keys.append(item)
57
57
  keys.extend(find_keys(item._start, root_only))
58
58
  return keys
59
+ if isinstance(item, New) and root_only:
60
+ return [item]
59
61
  if isinstance(item, Relationship):
60
62
  if root_only:
61
63
  return [item]
@@ -135,6 +137,14 @@ def is_core_concept(concept):
135
137
  return True
136
138
  return any(is_core_concept(a) for a in concept._extends)
137
139
 
140
+ def is_primitive_concept(concept: Concept) -> bool:
141
+ core = _get_core()
142
+ return core.is_primitive_concept(concept)
143
+
144
+ def is_entity_concept(concept: Concept) -> bool:
145
+ core = _get_core()
146
+ return not is_core_concept(concept) or core.extends(concept, core.AnyEntity)
147
+
138
148
  def concept_var_name(concept: Concept|Relationship) -> str:
139
149
  if isinstance(concept, Relationship):
140
150
  return sanitize(concept._short_name).lower()
@@ -289,11 +299,13 @@ def normalize_branch_keys(compiler:FrontCompiler, ctx:Context, branch_keys:list[
289
299
  for key, var in branch_keys:
290
300
  if var not in ctx.frame_vars:
291
301
  source = branch._source if isinstance(branch, DSLBase) else var.source
292
- if not isinstance(key, (Concept, Ref)):
293
- return ctx.err("Invalid branch", "Branch key must be a concept or reference.", [err_source(source)])
302
+ if not isinstance(key, (Variable)):
303
+ return ctx.err("Invalid branch", "Branch key must resolve to a concept.", [err_source(source)])
294
304
  concept = key._to_concept()
295
- if is_core_concept(concept):
305
+ if not is_entity_concept(concept):
296
306
  return ctx.err("Invalid branch", "Branch key must be an entity, not a primitive.", [err_source(source)])
307
+ elif concept is None:
308
+ return ctx.err("Invalid branch", "Branch key must resolve to a concept.", [err_source(source)])
297
309
  else:
298
310
  ctx.add(Construct((ctx.to_value(concept._name + "_NONE_SENTINEL"),), var, source=key._source))
299
311
 
@@ -453,6 +465,8 @@ class Context:
453
465
  node = mLiteral(type=value_type, value=value._value, source=value._source)
454
466
  elif isinstance(value, AsBool):
455
467
  node = Var(bt.core.Boolean, f"v", source=value._source)
468
+ elif isinstance(value, Alias):
469
+ node = self.to_value(value._source_item)
456
470
  elif isinstance(value, MetaRef):
457
471
  if isinstance(value._target, Concept):
458
472
  node = self.compiler.to_type(value._target)
@@ -542,10 +556,14 @@ class FrontCompiler:
542
556
 
543
557
  def to_annotation(self, node: Expression | Relationship) -> Annotation:
544
558
  if isinstance(node, Expression):
559
+ if not isinstance(node._op, Relationship):
560
+ exc("Invalid annotation", f"Annotation operation must be a Relationship, got `{type(node._op).__name__}`.", [
561
+ err_source(node._source)
562
+ ])
545
563
  args = []
546
- for arg in node._args:
564
+ for arg, field in zip(node._args, node._op._fields):
547
565
  if isinstance(arg, Literal):
548
- args.append(mLiteral(type=self.to_type(arg._type), value=arg._value, source=arg._source))
566
+ args.append(mLiteral(type=self.to_type(field.type), value=arg._value, source=arg._source))
549
567
  elif isinstance(arg, Concept) or isinstance(arg, Relationship):
550
568
  args.append(self.to_relation(arg))
551
569
  elif isinstance(arg, Chain):
@@ -597,7 +615,7 @@ class FrontCompiler:
597
615
  rel = UnresolvedRelation(name=name, fields=tuple(fields), source=node._source, readings=readings, annotations=annos, overloads=tuple(overloads))
598
616
  else:
599
617
  rel = Relation(name=name, fields=tuple(fields), source=node._source, readings=readings, annotations=annos, overloads=tuple(overloads))
600
- if isinstance(node, Property):
618
+ if isinstance(node, Property) and not node._is_unresolved and len(fields) > 1:
601
619
  # Add a uniqueness constraint for properties
602
620
  _get_constraints()
603
621
  self.relation_constraints.add(Lookup(bt.constraints.unique_fields, (tuple(fields[:-1]),)))
@@ -779,7 +797,9 @@ class FrontCompiler:
779
797
  # the root vars, since all of them behave like keys. For Properties,
780
798
  # we ignore the last field since it's functionally determined by the others.
781
799
  # Expressions use their args
782
- if isinstance(root, Property):
800
+ if is_distinct:
801
+ root_vars.add(root_v)
802
+ elif isinstance(root, Property):
783
803
  root_vars.update(ctx.to_value(field) for field in root._fields[:-1])
784
804
  elif isinstance(root, Relationship):
785
805
  root_vars.update(ctx.to_value(field) for field in root._fields)
@@ -855,6 +875,13 @@ class FrontCompiler:
855
875
 
856
876
  def define(self, ctx: Context, fragment:Fragment, exprs: list[Value]):
857
877
  with ctx.updating():
878
+ roots = KeyedSet(dsl_key)
879
+ for expr in exprs:
880
+ roots.update(find_keys(expr))
881
+ # look the roots up in the outer scope
882
+ for root in roots:
883
+ self.lookup(ctx, root)
884
+
858
885
  for expr in exprs:
859
886
  source = expr._source if isinstance(expr, DSLBase) else fragment._source
860
887
  with ctx.subcontext():
@@ -899,13 +926,13 @@ class FrontCompiler:
899
926
 
900
927
  if isinstance(node, Concept):
901
928
  final_var = ctx.to_value(node)
902
- if not is_core_concept(node):
929
+ if is_entity_concept(node):
903
930
  ctx.add_lookup(node, [final_var], source=source)
904
931
  return final_var
905
932
 
906
933
  elif isinstance(node, Ref):
907
934
  final_var = ctx.to_value(node)
908
- if not is_core_concept(node._concept):
935
+ if is_entity_concept(node._concept):
909
936
  ctx.add_lookup(node._concept, [final_var], source=source)
910
937
  return final_var
911
938
 
@@ -956,7 +983,7 @@ class FrontCompiler:
956
983
  return args[-1]
957
984
  # if we are casting e.g. with something like `Discount(0.6)` we should return a literal with that
958
985
  # type
959
- elif isinstance(node._op, Concept) and is_core_concept(node._op):
986
+ elif isinstance(node._op, Concept) and is_primitive_concept(node._op):
960
987
  if isinstance(node._args[0], Literal):
961
988
  return mLiteral(type=self.to_type(node._op), value=node._args[0]._value, source=source)
962
989
  else:
@@ -1143,7 +1170,7 @@ class FrontCompiler:
1143
1170
  return self.lookup(ctx, node._compile_lookup())
1144
1171
 
1145
1172
  elif isinstance(node, Alias):
1146
- return self.lookup(ctx, node._source)
1173
+ return self.lookup(ctx, node._source_item)
1147
1174
 
1148
1175
  elif isinstance(node, AsBool):
1149
1176
  # we need to create a match with two branches that returns true/false
@@ -124,7 +124,7 @@ class PrettyPrinter:
124
124
  return repr(v)
125
125
 
126
126
  def _fmt_Alias(self, a: Alias, level: int) -> str:
127
- src = self.format(a._source, level)
127
+ src = self.format(a._source_item, level)
128
128
  return f"{src} AS {a._alias}"
129
129
 
130
130
  def _fmt_FieldRef(self, fr: FieldRef, level: int) -> str:
@@ -3,7 +3,7 @@ from typing import Any, Callable, Dict, Type
3
3
 
4
4
  from relationalai.util.structures import OrderedSet
5
5
  from .metamodel import (
6
- Node, Model, NumberType, ScalarType, Task, Logical, Sequence, Union, Match, Until, Wait, Loop, Break, Require,
6
+ Node, Model, Relation, UnresolvedRelation, NumberType, ScalarType, Task, Logical, Sequence, Union, Match, Until, Wait, Loop, Break, Require,
7
7
  Not, Exists, Lookup, Update, Aggregate, Construct, Var, Annotation, Field, Literal, UnionType, ListType, TupleType
8
8
  )
9
9
  import datetime as _dt
@@ -17,7 +17,11 @@ NO_WALK = object()
17
17
 
18
18
  WALK_FIELDS: Dict[Type[Node], tuple[str, ...]] = {
19
19
  # Top-level
20
- Model: ("root",),
20
+ Model: ("root", "relations",),
21
+
22
+ # Relation
23
+ Relation: ("fields",),
24
+ UnresolvedRelation: ("fields",),
21
25
 
22
26
  # Control flow
23
27
  Logical: ("body",),
@@ -13,6 +13,33 @@ from . import metamodel as mm, builtins as bt
13
13
  from .rewriter import Walker, Rewriter, NO_WALK
14
14
  from .builtins import builtins as b
15
15
 
16
+ from contextlib import contextmanager
17
+
18
+
19
+ #--------------------------------------------------
20
+ # Typer Testing
21
+ #--------------------------------------------------
22
+ COLLECTED_ERRORS = None
23
+ @contextmanager
24
+ def errors(error_type):
25
+ """
26
+ Check that this type error is raised within the context.
27
+
28
+ :param error_type: the type of the expected error.
29
+ """
30
+ global COLLECTED_ERRORS
31
+ COLLECTED_ERRORS = []
32
+ try:
33
+ yield
34
+ except:
35
+ # we expect the typer to raise an error
36
+ pass
37
+ finally:
38
+ if not any(isinstance(error, error_type) for error in COLLECTED_ERRORS):
39
+ exc("ExpectedWarning", f"Expected warning of type {error_type.__name__} but none was raised.")
40
+ COLLECTED_ERRORS = None
41
+
42
+
16
43
  #--------------------------------------------------
17
44
  # Typer
18
45
  #--------------------------------------------------
@@ -68,12 +95,18 @@ class Typer:
68
95
  replacer = Replacer(net)
69
96
  final = replacer.rewrite(node)
70
97
 
71
- # report any errors found during typing
98
+ # report any errors found during type inference
72
99
  if net.errors:
73
- for error in net.errors:
74
- error.report()
75
- if self.enforce:
76
- exc("TyperError", "Type errors detected during type inference.")
100
+ if COLLECTED_ERRORS is not None:
101
+ # collecting errors for tests, just add them to the list
102
+ COLLECTED_ERRORS.extend(net.errors)
103
+ # raise to avoid further processing
104
+ raise Exception("Typer errors collected.")
105
+ else:
106
+ for error in net.errors:
107
+ error.report()
108
+ if self.enforce:
109
+ exc("TyperError", "Type errors detected during type inference.")
77
110
  return final
78
111
 
79
112
 
@@ -146,10 +179,8 @@ class PropagationNetwork():
146
179
  # TODO - consider renaming this to UnresolvedReference
147
180
  self.errors.append(UnresolvedOverload(node, [self.resolve(a) for a in node.args]))
148
181
 
149
- def unresolved_type(self, node: Node):
150
- # TODO - this is not being used yet, we need a pass at the end to check for any node
151
- # that we could not resolve
152
- self.errors.append(UnresolvedType(node))
182
+ def unresolved_type(self, node: mm.Lookup|mm.Aggregate, arg: mm.Var):
183
+ self.errors.append(UnresolvedType(node, arg))
153
184
 
154
185
  def has_errors(self, node: Node) -> bool:
155
186
  for mismatch in self.errors:
@@ -264,7 +295,7 @@ class PropagationNetwork():
264
295
 
265
296
  # limit the number of iterations to avoid infinite loops
266
297
  i = 0
267
- max_iterations = 100 * len(self.edges)
298
+ max_iterations = 100 * (len(self.edges) + len(work_list))
268
299
 
269
300
  # propagate types until we reach a fixed point
270
301
  while work_list:
@@ -409,6 +440,9 @@ class PropagationNetwork():
409
440
  for field, field_type, arg in zip(relation.fields, resolved_fields, task.args):
410
441
  if not field.input and isinstance(arg, mm.Var):
411
442
  self.add_resolved_type(arg, field_type)
443
+ # this can be the way to learn the specialized number type for the field
444
+ if bt.is_abstract(field.type):
445
+ self.add_resolved_type(field, field_type)
412
446
 
413
447
  elif b.core.TypeVar in types:
414
448
  # this relation contains type vars, so we have to make sure that all args
@@ -446,13 +480,27 @@ class PropagationNetwork():
446
480
 
447
481
  else:
448
482
  # no typevar or number specialization shenanigans, just propagate field types to args
483
+ is_population_lookup = isinstance(relation, mm.TypeNode)
449
484
  for field, field_type, arg, arg_type in zip(relation.fields, resolved_fields, task.args, resolved_args):
450
- # add a resolved type if we learned more about the arg's type
451
- if isinstance(arg, mm.Var) and (bt.is_abstract(arg_type) or bt.extends(field_type, arg_type)):
452
- self.add_resolved_type(arg, field_type)
453
- elif not type_matches(arg_type, field_type) and not conversion_allowed(arg_type, field_type):
454
- self.type_mismatch(task, field_type, arg_type)
455
-
485
+ # if the arg does not match the declared field type, and cannot be converted into it, it's a mismatch
486
+ # note that we use the declared field type here, field.type, not the resolved field type, which may
487
+ # have been refined by updates
488
+ if not type_matches(arg_type, field.type, accept_expected_super_types=is_population_lookup) and not conversion_allowed(arg_type, field.type):
489
+ # if the field is an output and the arg is still abstract, we may be able to refine it later,
490
+ # as long as they are compatible, so skip reporting as it will come back later
491
+ # TODO - replace this with the analyzer reversing an edge for this case
492
+ if not field.input and bt.is_abstract(arg_type) and type_matches(field.type, arg_type, accept_expected_super_types=is_population_lookup) or conversion_allowed(field.type, arg_type):
493
+ continue
494
+ self.type_mismatch(task, field.type, arg_type)
495
+ elif isinstance(arg, mm.Var):
496
+ if bt.is_abstract(field_type) and bt.is_abstract(arg_type):
497
+ # if the resolved field type is still abstract, we cannot resolve the type of the arg
498
+ self.unresolved_type(task, arg)
499
+ elif bt.is_abstract(arg_type) or bt.extends(field_type, arg_type):
500
+ # we learned something about this arg, so store it
501
+ self.add_resolved_type(arg, field_type)
502
+ elif not type_matches(arg_type, field.type) and is_population_lookup:
503
+ self.add_resolved_type(arg, field_type)
456
504
 
457
505
  # we try to preserve types for relations that are functions (i.e. potentially multiple
458
506
  # input but a single output) and where all types are the same. However, there are some
@@ -526,7 +574,8 @@ class PropagationNetwork():
526
574
  if isinstance(x, mm.NumberType):
527
575
  if number is None or x.scale > number.scale or (x.scale == number.scale and x.precision > number.precision):
528
576
  number = x
529
- assert(number is not None)
577
+ if number is None:
578
+ number = b.core.DefaultNumber
530
579
  return number, [number if bt.is_number(t) else t for t in field_types]
531
580
 
532
581
 
@@ -642,10 +691,6 @@ class Analyzer(Walker):
642
691
  def analyze(self, node: mm.Node):
643
692
  self(node)
644
693
 
645
- # TODO - ignoring requires for now because the typing of constraints seems incorrect
646
- def enter_require(self, require: mm.Require):
647
- return NO_WALK
648
-
649
694
  def compute_potential_targets(self, relation: mm.Relation):
650
695
  # register potential targets for placeholders
651
696
  if bt.is_placeholder(relation):
@@ -729,8 +774,6 @@ class Replacer(Rewriter):
729
774
  #--------------------------------------------------
730
775
 
731
776
  def field(self, node: mm.Field):
732
- # TODO - this is only modifying the relation in the model, but then we have a new
733
- # relation there, which is different than the object referenced by tasks.
734
777
  if node in self.net.resolved_types:
735
778
  return mm.Field(node.name, self.net.resolved_types[node], node.input, _relation = node._relation)
736
779
  return node
@@ -1187,7 +1230,7 @@ class TypeMismatch(TyperError):
1187
1230
  actual: mm.Type
1188
1231
 
1189
1232
  def message(self) -> str:
1190
- return f"Expected {get_name(self.expected)}, got {get_name(self.actual)}"
1233
+ return f"Expected '{get_name(self.expected)}', got '{get_name(self.actual)}'"
1191
1234
 
1192
1235
  @dataclass
1193
1236
  class InvalidType(TyperError):
@@ -1204,10 +1247,11 @@ class UnresolvedOverload(TyperError):
1204
1247
  assert isinstance(self.node, (mm.Lookup, mm.Update, mm.Aggregate))
1205
1248
  rel = get_relation(self.node)
1206
1249
  types = ', '.join([get_name(t) for t in self.arg_types])
1207
- return f"Unresolved overload: {rel.name}({types})"
1250
+ return f"Unresolved overload: '{rel.name}({types})'"
1208
1251
 
1209
1252
  @dataclass
1210
1253
  class UnresolvedType(TyperError):
1254
+ arg: mm.Var
1211
1255
 
1212
1256
  def message(self) -> str:
1213
- return "Unable to determine concrete type."
1257
+ return f"Unable to determine concrete type for argument '{self.arg.name}'."
@@ -0,0 +1,11 @@
1
+ """
2
+ The RelationalAI Semantics Reasoners Module.
3
+ """
4
+
5
+ # Mark this package's docstrings for inclusion
6
+ # in automatically generated web documentation,
7
+ # by default as early access.
8
+ # TODO: Remove dependency on v0, once this functionality is supported.
9
+ from v0.relationalai.docutils import ProductStage
10
+ __include_in_docs__ = True
11
+ __rai_product_stage__ = ProductStage.EARLY_ACCESS
@@ -0,0 +1,38 @@
1
+ """
2
+ RelationalAI Graph Library
3
+ """
4
+
5
+ __version__ = "0.0.0"
6
+
7
+ import warnings
8
+ # TODO: Remove dependency on v0, once this functionality is supported.
9
+ from v0.relationalai.docutils import ProductStage
10
+ from .core import Graph
11
+
12
+ # Mark this package's docstrings for inclusion
13
+ # in automatically generated web documentation.
14
+ __include_in_docs__ = True
15
+ __rai_product_stage__ = ProductStage.EARLY_ACCESS
16
+
17
+ # Warn on import that this package is at an early stage of development,
18
+ # intended for internal consumers only, and ask those internal consumers
19
+ # to contact the symbolic reasoning team such that we can track usage,
20
+ # get feedback, and help folks through breaking changes.
21
+ warnings.warn(
22
+ (
23
+ "\n\nThis library is still in early stages of development and is intended "
24
+ "for internal use only. Among other considerations, interfaces will change, "
25
+ "and performance is appropriate only for exploring small graphs. Please "
26
+ "see this package's README for additional information.\n\n"
27
+ "If you are an internal user seeing this, please also contact "
28
+ "the symbolic reasoning team such that we can track usage, get "
29
+ "feedback, and help you through breaking changes.\n"
30
+ ),
31
+ FutureWarning,
32
+ stacklevel=2
33
+ )
34
+
35
+ # Finally make this package's core functionality publicly available.
36
+ __all__ = [
37
+ "Graph",
38
+ ]