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.
- relationalai/clients/config.py +7 -0
- relationalai/clients/direct_access_client.py +113 -0
- relationalai/clients/snowflake.py +35 -106
- relationalai/early_access/metamodel/rewrite/__init__.py +5 -3
- relationalai/early_access/rel/rewrite/__init__.py +1 -1
- relationalai/errors.py +24 -3
- relationalai/semantics/internal/annotations.py +1 -0
- relationalai/semantics/lqp/builtins.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/rewrite/__init__.py +3 -9
- relationalai/semantics/reasoners/graph/core.py +221 -71
- relationalai/semantics/rel/builtins.py +5 -1
- relationalai/semantics/rel/compiler.py +3 -3
- relationalai/semantics/sql/compiler.py +2 -3
- relationalai/semantics/sql/executor/duck_db.py +8 -4
- relationalai/tools/cli.py +11 -4
- {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/METADATA +5 -4
- {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/RECORD +29 -30
- 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.0.dist-info}/WHEEL +0 -0
- {relationalai-0.11.4.dist-info → relationalai-0.12.0.dist-info}/entry_points.txt +0 -0
- {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
|
-
|
|
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,
|
|
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
|
-
|
|
33
|
-
|
|
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
|
|
20
|
-
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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=
|
|
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=
|
|
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/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=
|
|
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
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
375
|
-
relationalai/semantics/rel/compiler.py,sha256=
|
|
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=
|
|
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
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=
|
|
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.
|
|
457
|
-
relationalai-0.
|
|
458
|
-
relationalai-0.
|
|
459
|
-
relationalai-0.
|
|
460
|
-
relationalai-0.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|