relationalai 0.11.4__py3-none-any.whl → 0.12.1__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.
- relationalai/clients/config.py +7 -0
- relationalai/clients/direct_access_client.py +113 -0
- relationalai/clients/snowflake.py +263 -189
- relationalai/clients/types.py +4 -1
- relationalai/clients/use_index_poller.py +72 -48
- relationalai/clients/util.py +9 -0
- relationalai/dsl.py +1 -2
- relationalai/early_access/metamodel/rewrite/__init__.py +5 -3
- relationalai/early_access/rel/rewrite/__init__.py +1 -1
- relationalai/environments/snowbook.py +10 -1
- relationalai/errors.py +24 -3
- relationalai/semantics/internal/annotations.py +1 -0
- relationalai/semantics/internal/internal.py +22 -3
- relationalai/semantics/lqp/builtins.py +1 -0
- relationalai/semantics/lqp/executor.py +12 -4
- relationalai/semantics/lqp/model2lqp.py +1 -0
- relationalai/semantics/lqp/passes.py +3 -4
- relationalai/semantics/{rel → lqp}/rewrite/__init__.py +6 -0
- relationalai/semantics/metamodel/builtins.py +12 -1
- relationalai/semantics/metamodel/executor.py +2 -1
- relationalai/semantics/metamodel/rewrite/__init__.py +3 -9
- relationalai/semantics/metamodel/rewrite/flatten.py +8 -7
- relationalai/semantics/reasoners/graph/core.py +1356 -258
- relationalai/semantics/rel/builtins.py +5 -1
- relationalai/semantics/rel/compiler.py +3 -3
- relationalai/semantics/rel/executor.py +20 -11
- relationalai/semantics/sql/compiler.py +2 -3
- relationalai/semantics/sql/executor/duck_db.py +8 -4
- relationalai/semantics/sql/executor/snowflake.py +1 -1
- relationalai/tools/cli.py +17 -6
- relationalai/tools/cli_controls.py +334 -352
- relationalai/tools/constants.py +1 -0
- relationalai/tools/query_utils.py +27 -0
- relationalai/util/otel_configuration.py +1 -1
- {relationalai-0.11.4.dist-info → relationalai-0.12.1.dist-info}/METADATA +5 -4
- {relationalai-0.11.4.dist-info → relationalai-0.12.1.dist-info}/RECORD +45 -45
- relationalai/semantics/metamodel/rewrite/gc_nodes.py +0 -58
- relationalai/semantics/metamodel/rewrite/list_types.py +0 -109
- /relationalai/semantics/{rel → lqp}/rewrite/cdc.py +0 -0
- /relationalai/semantics/{rel → lqp}/rewrite/extract_common.py +0 -0
- /relationalai/semantics/{metamodel → lqp}/rewrite/extract_keys.py +0 -0
- /relationalai/semantics/{metamodel → lqp}/rewrite/fd_constraints.py +0 -0
- /relationalai/semantics/{rel → lqp}/rewrite/quantify_vars.py +0 -0
- /relationalai/semantics/{metamodel → lqp}/rewrite/splinter.py +0 -0
- {relationalai-0.11.4.dist-info → relationalai-0.12.1.dist-info}/WHEEL +0 -0
- {relationalai-0.11.4.dist-info → relationalai-0.12.1.dist-info}/entry_points.txt +0 -0
- {relationalai-0.11.4.dist-info → relationalai-0.12.1.dist-info}/licenses/LICENSE +0 -0
relationalai/tools/constants.py
CHANGED
|
@@ -17,6 +17,7 @@ SHOW_DEBUG_LOGS = False
|
|
|
17
17
|
RAI_APP_NAME = "RELATIONALAI"
|
|
18
18
|
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
|
|
19
19
|
DEFAULT_QUERY_TIMEOUT_MINS = 24*60 # default query timeout of 24h
|
|
20
|
+
QUERY_ATTRIBUTES_HEADER = "X-Query-Attributes" # Header for query execution attributes
|
|
20
21
|
|
|
21
22
|
class GlobalProfileSetting:
|
|
22
23
|
def __init__(self):
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any, Dict, Optional
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def prepare_metadata_for_headers(meta: Optional[Dict[str, Any]]) -> str:
|
|
6
|
+
"""Prepare metadata for HTTP header transmission.
|
|
7
|
+
|
|
8
|
+
Handles user input gracefully without throwing errors.
|
|
9
|
+
Note: json.dumps automatically escapes newlines (\n), carriage returns (\r),
|
|
10
|
+
and null characters (\0) as \\n, \\r, and \\u0000 respectively, making the
|
|
11
|
+
JSON string safe for HTTP headers.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
meta: Raw metadata dictionary from user
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
JSON string safe for HTTP headers
|
|
18
|
+
"""
|
|
19
|
+
if not meta:
|
|
20
|
+
return ""
|
|
21
|
+
|
|
22
|
+
# Handle JSON serialization
|
|
23
|
+
try:
|
|
24
|
+
return json.dumps(meta)
|
|
25
|
+
except (TypeError, ValueError):
|
|
26
|
+
str_meta = {k: str(v) for k, v in meta.items()}
|
|
27
|
+
return json.dumps(str_meta)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: relationalai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.1
|
|
4
4
|
Summary: RelationalAI Library and CLI
|
|
5
5
|
Author-email: RelationalAI <support@relational.ai>
|
|
6
6
|
License-File: LICENSE
|
|
7
|
-
Requires-Python: >=3.
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
8
|
Requires-Dist: aiohttp
|
|
9
|
-
Requires-Dist: click
|
|
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
|
|
@@ -3,8 +3,8 @@ relationalai/compiler.py,sha256=5LZY8AyqadkTLSe_xoJ3J9iXOmetz5YQn9EjJKk8XeQ,6411
|
|
|
3
3
|
relationalai/debugging.py,sha256=dfT0gEDpL56GflVmtUrYVbYcVcZmQL26Vf_F8cI1QKY,11891
|
|
4
4
|
relationalai/dependencies.py,sha256=tL113efcISkJUiDXYHmRdU_usdD7gmee-VRHA7N4EFA,16574
|
|
5
5
|
relationalai/docutils.py,sha256=1gVv9mk0ytdMB2W7_NvslJefmSQtTOg8LHTCDcGCjyE,1554
|
|
6
|
-
relationalai/dsl.py,sha256=
|
|
7
|
-
relationalai/errors.py,sha256=
|
|
6
|
+
relationalai/dsl.py,sha256=UJr93X8kwnnyUY-kjPzp_jhsp2pYBUnDfu8mhNXPNII,66116
|
|
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,15 +22,16 @@ 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=
|
|
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=
|
|
31
|
-
relationalai/clients/types.py,sha256=
|
|
32
|
-
relationalai/clients/use_index_poller.py,sha256=
|
|
33
|
-
relationalai/clients/util.py,sha256=
|
|
31
|
+
relationalai/clients/snowflake.py,sha256=Om3iVea8Ky_P0MMWBJf83xBpG1LMKXrqRRBCjTZ-OcY,158848
|
|
32
|
+
relationalai/clients/types.py,sha256=eNo6akcMTbnBFbBbHd5IgVeY-zuAgtXlOs8Bo1SWmVU,2890
|
|
33
|
+
relationalai/clients/use_index_poller.py,sha256=J8AUIJE1fFZbB5I6Yrk2pQK9l7yN5SGBn2JQ5TmyqfM,45766
|
|
34
|
+
relationalai/clients/util.py,sha256=NJC8fnrWHR01NydwESPSetIHRWf7jQJURYpaWJjmDyE,12311
|
|
34
35
|
relationalai/early_access/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
36
|
relationalai/early_access/builder/__init__.py,sha256=mrR-aGLPquUGc_e9-DOkVCCCo8QRE5A56GTTtgILNa4,993
|
|
36
37
|
relationalai/early_access/builder/builder/__init__.py,sha256=QOVGGdEf-5OirBLjY75W4ANiqGKDknwAAl3YUFEzHVI,1462
|
|
@@ -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=
|
|
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=
|
|
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
|
|
@@ -219,7 +220,7 @@ relationalai/environments/generic.py,sha256=tLLSB6sW6eone7QMbm6ilex5MWMUMPRKtR47
|
|
|
219
220
|
relationalai/environments/hex.py,sha256=vnuGLiYK5dAVEVVDcGw0v52tZG-BGaOn20e6XU262OU,964
|
|
220
221
|
relationalai/environments/ipython.py,sha256=YapHOQu-iSCWZWCgvjskcc3Ef8VaMso9Gr7tSD91TvM,2556
|
|
221
222
|
relationalai/environments/jupyter.py,sha256=hmqqvue-KdsZkMgxwLBnvKyRaFc43x6p_yb2eeOWvjQ,374
|
|
222
|
-
relationalai/environments/snowbook.py,sha256=
|
|
223
|
+
relationalai/environments/snowbook.py,sha256=EqNblYx0MHvp1gkvYq3fhtprPUrFod-gUXw018CW1bw,6875
|
|
223
224
|
relationalai/environments/terminal.py,sha256=J29r4PURSnivYU27D7Zbfa2MgppoTDmMQLUPSxOyfQc,1073
|
|
224
225
|
relationalai/experimental/SF.py,sha256=cLIPCgTa6yCkmAU4zw3o2OlSM_Sl8ah3JUpHVoHzrgA,1533
|
|
225
226
|
relationalai/experimental/__init__.py,sha256=alaOJulJ9YHRl4WGyQ3Kzxhrpc2gP542oNheWXzs7NQ,74
|
|
@@ -254,53 +255,55 @@ 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=
|
|
258
|
-
relationalai/semantics/internal/internal.py,sha256=
|
|
258
|
+
relationalai/semantics/internal/annotations.py,sha256=P_nRpBm4wLmE_8L0VO3TDORL1p2flXaPOVDC0GG7KsQ,306
|
|
259
|
+
relationalai/semantics/internal/internal.py,sha256=yIrUgMqqjzDqB9abOkj7QVyF8SnJzf-tpd5UbjKlSlo,148938
|
|
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=
|
|
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
|
-
relationalai/semantics/lqp/executor.py,sha256=
|
|
265
|
+
relationalai/semantics/lqp/executor.py,sha256=0CYFKUyEj4zL-8BhRt_ru9b5hNle0f4PeLMh8AeK-Nw,19430
|
|
265
266
|
relationalai/semantics/lqp/intrinsics.py,sha256=Pb1mLIme7Q-5Y-CVacUOEvapfhKs076bgtRNi3f0ayY,833
|
|
266
267
|
relationalai/semantics/lqp/ir.py,sha256=DUw0ltul0AS9CRjntNlmllWTwXpxMyYg4iJ9t7NFYMA,1791
|
|
267
|
-
relationalai/semantics/lqp/model2lqp.py,sha256=
|
|
268
|
-
relationalai/semantics/lqp/passes.py,sha256=
|
|
268
|
+
relationalai/semantics/lqp/model2lqp.py,sha256=F_4lwWICy1hvU-UhMbxFwEwPxPOj8IOPfr809ssgdwY,31719
|
|
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=
|
|
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
|
|
280
|
-
relationalai/semantics/metamodel/executor.py,sha256=
|
|
288
|
+
relationalai/semantics/metamodel/executor.py,sha256=_pm--QNvAjd-GgiMKMrpkPZ2eE0H1IM5ZB0l1DGkRs0,2614
|
|
281
289
|
relationalai/semantics/metamodel/factory.py,sha256=Vk3ASwWan08mfGehoOOwMixuU_mEbG2vNl8JLSCJ2OU,12581
|
|
282
290
|
relationalai/semantics/metamodel/helpers.py,sha256=F70rZUzBtVf7VfQRC3XnwxJPvbz_tQP4fCdUeysZsUQ,15342
|
|
283
291
|
relationalai/semantics/metamodel/ir.py,sha256=4Xl3oc92Q7_s33axtrZUXr-GL8VGJsKc7yaSNcO6jXY,33578
|
|
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=
|
|
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/
|
|
293
|
-
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
|
|
299
|
+
relationalai/semantics/metamodel/rewrite/flatten.py,sha256=diBVspq0MLu6tP2lwMs5TcLImF_2AUDbzhMKRYfrPxg,28449
|
|
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=
|
|
306
|
+
relationalai/semantics/reasoners/graph/core.py,sha256=Hf2hahvQo2vaZcCR9DxbAkXxg1nn5wUH1LYCYOvmr7c,318134
|
|
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,23 +374,19 @@ 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=
|
|
375
|
-
relationalai/semantics/rel/compiler.py,sha256=
|
|
376
|
-
relationalai/semantics/rel/executor.py,sha256=
|
|
377
|
+
relationalai/semantics/rel/builtins.py,sha256=qu4yZvLovn4Vn2x44D4XugqGD6Qo5xLxj_RKA34cpF4,1527
|
|
378
|
+
relationalai/semantics/rel/compiler.py,sha256=hiLIaZzhVU5VMtU6rdo3tH2pmKMEtXvh6AHh94CvRAg,42203
|
|
379
|
+
relationalai/semantics/rel/executor.py,sha256=83PoUBAHmQ4i4XrH7cTOEMY279yAhK1fVEq8o807XZ4,15646
|
|
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=
|
|
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=
|
|
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
|
-
relationalai/semantics/sql/executor/snowflake.py,sha256=
|
|
389
|
+
relationalai/semantics/sql/executor/snowflake.py,sha256=d6HAb-nxGXUAYFDec7E2YPkIGAqQWwoet0mtFFWeBMk,5861
|
|
391
390
|
relationalai/semantics/sql/rewrite/__init__.py,sha256=AT1WR0rqQHQ7E06NLoVym0zrZpBVPqK85uRFNJUTDp4,254
|
|
392
391
|
relationalai/semantics/sql/rewrite/denormalize.py,sha256=gPF0s1edthoHfuBIdS9-hnEaX5RFYBdtOlK5iAfB5CA,9040
|
|
393
392
|
relationalai/semantics/sql/rewrite/double_negation.py,sha256=QXynhjwfPW52Hpdo78VWPNk2TXe_mMTWYN470in51z8,1710
|
|
@@ -419,16 +418,17 @@ 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=
|
|
423
|
-
relationalai/tools/cli_controls.py,sha256=
|
|
421
|
+
relationalai/tools/cli.py,sha256=jaUyqq7PYdey7vx7jpAZtHxfixX4np3aMEUKNTFrlc4,76528
|
|
422
|
+
relationalai/tools/cli_controls.py,sha256=NdODpsrqr77N2cbAAJ_fUJqVZYiG4pCht4gQoEaErP0,69944
|
|
424
423
|
relationalai/tools/cli_helpers.py,sha256=r-gJnWnb3d6yIn_ccyp3qx_Vpqh-FINCFMyPBVCA-Jg,14041
|
|
425
|
-
relationalai/tools/constants.py,sha256=
|
|
424
|
+
relationalai/tools/constants.py,sha256=A8Qz0CPs2cRUs5xaZ-Y7BCyvqmI6RLvipzwLDYZ3_PU,4505
|
|
426
425
|
relationalai/tools/debugger.py,sha256=yb03qO8ENHG2rBOPOF-rPKHGrJmaNy6iWXijg6T0dUI,6881
|
|
427
426
|
relationalai/tools/debugger_client.py,sha256=g9vBaeJLKVq6vW63W-KKSaPJ--g5Wuf4LcIuYRA_pk4,3729
|
|
428
427
|
relationalai/tools/debugger_server.py,sha256=UXVMtbmvgp7IqN9TzVnUvPj-TVrb6GzJOJ2z15Al9YU,9880
|
|
429
428
|
relationalai/tools/dev.py,sha256=ZFYbBj25Wf5iy6womAEkLF5RD6O0vZLAOUPQgPcKkS8,22931
|
|
430
429
|
relationalai/tools/notes,sha256=5ufkUHNktVRvQayBVktn2rLgDBapAEKxKJxQ20tRjpA,263
|
|
431
430
|
relationalai/tools/qb_debugger.py,sha256=EKGf_b8wdxxVLz_zo2PfHOPyvpTtPNwEx9ndKg-lq_w,16322
|
|
431
|
+
relationalai/tools/query_utils.py,sha256=SevPuWHZUjHc4A-RbyiJN0oWAVQGGo72UM3Saj29DwY,821
|
|
432
432
|
relationalai/tools/snapshot_viewer.py,sha256=60DW41X4NpjxmPjf1B8mG3oIocHMLLNEbThIdJavi_o,28779
|
|
433
433
|
relationalai/util/__init__.py,sha256=FcHFPzeyDcQwENQg2KA70lBsFx5TtN7xo0quy_cJDQI,208
|
|
434
434
|
relationalai/util/clean_up_databases.py,sha256=f7L5CtJkQCSm5Tms98Q6JrhZShHJltlxMYkq_0xvzgY,3120
|
|
@@ -436,7 +436,7 @@ relationalai/util/constants.py,sha256=rq6c1Q5tLIewiG_M_lUtRAbmrKFUUL1jfl_nxU0989
|
|
|
436
436
|
relationalai/util/format.py,sha256=fLRovumUa2cu0_2gy3O5vaEbpND4p9_IIgr-vDaIGDc,3754
|
|
437
437
|
relationalai/util/graph.py,sha256=eT8s0yCiJIu6D1T1fjZsLSPCcuQb2Mzl6qnljtQ5TuA,1504
|
|
438
438
|
relationalai/util/list_databases.py,sha256=xJZGHzE0VLaDItWo5XvQSx75OwV045h2rjCBBnhNB3o,152
|
|
439
|
-
relationalai/util/otel_configuration.py,sha256=
|
|
439
|
+
relationalai/util/otel_configuration.py,sha256=SV1SFqdKm8q-OD1TsmiIB0x5VxtAFsBRyTwD8zNtnQc,1066
|
|
440
440
|
relationalai/util/otel_handler.py,sha256=G1om5NxMvOjc6GDS4_Qf5aVGt1EVqRnkhfmZPcc6ZUg,17681
|
|
441
441
|
relationalai/util/snowflake_handler.py,sha256=8HUo6eU5wPxa6m_EocYuEZD_XpVIh9EqBnGwaS06Usw,2942
|
|
442
442
|
relationalai/util/span_format_test.py,sha256=1rU-M3RXhRt8vCX6rtuIJogEVkB164N3qiKcTmb-sl8,1345
|
|
@@ -453,8 +453,8 @@ frontend/debugger/dist/index.html,sha256=0wIQ1Pm7BclVV1wna6Mj8OmgU73B9rSEGPVX-Wo
|
|
|
453
453
|
frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png,sha256=tPXOEhOrM4tJyZVJQVBO_yFgNAlgooY38ZsjyrFstgg,620
|
|
454
454
|
frontend/debugger/dist/assets/index-Cssla-O7.js,sha256=MxgIGfdKQyBWgufck1xYggQNhW5nj6BPjCF6Wleo-f0,298886
|
|
455
455
|
frontend/debugger/dist/assets/index-DlHsYx1V.css,sha256=21pZtAjKCcHLFjbjfBQTF6y7QmOic-4FYaKNmwdNZVE,60141
|
|
456
|
-
relationalai-0.
|
|
457
|
-
relationalai-0.
|
|
458
|
-
relationalai-0.
|
|
459
|
-
relationalai-0.
|
|
460
|
-
relationalai-0.
|
|
456
|
+
relationalai-0.12.1.dist-info/METADATA,sha256=f-pkqK_i3tihiwfuimhr3XbrxE0YlrjW_VOOr6WaGok,2562
|
|
457
|
+
relationalai-0.12.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
458
|
+
relationalai-0.12.1.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
|
|
459
|
+
relationalai-0.12.1.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
|
|
460
|
+
relationalai-0.12.1.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|