relationalai 0.11.4__py3-none-any.whl → 0.12.0__py3-none-any.whl

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 (31) hide show
  1. relationalai/clients/config.py +7 -0
  2. relationalai/clients/direct_access_client.py +113 -0
  3. relationalai/clients/snowflake.py +35 -106
  4. relationalai/early_access/metamodel/rewrite/__init__.py +5 -3
  5. relationalai/early_access/rel/rewrite/__init__.py +1 -1
  6. relationalai/errors.py +24 -3
  7. relationalai/semantics/internal/annotations.py +1 -0
  8. relationalai/semantics/lqp/builtins.py +1 -0
  9. relationalai/semantics/lqp/passes.py +3 -4
  10. relationalai/semantics/{rel → lqp}/rewrite/__init__.py +6 -0
  11. relationalai/semantics/metamodel/builtins.py +12 -1
  12. relationalai/semantics/metamodel/rewrite/__init__.py +3 -9
  13. relationalai/semantics/reasoners/graph/core.py +221 -71
  14. relationalai/semantics/rel/builtins.py +5 -1
  15. relationalai/semantics/rel/compiler.py +3 -3
  16. relationalai/semantics/sql/compiler.py +2 -3
  17. relationalai/semantics/sql/executor/duck_db.py +8 -4
  18. relationalai/tools/cli.py +11 -4
  19. {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/METADATA +5 -4
  20. {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/RECORD +29 -30
  21. relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -58
  22. relationalai/semantics/metamodel/rewrite/list_types.py +0 -109
  23. /relationalai/semantics/{rel → lqp}/rewrite/cdc.py +0 -0
  24. /relationalai/semantics/{rel → lqp}/rewrite/extract_common.py +0 -0
  25. /relationalai/semantics/{metamodel → lqp}/rewrite/extract_keys.py +0 -0
  26. /relationalai/semantics/{metamodel → lqp}/rewrite/fd_constraints.py +0 -0
  27. /relationalai/semantics/{rel → lqp}/rewrite/quantify_vars.py +0 -0
  28. /relationalai/semantics/{metamodel → lqp}/rewrite/splinter.py +0 -0
  29. {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/WHEEL +0 -0
  30. {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/entry_points.txt +0 -0
  31. {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/licenses/LICENSE +0 -0
@@ -6,13 +6,13 @@ from decimal import Decimal as PyDecimal
6
6
  from relationalai.semantics.metamodel import ir, compiler as c, builtins as bt, types, visitor, helpers, factory as f
7
7
  from relationalai.semantics.metamodel.typer import Checker, InferTypes
8
8
  from relationalai.semantics.metamodel.typer.typer import to_base_primitive, to_type, _NON_PARAMETRIC_PRIMITIVES
9
- from relationalai.semantics.metamodel.rewrite import (Flatten, ExtractKeys, FDConstraints, Splinter,
10
- ExtractNestedLogicals, DNFUnionSplitter, DischargeConstraints)
11
9
  from relationalai.semantics.metamodel.visitor import ReadWriteVisitor
12
10
  from relationalai.semantics.metamodel.util import OrderedSet, group_by, NameCache, ordered_set
13
11
 
14
12
  from relationalai.semantics.rel import rel, rel_utils as u, builtins as rel_bt
15
- from relationalai.semantics.rel.rewrite import CDC, QuantifyVars, ExtractCommon
13
+
14
+ from ..metamodel.rewrite import (Flatten, ExtractNestedLogicals, DNFUnionSplitter, DischargeConstraints)
15
+ from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys, FDConstraints, QuantifyVars, Splinter
16
16
 
17
17
  import math
18
18
 
@@ -11,7 +11,7 @@ from decimal import Decimal as PyDecimal
11
11
 
12
12
  import math
13
13
 
14
- from relationalai.semantics.metamodel.rewrite import (Flatten, ExtractNestedLogicals, FDConstraints, DNFUnionSplitter,
14
+ from relationalai.semantics.metamodel.rewrite import (Flatten, ExtractNestedLogicals, DNFUnionSplitter,
15
15
  DischargeConstraints)
16
16
  from relationalai.semantics.metamodel.visitor import ReadWriteVisitor
17
17
  from relationalai.util.graph import topological_sort
@@ -28,7 +28,6 @@ from relationalai.semantics.sql import sql, rewrite
28
28
  class Compiler(c.Compiler):
29
29
  def __init__(self, skip_denormalization:bool=False):
30
30
  rewrites = [
31
- FDConstraints(),
32
31
  DischargeConstraints(),
33
32
  Checker(),
34
33
  ExtractNestedLogicals(), # before InferTypes to avoid extracting casts
@@ -2495,4 +2494,4 @@ class DerivedRelationsVisitor(v.Visitor):
2495
2494
 
2496
2495
  def visit_relation(self, node: ir.Relation, parent: Optional[ir.Node]):
2497
2496
  if self._is_derived and from_cdc_annotation in node.annotations:
2498
- self._is_derived = False
2497
+ self._is_derived = False
@@ -8,7 +8,7 @@ from scipy.special import erfinv as special_erfinv
8
8
 
9
9
  from relationalai.semantics.sql import Compiler
10
10
  from relationalai.semantics.sql.executor.result_helpers import format_duckdb_columns
11
- from relationalai.semantics.metamodel import ir, executor as e
11
+ from relationalai.semantics.metamodel import ir, executor as e, factory as f
12
12
 
13
13
  class DuckDBExecutor(e.Executor):
14
14
 
@@ -29,8 +29,12 @@ class DuckDBExecutor(e.Executor):
29
29
  connection.create_function("erfinv", self.erfinv)
30
30
 
31
31
  try:
32
- sql, _ = self.compiler.compile(model, {"is_duck_db": True})
33
- arrow_table = connection.query(sql).fetch_arrow_table()
32
+ model_sql, _ = self.compiler.compile(model, {"is_duck_db": True})
33
+ query_options = {"is_duck_db": True, "query_compilation": True}
34
+ query_sql, _ = self.compiler.compile(f.compute_model(f.logical([task])), query_options)
35
+
36
+ full_sql = model_sql + "\n" + query_sql
37
+ arrow_table = connection.query(full_sql).fetch_arrow_table()
34
38
  return format_duckdb_columns(arrow_table.to_pandas(), arrow_table.schema)
35
39
  finally:
36
40
  connection.close()
@@ -45,4 +49,4 @@ class DuckDBExecutor(e.Executor):
45
49
 
46
50
  @staticmethod
47
51
  def acot(x: float) -> float:
48
- return math.atan(1 / x) if x != 0 else math.copysign(math.pi / 2, x)
52
+ return math.atan(1 / x) if x != 0 else math.copysign(math.pi / 2, x)
relationalai/tools/cli.py CHANGED
@@ -16,8 +16,10 @@ from InquirerPy.base.control import Choice
16
16
  from relationalai.clients.util import IdentityParser
17
17
  from .cli_controls import divider, Spinner
18
18
  from . import cli_controls as controls
19
- from relationalai.clients import azure
20
- from typing import Sequence, cast, Any, List
19
+ from typing import Sequence, cast, Any, List, TYPE_CHECKING
20
+
21
+ if TYPE_CHECKING:
22
+ from relationalai.clients import azure
21
23
  from relationalai.errors import RAIException
22
24
  from relationalai.loaders.types import LoadType, UnsupportedTypeError
23
25
  from relationalai.loaders.csv import CSVLoader
@@ -1150,9 +1152,14 @@ def import_source_flow(provider: ResourcesBase) -> Sequence[ImportSource]:
1150
1152
 
1151
1153
  if isinstance(provider, snowflake.Resources):
1152
1154
  return snowflake_import_source_flow(provider)
1153
- elif isinstance(provider, azure.Resources):
1154
- return azure_import_source_flow(provider)
1155
1155
  else:
1156
+ # Lazy import for azure to avoid optional dependency issues
1157
+ try:
1158
+ from relationalai.clients import azure
1159
+ if isinstance(provider, azure.Resources):
1160
+ return azure_import_source_flow(provider)
1161
+ except ImportError:
1162
+ pass
1156
1163
  raise Exception(f"No import source flow available for {provider_type.__module__}.{provider_type.__name__}")
1157
1164
 
1158
1165
  def snowflake_import_source_flow(provider: snowflake.Resources) -> Sequence[ImportSource]:
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.11.4
3
+ Version: 0.12.0
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
7
- Requires-Python: >=3.9
7
+ Requires-Python: >=3.10
8
8
  Requires-Dist: aiohttp
9
- Requires-Dist: click<=8.1.8
9
+ Requires-Dist: click==8.2.1
10
10
  Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
@@ -21,7 +21,6 @@ Requires-Dist: packaging
21
21
  Requires-Dist: pandas
22
22
  Requires-Dist: pyarrow
23
23
  Requires-Dist: pyjwt
24
- Requires-Dist: rai-sdk>=0.7.5
25
24
  Requires-Dist: requests
26
25
  Requires-Dist: rich
27
26
  Requires-Dist: snowflake-connector-python[secure-local-storage]
@@ -64,6 +63,8 @@ Requires-Dist: parameterized; extra == 'ea'
64
63
  Requires-Dist: pysmt; extra == 'ea'
65
64
  Requires-Dist: simple-ddl-parser; extra == 'ea'
66
65
  Requires-Dist: xmltodict; extra == 'ea'
66
+ Provides-Extra: legacy
67
+ Requires-Dist: rai-sdk>=0.7.5; extra == 'legacy'
67
68
  Description-Content-Type: text/markdown
68
69
 
69
70
  # The RelationalAI Python Library
@@ -4,7 +4,7 @@ relationalai/debugging.py,sha256=dfT0gEDpL56GflVmtUrYVbYcVcZmQL26Vf_F8cI1QKY,118
4
4
  relationalai/dependencies.py,sha256=tL113efcISkJUiDXYHmRdU_usdD7gmee-VRHA7N4EFA,16574
5
5
  relationalai/docutils.py,sha256=1gVv9mk0ytdMB2W7_NvslJefmSQtTOg8LHTCDcGCjyE,1554
6
6
  relationalai/dsl.py,sha256=pvwH12zLvyumn8jRpkb57KkBPLrLkp5vnDdN5kBO388,66099
7
- relationalai/errors.py,sha256=4v-J91SfsgowPaU7xssJC8t1VFs1TlJGuIN378itoLE,94019
7
+ relationalai/errors.py,sha256=ERyVg5SJd3O689QSnp-rtbBCLUB3Bbcp5VgkRX1HZzg,94948
8
8
  relationalai/metagen.py,sha256=o10PNvR_myr_61DC8g6lkB093bFo9qXGUkZKgKyfXiE,26821
9
9
  relationalai/metamodel.py,sha256=P1hliwHd1nYxbXON4LZeaYZD6T6pZm97HgmFBFrWyCk,32886
10
10
  relationalai/rel.py,sha256=ePmAXx4NxOdsPcHNHyGH3Jkp_cB3QzfKu5p_EQSHPh0,38293
@@ -22,12 +22,13 @@ relationalai/clients/__init__.py,sha256=0c_oqvpVN7pccc6q8fw11zSOVK-utlRTmd1ECjgM
22
22
  relationalai/clients/azure.py,sha256=6tYHxKVN2fHMIDV7J_EHZD9WntkYh2IreMRMqlq1Bhg,20634
23
23
  relationalai/clients/cache_store.py,sha256=A-qd11wcwN3TkIqvlN0_iFUU3aEjJal3T2pqFBwkkzQ,3966
24
24
  relationalai/clients/client.py,sha256=4SSunUwuFEcRFXOPYotpSLDPr0CKuwJ4335W0DesR90,35792
25
- relationalai/clients/config.py,sha256=aerlAhg6DWICa4AUwetgsYKXUWiyEyymnHTIWAN2sAE,24087
25
+ relationalai/clients/config.py,sha256=hERaKjc3l4kd-kf0l-NUOHrWunCn8gmFWpuE0j3ScJg,24457
26
+ relationalai/clients/direct_access_client.py,sha256=uDML4nFTctvvya4GFWoef2oirlWHiRugn5qBk9fxH9k,5961
26
27
  relationalai/clients/export_procedure.py.jinja,sha256=nhvVcs5hQyWExFDuROQbi1VyYzOCa_ZIRPR2KzZwDtI,10582
27
28
  relationalai/clients/hash_util.py,sha256=pZVR1FX3q4G_19p_r6wpIR2tIM8_WUlfAR7AVZJjIYM,1495
28
29
  relationalai/clients/profile_polling.py,sha256=pUH7WKH4nYDD0SlQtg3wsWdj0K7qt6nZqUw8jTthCBs,2565
29
30
  relationalai/clients/result_helpers.py,sha256=wDSD02Ngx6W-YQqBIGKnpXD4Ju3pA1e9Nz6ORRI6SRI,17808
30
- relationalai/clients/snowflake.py,sha256=lfMwypFnsw18ZG4ixOCuEqZwf0lvvthk4pPtj97pZNE,155717
31
+ relationalai/clients/snowflake.py,sha256=zO9mVSCrLbjWwu0PIp3cZimDF9nxvU4mgp5AImeSA0c,151653
31
32
  relationalai/clients/types.py,sha256=z33RlnXFml-aVAtZ1pJsbixrGnlPfhkAjZXM_ySZGuY,2776
32
33
  relationalai/clients/use_index_poller.py,sha256=rQaHmlNLYDQ4NJh3i6CVAS1XxUjazwzTv-OiacrldGI,44662
33
34
  relationalai/clients/util.py,sha256=3iLY5DgUkQcRAPXrvP4xdIYZtc3trrryy5jfX2QAFEA,12014
@@ -178,7 +179,7 @@ relationalai/early_access/metamodel/dependency/__init__.py,sha256=bkrnbq8aRMwCPD
178
179
  relationalai/early_access/metamodel/factory/__init__.py,sha256=_boK2qJ4v_JVFn4OelJx3GTA3X48Yc5yCxq_DxG6fUs,946
179
180
  relationalai/early_access/metamodel/helpers/__init__.py,sha256=bkEbkPFhvcVhnwRAAJxEUMWlI5r3iYuyTIDINfY1frs,320
180
181
  relationalai/early_access/metamodel/ir/__init__.py,sha256=1oJzbPkQrRf5Cng51u1rZUa_sxIzSaSE4m6pvnHTUfE,571
181
- relationalai/early_access/metamodel/rewrite/__init__.py,sha256=57_5cY6vlCdwtGGWS9K-JrhOkwEsXfwYAVJrxsHc1Fc,371
182
+ relationalai/early_access/metamodel/rewrite/__init__.py,sha256=TH1FykUuhb34Gd06klxhGvAqfpIB4ZhuHBSXOMeOhsI,342
182
183
  relationalai/early_access/metamodel/typer/__init__.py,sha256=va6-xIBBh3B28O5JEUeXsu38FcZPTDTQuym4BDrshmw,123
183
184
  relationalai/early_access/metamodel/typer/typer/__init__.py,sha256=gUfw_Zkk_wq1iycTp7yrOxpZJs5GctvsLmatlmKlcFM,432
184
185
  relationalai/early_access/metamodel/types/__init__.py,sha256=M7KDNQyO7uA_p_U_IRT3jYaOzhVVDm5MBjgQdxZqWsY,741
@@ -202,7 +203,7 @@ relationalai/early_access/paths/utilities/iterators/__init__.py,sha256=HRO3elGRr
202
203
  relationalai/early_access/rel/__init__.py,sha256=1Uf_eHjZcUZvaFoQ1nmMIcth4icRLxM3WsvCf99_Fj0,290
203
204
  relationalai/early_access/rel/executor/__init__.py,sha256=viY7VTCVe3GVOpHlnVhrlXYDIAeIA01BcxtLtiaRaqI,285
204
205
  relationalai/early_access/rel/rel_utils/__init__.py,sha256=FS5qahNNxiqev6DG0f66MaCnPuneWEysFAOZTWHwvL8,298
205
- relationalai/early_access/rel/rewrite/__init__.py,sha256=pe8wuwhqACG427DWJm7ch10QChpkgZEIMemF3d6fqvA,147
206
+ relationalai/early_access/rel/rewrite/__init__.py,sha256=gA0aPFs1BYV8Pc_FJejjjAEIB3lA8JpCQGTWDz1mhd4,147
206
207
  relationalai/early_access/solvers/__init__.py,sha256=Ix9cRdW_glqtGkk3KyH5sJIR3X4yauVDSH_JlPrMYBQ,447
207
208
  relationalai/early_access/sql/__init__.py,sha256=B2L23yTW-kYMk52zPvCo_D2XD22vZFdJm1iBnuliEec,267
208
209
  relationalai/early_access/sql/executor/__init__.py,sha256=yyt8dxigsUvfRVOPV2rW2QrbHiUK750Dil1IIY3Y3B8,132
@@ -254,26 +255,33 @@ relationalai/semantics/devtools/benchmark_lqp.py,sha256=btySKVtUUNBuPY-l6DrkbRNl
254
255
  relationalai/semantics/devtools/compilation_manager.py,sha256=XBqG_nYWtK3s_J6MeCmkLqy3qm7l778zDAhH7DEO91g,11169
255
256
  relationalai/semantics/devtools/extract_lqp.py,sha256=gxI3EvPUTPAkwgnkCKAkEm2vA6QkLfoM8AXXiVz0c34,3696
256
257
  relationalai/semantics/internal/__init__.py,sha256=JXrpFaL-fdZrvKpWTEn1UoLXITOoTGnAYwmgeiglhSk,774
257
- relationalai/semantics/internal/annotations.py,sha256=NuOcaca6H8osWqJAwe9nxezu10X2sPV7ti7iROAxiBM,267
258
+ relationalai/semantics/internal/annotations.py,sha256=P_nRpBm4wLmE_8L0VO3TDORL1p2flXaPOVDC0GG7KsQ,306
258
259
  relationalai/semantics/internal/internal.py,sha256=5Wf0XitUqWo0j30aRTtkQ6KKsBDmD3mklLitpPSzB90,148333
259
260
  relationalai/semantics/internal/snowflake.py,sha256=DR6rgbPawen2ZOFegRuPkXt8aQUfciiCYzDI74u1Iwc,13036
260
261
  relationalai/semantics/lqp/__init__.py,sha256=XgcQZxK-zz_LqPDVtwREhsIvjTuUIt4BZhIedCeMY-s,48
261
- relationalai/semantics/lqp/builtins.py,sha256=N1hJwyvwgFvBbt2X7-4U-Pq1LVOYV-zAUeSqS39OZcQ,515
262
+ relationalai/semantics/lqp/builtins.py,sha256=bRmQ6fdceWU-4xf4l-W-YiuyDxJTPey1s6O4xlyW6iM,540
262
263
  relationalai/semantics/lqp/compiler.py,sha256=Nury1gPw_-Oi_mqT1-rhr13L4UmyIP2BGuotbuklQKA,949
263
264
  relationalai/semantics/lqp/constructors.py,sha256=8U4eUL8-m1wYRQnws_YWC1coGquTugVH5YC0Zek6VT8,2309
264
265
  relationalai/semantics/lqp/executor.py,sha256=At0IdBlNlOM0E533V0urRgeIkfbv-pPWuQ_sfRkKqPQ,18926
265
266
  relationalai/semantics/lqp/intrinsics.py,sha256=Pb1mLIme7Q-5Y-CVacUOEvapfhKs076bgtRNi3f0ayY,833
266
267
  relationalai/semantics/lqp/ir.py,sha256=DUw0ltul0AS9CRjntNlmllWTwXpxMyYg4iJ9t7NFYMA,1791
267
268
  relationalai/semantics/lqp/model2lqp.py,sha256=L63A2ECLiLTbUoZB7wTB2dP0ahUAA-8WhxiddVO2znQ,31647
268
- relationalai/semantics/lqp/passes.py,sha256=TBsYmWYh4qZtKzlSiZcJJDt3-Bwl_wRv0c9L8P2H1fE,27683
269
+ relationalai/semantics/lqp/passes.py,sha256=nLppoHvIQkGP6VuG56OAZ1oOrYhEqpR_0w91gfJ7t_s,27540
269
270
  relationalai/semantics/lqp/pragmas.py,sha256=FzzldrJEAZ1AIcEw6D-FfaVg3CoahRYgPCFo7xHfg1g,375
270
271
  relationalai/semantics/lqp/primitives.py,sha256=Gbh6cohoAArhqEJTN_TgIRc7wmtdxXt231NRW0beEj0,10898
271
272
  relationalai/semantics/lqp/result_helpers.py,sha256=oYpLoTBnzsiyOVIWA2rLMHlgs7P7BoEkqthQ2aMosnk,10123
272
273
  relationalai/semantics/lqp/types.py,sha256=3TZ61ybwNV8lDyUMujZIWNFz3Fgn4uifsJb8ExfoMDg,4508
273
274
  relationalai/semantics/lqp/utils.py,sha256=x8dcfVoyqzCznNFtI4qSNSL-vWcdxzC-QrnFJlAARXs,6121
274
275
  relationalai/semantics/lqp/validators.py,sha256=YO_ciSgEVNILWUbkxIagKpIxI4oqV0fRSTO2Ok0rPJk,1526
276
+ relationalai/semantics/lqp/rewrite/__init__.py,sha256=NQMkrZMUrLksScGXs0EiZTT-In5VltvswfeB4kCkeZM,337
277
+ relationalai/semantics/lqp/rewrite/cdc.py,sha256=I6DeMOZScx-3UAVoSCMn9cuOgLzwdvJVKNwsgFa6R_k,10390
278
+ relationalai/semantics/lqp/rewrite/extract_common.py,sha256=TY4wYhMy6bbKC9YZqrBeQgaZ41Sf4BCI3Zy26yavgAM,17301
279
+ relationalai/semantics/lqp/rewrite/extract_keys.py,sha256=dSr5SVkYmrhiR0XPY5eRAnWD66dcZYgXdilXcERv634,18682
280
+ relationalai/semantics/lqp/rewrite/fd_constraints.py,sha256=a4jetchlOfm2rb3QD0Nil0bvermpBx1up7p1uNgcJHg,3503
281
+ relationalai/semantics/lqp/rewrite/quantify_vars.py,sha256=wYMEXzCW_D_Y_1rSLvuAAqw9KN1oIOn_vIMxELzRVb4,11568
282
+ relationalai/semantics/lqp/rewrite/splinter.py,sha256=oeDjP_F2PVLVexAKFn8w7CLtO9oy-R-tS2IOmzw_Ujk,3199
275
283
  relationalai/semantics/metamodel/__init__.py,sha256=I-XqQAGycD0nKkKYvnF3G9d0QK_1LIM4xXICw8g8fBA,805
276
- relationalai/semantics/metamodel/builtins.py,sha256=0NIy94ay2-Yy0tvL750kRLoavyjnwARdmn07hn6LDFs,35310
284
+ relationalai/semantics/metamodel/builtins.py,sha256=EOOi3AjeF5uyYVjie0WhpVTVatEK3zWyBvggStH1aGo,35897
277
285
  relationalai/semantics/metamodel/compiler.py,sha256=XBsAnbFwgZ_TcRry6yXGWLyw_MaO2WJDp1EnC_ubhps,4525
278
286
  relationalai/semantics/metamodel/dataflow.py,sha256=wfj1tARrR4yEAaTwUTrAcxEcz81VkUal4U_AX1esovk,3929
279
287
  relationalai/semantics/metamodel/dependency.py,sha256=YU-nTm9Hq6ufkwoA5D1iPciGw7WW6Hk4Cyq0EQbkl2s,32845
@@ -284,23 +292,18 @@ relationalai/semantics/metamodel/ir.py,sha256=4Xl3oc92Q7_s33axtrZUXr-GL8VGJsKc7y
284
292
  relationalai/semantics/metamodel/types.py,sha256=m3NolF3B_fBSnkQKA9o1feEawaW7RhR-t6W9OSxSFfc,11492
285
293
  relationalai/semantics/metamodel/util.py,sha256=cmSmeww34JVMqcFudwVAY820IPM2ETSELJylwJ3GRJk,16654
286
294
  relationalai/semantics/metamodel/visitor.py,sha256=DFY0DACLhxlZ0e4p0vWqbK6ZJr_GWEvH66CU_HVuoTk,35527
287
- relationalai/semantics/metamodel/rewrite/__init__.py,sha256=iKg1YsWjWhY9UpmQt0nHJjSto_kMD9bN1vLdfblyP_c,577
295
+ relationalai/semantics/metamodel/rewrite/__init__.py,sha256=aPgZuRGpULwPVWtENUEHmGBSNAEsxz1i0t257IOCO-E,285
288
296
  relationalai/semantics/metamodel/rewrite/discharge_constraints.py,sha256=0v613BqCLlo4sgWuZjcLSxxakp3d34mYWbG4ldhzGno,1949
289
297
  relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py,sha256=dlyD868Pg424BLowY4A0gOmSziSy1U-dYGXZEE3SW8E,7956
290
- relationalai/semantics/metamodel/rewrite/extract_keys.py,sha256=dSr5SVkYmrhiR0XPY5eRAnWD66dcZYgXdilXcERv634,18682
291
298
  relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py,sha256=mzZLsu4pYWzRUScAgmWQ58WYVW30Sst7xMJteoSxm-4,3629
292
- relationalai/semantics/metamodel/rewrite/fd_constraints.py,sha256=a4jetchlOfm2rb3QD0Nil0bvermpBx1up7p1uNgcJHg,3503
293
299
  relationalai/semantics/metamodel/rewrite/flatten.py,sha256=B-LH9OApak7Cst7bcVWzKZcgI0fuTDTBprXJ0AL7q6w,28448
294
- relationalai/semantics/metamodel/rewrite/gc_nodes.py,sha256=5_hXEk-Gg2E2bmE56wATcaZ7nIHfp5BsqkVEyCU-r3I,2090
295
- relationalai/semantics/metamodel/rewrite/list_types.py,sha256=RBmi0iWMaADjbqptV0W7P9ncmZFqCSDMKmWxKuS9Mh0,4454
296
- relationalai/semantics/metamodel/rewrite/splinter.py,sha256=oeDjP_F2PVLVexAKFn8w7CLtO9oy-R-tS2IOmzw_Ujk,3199
297
300
  relationalai/semantics/metamodel/typer/__init__.py,sha256=E3ydmhWRdm-cAqWsNR24_Qd3NcwiHx8ElO2tzNysAXc,143
298
301
  relationalai/semantics/metamodel/typer/checker.py,sha256=frY0gilDO6skbDiYFiIpDUOWyt9s9jAJsRBs848DcG0,19184
299
302
  relationalai/semantics/metamodel/typer/typer.py,sha256=jBo0CwY6G0qKBzqoAmQ09dPtcPDHvCiutolnwbV4gus,62294
300
303
  relationalai/semantics/reasoners/__init__.py,sha256=Tu4U26rrkBIzAk3a4tXRJaeD5mAtK9Z7JXh2c6VJ-J4,249
301
304
  relationalai/semantics/reasoners/graph/README.md,sha256=QgKEXTllp5PO-yK8oDfMx1PNTYF2uVoneMRKsWTY5GU,23953
302
305
  relationalai/semantics/reasoners/graph/__init__.py,sha256=jSXR6J05SQZdjxQ5Y-ovqFqGTAXCOWeQDcvpfoBYgDA,1282
303
- relationalai/semantics/reasoners/graph/core.py,sha256=pdjfEUlPtX3rbVObqG9RuhUckaFSkUym-cmZmmxrPpc,262065
306
+ relationalai/semantics/reasoners/graph/core.py,sha256=RjzjbQcRptK0F9WfRO9a4XBpoxa7AT_opJjnpzJb-uU,270731
304
307
  relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md,sha256=Givh0W6B6Hlow6TpmK-8adpEYd8b3O_WmdgMOQIyKs0,55749
305
308
  relationalai/semantics/reasoners/graph/paths/README.md,sha256=ydm6CzMN_vOOgq7a6_hBCiyGi3D6g5gxAbf4OXbQbDE,3433
306
309
  relationalai/semantics/reasoners/graph/paths/__init__.py,sha256=oCoDJVg4moGe0tNMNeRn7XQqa1AIEZGlxAiaD5bBahg,211
@@ -371,21 +374,17 @@ relationalai/semantics/reasoners/optimization/common.py,sha256=TVa9n9n97BwfMyYOT
371
374
  relationalai/semantics/reasoners/optimization/solvers_dev.py,sha256=BjFcEfmqmdxM6jnd34pt1AlkrdwHd_HapqpB2oIvNP4,24142
372
375
  relationalai/semantics/reasoners/optimization/solvers_pb.py,sha256=ryNARpyph3uvr1dhWb7pNU3uuxuL1FLZZiTqFcr3Xf8,22148
373
376
  relationalai/semantics/rel/__init__.py,sha256=pMlVTC_TbQ45mP1LpzwFBBgPxpKc0H3uJDvvDXEWzvs,55
374
- relationalai/semantics/rel/builtins.py,sha256=bLMX4pJ62J62qn-TX5WQWl3Nhhy6q9Zz827pY3ihaBc,1286
375
- relationalai/semantics/rel/compiler.py,sha256=9d0-75t08vkdS5n3wvyCN68qlxVywIZ8JD7sph4f5LM,42298
377
+ relationalai/semantics/rel/builtins.py,sha256=qu4yZvLovn4Vn2x44D4XugqGD6Qo5xLxj_RKA34cpF4,1527
378
+ relationalai/semantics/rel/compiler.py,sha256=hiLIaZzhVU5VMtU6rdo3tH2pmKMEtXvh6AHh94CvRAg,42203
376
379
  relationalai/semantics/rel/executor.py,sha256=BcQUJht5G2so2Af9GszLBTK90LqFUmv3gshRGFeiG-s,14943
377
380
  relationalai/semantics/rel/rel.py,sha256=9I_V6dQ83QRaLzq04Tt-KjBWhmNxNO3tFzeornBK4zc,15738
378
381
  relationalai/semantics/rel/rel_utils.py,sha256=F14Ch8mn45J8SmM7HZnIHUNqDnb3WQLnkEGLme04iBk,9386
379
- relationalai/semantics/rel/rewrite/__init__.py,sha256=Ke85L9DMO_d6qQbjb17k_LoMqar8-vOHKmxHGynIh3s,170
380
- relationalai/semantics/rel/rewrite/cdc.py,sha256=I6DeMOZScx-3UAVoSCMn9cuOgLzwdvJVKNwsgFa6R_k,10390
381
- relationalai/semantics/rel/rewrite/extract_common.py,sha256=TY4wYhMy6bbKC9YZqrBeQgaZ41Sf4BCI3Zy26yavgAM,17301
382
- relationalai/semantics/rel/rewrite/quantify_vars.py,sha256=wYMEXzCW_D_Y_1rSLvuAAqw9KN1oIOn_vIMxELzRVb4,11568
383
382
  relationalai/semantics/snowflake/__init__.py,sha256=BW_zvPQBWGTAtY6cluG6tDDG-QmU_jRb-F7PeCpDhIU,134
384
383
  relationalai/semantics/sql/__init__.py,sha256=59uuKmQOFUzwlYwc7anSuwhQ45bJTYVmd9nOJXr9mQs,80
385
- relationalai/semantics/sql/compiler.py,sha256=4NeOp4YnMZz25IfLpPeEWL1iO46y8h2D0HW05d4RY4A,128816
384
+ relationalai/semantics/sql/compiler.py,sha256=BcvEIjcD9SVkTtTvDIw-yjeC3dE5dv01P3Ohd7HCNxo,128773
386
385
  relationalai/semantics/sql/sql.py,sha256=7nUnm0RbHlOGSGQbnFrgzPYdmnoppifQ5jylR5Wtgcc,17122
387
386
  relationalai/semantics/sql/executor/__init__.py,sha256=F3HqQPJVP9wgV3rkwI5jy1_QBCD_3qj2IGxbdT_pX9k,120
388
- relationalai/semantics/sql/executor/duck_db.py,sha256=pS_93nV5vKPnjkK62fc0YHHFdRyBEHlXe_Y4H2zB6lQ,1654
387
+ relationalai/semantics/sql/executor/duck_db.py,sha256=laI0jquMNNhj1pcFlaqxYAvvnCmSuvzzkibfjMz7liY,1909
389
388
  relationalai/semantics/sql/executor/result_helpers.py,sha256=kVfspHHuzyq4SNklrtvhYte1wqRFzct-dAKin_lOmR4,3215
390
389
  relationalai/semantics/sql/executor/snowflake.py,sha256=GMfeutObRWOUnH5UVflHZgFxn-soUtjTky37daBtBi4,5825
391
390
  relationalai/semantics/sql/rewrite/__init__.py,sha256=AT1WR0rqQHQ7E06NLoVym0zrZpBVPqK85uRFNJUTDp4,254
@@ -419,7 +418,7 @@ relationalai/std/re.py,sha256=7B0dPaYyEdIlEgZfDzs7HJ_MTqccYTfIZieqst6MHbk,4457
419
418
  relationalai/std/strings.py,sha256=vHvex_W5GHhhsVws6Dfyl4w1EHdbDE3nPjT09DnpvSE,4260
420
419
  relationalai/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
421
420
  relationalai/tools/cleanup_snapshots.py,sha256=s1q1ophi1RmiTZ9QQolQ6q1K9ZwseCaOuDtI1Rm99MQ,3434
422
- relationalai/tools/cli.py,sha256=k7r1VG9YiY3o8ZqgEhWI2naYyMzKyJ2gR-KAL-vfzIs,76195
421
+ relationalai/tools/cli.py,sha256=MophMqK-_sw0LYNuNH0L-wCmEmAN49bvf_Fvb7JZKoI,76424
423
422
  relationalai/tools/cli_controls.py,sha256=6k2nu6km9IYGDwG7pSZGBXrEN64Ehw0tamKgcPotZoM,71822
424
423
  relationalai/tools/cli_helpers.py,sha256=r-gJnWnb3d6yIn_ccyp3qx_Vpqh-FINCFMyPBVCA-Jg,14041
425
424
  relationalai/tools/constants.py,sha256=mDdWelpf-u9tb0tspFgq8V0fCxLSzbS0Hl9WGJMJa_4,4417
@@ -453,8 +452,8 @@ frontend/debugger/dist/index.html,sha256=0wIQ1Pm7BclVV1wna6Mj8OmgU73B9rSEGPVX-Wo
453
452
  frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png,sha256=tPXOEhOrM4tJyZVJQVBO_yFgNAlgooY38ZsjyrFstgg,620
454
453
  frontend/debugger/dist/assets/index-Cssla-O7.js,sha256=MxgIGfdKQyBWgufck1xYggQNhW5nj6BPjCF6Wleo-f0,298886
455
454
  frontend/debugger/dist/assets/index-DlHsYx1V.css,sha256=21pZtAjKCcHLFjbjfBQTF6y7QmOic-4FYaKNmwdNZVE,60141
456
- relationalai-0.11.4.dist-info/METADATA,sha256=B3VzqLxv4_NTOySacfpH2EgQmwYc5yFOhojNgkKXego,2519
457
- relationalai-0.11.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
458
- relationalai-0.11.4.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
459
- relationalai-0.11.4.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
460
- relationalai-0.11.4.dist-info/RECORD,,
455
+ relationalai-0.12.0.dist-info/METADATA,sha256=2VPdNMd0QUh5hrmUIpaU7YijfeRP68L3cjUaUwAftJI,2562
456
+ relationalai-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
457
+ relationalai-0.12.0.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
458
+ relationalai-0.12.0.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
459
+ relationalai-0.12.0.dist-info/RECORD,,
@@ -1,58 +0,0 @@
1
- """
2
- Garbage collection pass that removes unused types and relations from the model.
3
- """
4
- from dataclasses import dataclass, field
5
-
6
- from relationalai.semantics.metamodel import ir, visitor, compiler
7
- from relationalai.semantics.metamodel.util import FrozenOrderedSet
8
-
9
- @dataclass
10
- class GarbageCollectNodes(compiler.Pass):
11
- """
12
- A pass that removes unused types and relations from the model.
13
- """
14
-
15
- # TODO: Since sometimes models don't initially have the correct set of relations,
16
- # we sometimes actually end up /adding/ relations to the model here.
17
-
18
- # Flags to determine which nodes to gargbage collect
19
- # By default, we only garbage collect types and relations
20
- types: bool = field(default=True)
21
- relations: bool = field(default=True)
22
-
23
- @staticmethod
24
- def used_relations(model, engines) -> FrozenOrderedSet[ir.Relation]:
25
- return visitor.collect_by_type(ir.Relation, *engines, model.root, *model.annotations).frozen()
26
-
27
- @staticmethod
28
- def used_types(model, engines, relations) -> FrozenOrderedSet[ir.Type]:
29
- return visitor.collect_by_type(ir.Type, *engines, *relations, model.root, *model.annotations).frozen()
30
-
31
- def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
32
- gc_types = self.types
33
- gc_relations = self.relations
34
-
35
- # No flags set, nothing to GC
36
- if not gc_relations and not gc_types:
37
- return model
38
-
39
- engines = model.engines
40
- relations = model.relations
41
- types = model.types
42
-
43
- # Note that engines and relations are mutually dependent. If we were to also GC engines,
44
- # then we would need to iterate until we reach a fixed point.
45
- if gc_relations:
46
- relations = self.used_relations(model, engines)
47
-
48
- # Types are independent of engines and relations, so we can just collect them last
49
- if gc_types:
50
- types = self.used_types(model, engines, relations)
51
-
52
- return ir.Model(
53
- engines,
54
- relations,
55
- types,
56
- model.root,
57
- model.annotations,
58
- )
@@ -1,109 +0,0 @@
1
- """
2
- Rewrite list types to tuple or scalar types depending on how they are used.
3
- """
4
- from dataclasses import dataclass, field
5
- from typing import List, cast
6
-
7
- from relationalai.semantics.metamodel import ir, visitor, compiler, builtins as bt
8
- from relationalai.semantics.metamodel.util import ordered_set
9
-
10
- @dataclass
11
- class RewriteListTypes(compiler.Pass):
12
- """
13
- Rewrite list types to tuple or scalar types depending on how they are used.
14
- """
15
- def rewrite(self, model: ir.Model, options:dict={}) -> ir.Model:
16
- v = RewriteListTypesVisitor()
17
- result = v.walk(model)
18
- return result
19
-
20
- @dataclass
21
- class RewriteListTypesVisitor(visitor.Rewriter):
22
- """
23
- A pass that fixes the types of nodes that use ListTypes.
24
- """
25
- new_relations: List[ir.Relation] = field(default_factory=list, init=False)
26
- new_types: List[ir.Type] = field(default_factory=list, init=False)
27
-
28
- def handle_model(self, model: ir.Model, parent: None):
29
- result = super().handle_model(model, parent)
30
- relations_without_list_type = ordered_set(*[
31
- r for r in result.relations if not any(isinstance(f.type, ir.ListType) for f in r.fields)
32
- ]).frozen()
33
- return model.reconstruct(
34
- result.engines,
35
- relations_without_list_type | self.new_relations,
36
- result.types | self.new_types,
37
- result.root,
38
- result.annotations,
39
- )
40
-
41
- def handle_lookup(self, node: ir.Lookup, parent: ir.Node):
42
- if any(isinstance(f.type, ir.ListType) for f in node.relation.fields):
43
- return self._rewrite_non_aggr_relation(node, node.relation)
44
- else:
45
- return node
46
-
47
- def handle_aggregate(self, node: ir.Aggregate, parent: ir.Node):
48
- new_aggr = self._rewrite_aggr_relation(node, node.aggregation)
49
- return ir.Aggregate(
50
- node.engine,
51
- new_aggr,
52
- node.projection,
53
- node.group,
54
- node.args,
55
- )
56
-
57
- def _rewrite_aggr_relation(self, node: ir.Aggregate, relation: ir.Relation) -> ir.Relation:
58
- assert len(relation.fields) >= 1
59
- changed = False
60
-
61
- if changed:
62
- overloads = ordered_set(*[
63
- self._rewrite_aggr_relation(node, overload)
64
- for overload in relation.overloads
65
- ]).frozen()
66
-
67
- new_relation = ir.Relation(
68
- relation.name,
69
- tuple(relation.fields),
70
- relation.requires,
71
- relation.annotations,
72
- overloads,
73
- )
74
- self.new_relations.append(new_relation)
75
- return new_relation
76
-
77
- return relation
78
-
79
- def _rewrite_non_aggr_relation(self, node: ir.Lookup, relation: ir.Relation):
80
- # Handle the simple varargs case: one list field and all the rest are scalar.
81
- # Currently this pattern is only used for `rel_primitive_hash_tuple`.
82
- # and `rel_primitive_solverlib_fo_appl`.
83
- list_field_indexes = [i for i in range(len(node.relation.fields)) if isinstance(node.relation.fields[i].type, ir.ListType)]
84
- if len(list_field_indexes) != 1:
85
- return node
86
-
87
- # There exactly one list field, rewrite it to a tuple type.
88
- i = list_field_indexes[0]
89
- assert isinstance(node.relation.fields[i].type, ir.ListType)
90
- scalar_field_count = len(node.relation.fields) - 1
91
- tuple_len = len(node.args) - scalar_field_count
92
- assert tuple_len >= 0, f"List field {i} has {tuple_len} elements, but there are only {scalar_field_count} scalar fields."
93
-
94
- # Flatten the list field into separate scalar fields.
95
- field = node.relation.fields[i]
96
- ft = cast(ir.ListType, field.type)
97
- new_fields = (
98
- list(node.relation.fields[0:i]) +
99
- [ir.Field(f"{field.name}@{j}", ft.element_type, field.input) for j in range(tuple_len)] +
100
- list(node.relation.fields[i+1:])
101
- )
102
-
103
- # Create new relation, adding external annotation to prevent renaming.
104
- # NOTE(coey): maybe this is a misuse of this annotation and there could be a nicer way to do it with overloads.
105
- annos = ordered_set(*node.relation.annotations, bt.external_annotation).frozen()
106
- new_relation = ir.Relation(node.relation.name, tuple(new_fields), node.relation.requires, annos)
107
- self.new_relations.append(new_relation)
108
-
109
- return ir.Lookup(node.engine, new_relation, node.args)
File without changes