relationalai 0.12.6__py3-none-any.whl → 0.12.8__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 (38) hide show
  1. relationalai/clients/snowflake.py +48 -7
  2. relationalai/clients/use_index_poller.py +11 -1
  3. relationalai/early_access/lqp/constructors/__init__.py +2 -2
  4. relationalai/early_access/metamodel/rewrite/__init__.py +2 -2
  5. relationalai/semantics/internal/internal.py +1 -4
  6. relationalai/semantics/internal/snowflake.py +14 -1
  7. relationalai/semantics/lqp/constructors.py +0 -5
  8. relationalai/semantics/lqp/executor.py +34 -10
  9. relationalai/semantics/lqp/intrinsics.py +2 -2
  10. relationalai/semantics/lqp/model2lqp.py +10 -7
  11. relationalai/semantics/lqp/passes.py +29 -9
  12. relationalai/semantics/lqp/primitives.py +15 -15
  13. relationalai/semantics/lqp/rewrite/__init__.py +2 -2
  14. relationalai/semantics/lqp/rewrite/{fd_constraints.py → function_annotations.py} +4 -4
  15. relationalai/semantics/lqp/utils.py +17 -13
  16. relationalai/semantics/metamodel/builtins.py +1 -0
  17. relationalai/semantics/metamodel/rewrite/__init__.py +2 -1
  18. relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py +1 -1
  19. relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +5 -6
  20. relationalai/semantics/metamodel/rewrite/flatten.py +18 -149
  21. relationalai/semantics/metamodel/rewrite/format_outputs.py +165 -0
  22. relationalai/semantics/reasoners/graph/core.py +98 -70
  23. relationalai/semantics/reasoners/optimization/__init__.py +55 -10
  24. relationalai/semantics/reasoners/optimization/common.py +63 -8
  25. relationalai/semantics/reasoners/optimization/solvers_dev.py +39 -33
  26. relationalai/semantics/reasoners/optimization/solvers_pb.py +1033 -385
  27. relationalai/semantics/rel/compiler.py +4 -3
  28. relationalai/semantics/rel/executor.py +30 -8
  29. relationalai/semantics/snowflake/__init__.py +2 -2
  30. relationalai/semantics/sql/executor/snowflake.py +6 -2
  31. relationalai/semantics/tests/test_snapshot_abstract.py +5 -4
  32. relationalai/tools/cli.py +10 -0
  33. relationalai/tools/cli_controls.py +15 -0
  34. {relationalai-0.12.6.dist-info → relationalai-0.12.8.dist-info}/METADATA +2 -2
  35. {relationalai-0.12.6.dist-info → relationalai-0.12.8.dist-info}/RECORD +38 -37
  36. {relationalai-0.12.6.dist-info → relationalai-0.12.8.dist-info}/WHEEL +0 -0
  37. {relationalai-0.12.6.dist-info → relationalai-0.12.8.dist-info}/entry_points.txt +0 -0
  38. {relationalai-0.12.6.dist-info → relationalai-0.12.8.dist-info}/licenses/LICENSE +0 -0
@@ -11,8 +11,8 @@ from relationalai.semantics.metamodel.util import OrderedSet, group_by, NameCach
11
11
 
12
12
  from relationalai.semantics.rel import rel, rel_utils as u, builtins as rel_bt
13
13
 
14
- from ..metamodel.rewrite import (Flatten, ExtractNestedLogicals, DNFUnionSplitter, DischargeConstraints)
15
- from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys, FDConstraints, QuantifyVars, Splinter
14
+ from ..metamodel.rewrite import (Flatten, ExtractNestedLogicals, DNFUnionSplitter, DischargeConstraints, FormatOutputs)
15
+ from ..lqp.rewrite import CDC, ExtractCommon, ExtractKeys, FunctionAnnotations, QuantifyVars, Splinter
16
16
 
17
17
  import math
18
18
 
@@ -24,7 +24,7 @@ import math
24
24
  class Compiler(c.Compiler):
25
25
  def __init__(self):
26
26
  super().__init__([
27
- FDConstraints(),
27
+ FunctionAnnotations(),
28
28
  DischargeConstraints(),
29
29
  Checker(),
30
30
  CDC(), # specialize to physical relations before extracting nested and typing
@@ -33,6 +33,7 @@ class Compiler(c.Compiler):
33
33
  DNFUnionSplitter(),
34
34
  ExtractKeys(),
35
35
  ExtractCommon(),
36
+ FormatOutputs(),
36
37
  Flatten(),
37
38
  Splinter(),
38
39
  QuantifyVars(),
@@ -7,13 +7,13 @@ import textwrap
7
7
  import uuid
8
8
 
9
9
  from pandas import DataFrame
10
- from typing import Any, Optional, Literal
10
+ from typing import Any, Optional, Literal, TYPE_CHECKING
11
11
  from snowflake.snowpark import Session
12
12
  import relationalai as rai
13
13
 
14
14
  from relationalai import debugging
15
15
  from relationalai.clients import result_helpers
16
- from relationalai.clients.util import IdentityParser
16
+ from relationalai.clients.util import IdentityParser, escape_for_f_string
17
17
  from relationalai.clients.snowflake import APP_NAME
18
18
  from relationalai.semantics.metamodel import ir, executor as e, factory as f
19
19
  from relationalai.semantics.rel import Compiler
@@ -21,6 +21,8 @@ from relationalai.clients.config import Config
21
21
  from relationalai.tools.constants import USE_DIRECT_ACCESS, Generation, QUERY_ATTRIBUTES_HEADER
22
22
  from relationalai.tools.query_utils import prepare_metadata_for_headers
23
23
 
24
+ if TYPE_CHECKING:
25
+ from relationalai.semantics.snowflake import Table
24
26
 
25
27
  class RelExecutor(e.Executor):
26
28
  """Executes Rel code using the RAI client."""
@@ -160,12 +162,13 @@ class RelExecutor(e.Executor):
160
162
  elif len(all_errors) > 1:
161
163
  raise errors.RAIExceptionSet(all_errors)
162
164
 
163
- def _export(self, raw_code: str, dest_fqn: str, actual_cols: list[str], declared_cols: list[str], update:bool, headers: dict[str, Any] | None = None):
165
+ def _export(self, raw_code: str, dest: Table, actual_cols: list[str], declared_cols: list[str], update:bool, headers: dict[str, Any] | None = None):
164
166
  _exec = self.resources._exec
165
167
  output_table = "out" + str(uuid.uuid4()).replace("-", "_")
166
168
  txn_id = None
167
169
  artifacts = None
168
- dest_database, dest_schema, dest_table, _ = IdentityParser(dest_fqn, require_all_parts=True).to_list()
170
+ dest_database, dest_schema, dest_table, _ = IdentityParser(dest._fqn, require_all_parts=True).to_list()
171
+ dest_fqn = dest._fqn
169
172
  assert self.resources._session
170
173
  with debugging.span("transaction"):
171
174
  try:
@@ -189,6 +192,26 @@ class RelExecutor(e.Executor):
189
192
  fields.append(field)
190
193
  names = ", ".join(fields)
191
194
  if not update:
195
+
196
+ createTableLogic = f"""
197
+ CREATE TABLE {dest_fqn} AS
198
+ SELECT {names}
199
+ FROM {APP_NAME}.results.{output_table};
200
+ """
201
+ if dest._is_iceberg:
202
+ assert dest._iceberg_config is not None
203
+ external_volume_clause = ""
204
+ if dest._iceberg_config.external_volume:
205
+ external_volume_clause = f"EXTERNAL_VOLUME = '{dest._iceberg_config.external_volume}'"
206
+ createTableLogic = f"""
207
+ CREATE ICEBERG TABLE {dest_fqn}
208
+ CATALOG = "SNOWFLAKE"
209
+ {external_volume_clause}
210
+ AS
211
+ SELECT {names}
212
+ FROM {APP_NAME}.results.{output_table};
213
+ """
214
+
192
215
  _exec(f"""
193
216
  BEGIN
194
217
  -- Check if table exists
@@ -210,9 +233,7 @@ class RelExecutor(e.Executor):
210
233
  ELSE
211
234
  -- Create table based on the SELECT
212
235
  EXECUTE IMMEDIATE '
213
- CREATE TABLE {dest_fqn} AS
214
- SELECT {names}
215
- FROM {APP_NAME}.results.{output_table};
236
+ {escape_for_f_string(createTableLogic)}
216
237
  ';
217
238
  END IF;
218
239
  CALL {APP_NAME}.api.drop_result_table('{output_table}');
@@ -252,7 +273,7 @@ class RelExecutor(e.Executor):
252
273
  return artifacts
253
274
 
254
275
  def execute(self, model: ir.Model, task: ir.Task, format: Literal["pandas", "snowpark"] = "pandas",
255
- result_cols: list[str] | None = None, export_to: Optional[str] = None, update: bool = False, meta: dict[str, Any] | None = None) -> Any:
276
+ export_to: Optional[Table] = None, update: bool = False, meta: dict[str, Any] | None = None) -> Any:
256
277
  # Format meta as headers
257
278
  json_meta = prepare_metadata_for_headers(meta)
258
279
  headers = {QUERY_ATTRIBUTES_HEADER: json_meta} if json_meta else {}
@@ -316,6 +337,7 @@ class RelExecutor(e.Executor):
316
337
  else:
317
338
  assert cols
318
339
  # The result cols should be a superset of the actual cols.
340
+ result_cols = export_to._col_names
319
341
  if result_cols is not None:
320
342
  assert all(col in result_cols or col in extra_cols for col in cols)
321
343
  else:
@@ -1,3 +1,3 @@
1
- from relationalai.semantics.internal.snowflake import Table, is_direct_access_enabled
1
+ from relationalai.semantics.internal.snowflake import Table, is_direct_access_enabled, IcebergConfig
2
2
 
3
- __all__ = ["Table", "is_direct_access_enabled"]
3
+ __all__ = ["Table", "is_direct_access_enabled", "IcebergConfig"]
@@ -6,7 +6,7 @@ import uuid
6
6
  import relationalai as rai
7
7
  import pandas as pd
8
8
 
9
- from typing import Any, Union, Optional, Literal
9
+ from typing import Any, Union, Optional, Literal, TYPE_CHECKING
10
10
  from snowflake.snowpark import Session
11
11
 
12
12
  from .. import Compiler
@@ -18,6 +18,10 @@ from relationalai.semantics.metamodel.visitor import collect_by_type
18
18
  from relationalai.semantics.metamodel.typer import typer
19
19
  from relationalai.tools.constants import USE_DIRECT_ACCESS
20
20
 
21
+ if TYPE_CHECKING:
22
+ from relationalai.semantics.snowflake import Table
23
+
24
+
21
25
  class SnowflakeExecutor(e.Executor):
22
26
  """Executes SQL using the RAI client."""
23
27
 
@@ -61,7 +65,7 @@ class SnowflakeExecutor(e.Executor):
61
65
  return self._provider
62
66
 
63
67
  def execute(self, model: ir.Model, task: ir.Task, format:Literal["pandas", "snowpark"]="pandas",
64
- result_cols: Optional[list[str]] = None, export_to: Optional[str] = None,
68
+ export_to: Optional[Table] = None,
65
69
  update: bool = False, meta: dict[str, Any] | None = None) -> Union[pd.DataFrame, Any]:
66
70
  """ Execute the SQL query directly. """
67
71
 
@@ -19,7 +19,7 @@ class AbstractSnapshotTest(ABC):
19
19
  provider:Provider = cast(SFProvider, Provider()) # type: ignore
20
20
 
21
21
  def run_snapshot_test(self, snapshot, script_path, db_schema=None, use_sql=False, use_lqp=True, use_rel=False,
22
- use_direct_access=False, e2e=False, use_csv=True):
22
+ use_direct_access=False, e2e=False, use_csv=True, e2e_only=False):
23
23
  # Resolve use_lqp
24
24
  use_lqp = use_lqp and (not use_rel) # use_rel overrides because use_lqp is default.
25
25
 
@@ -83,13 +83,14 @@ class AbstractSnapshotTest(ABC):
83
83
  export_exists = not dry_run and self.is_export_exists(export_fqn)
84
84
  # match snapshots
85
85
  self.assert_match_snapshots(script_path, snapshot, handler, export_exists, export_fqn, use_sql=use_sql,
86
- use_lqp=use_lqp, e2e=e2e, use_csv=use_csv)
86
+ use_lqp=use_lqp, e2e=e2e, use_csv=use_csv, e2e_only=e2e_only)
87
87
  # cleanup resources created during a test run
88
88
  self.cleanup(export_exists, export_fqn)
89
89
 
90
90
  def assert_match_snapshots(self, script_path, snapshot, handler, export_exists=False, export_fqn=None, use_sql=False,
91
- use_lqp=True, e2e=False, use_csv=True):
92
- self.assert_match_internal_results_snapshots(snapshot, handler, use_sql, use_lqp)
91
+ use_lqp=True, e2e=False, use_csv=True, e2e_only=False):
92
+ if not e2e_only:
93
+ self.assert_match_internal_results_snapshots(snapshot, handler, use_sql, use_lqp)
93
94
  if e2e:
94
95
  self.assert_match_results_snapshots(script_path, snapshot, handler)
95
96
  if export_fqn and export_exists:
relationalai/tools/cli.py CHANGED
@@ -242,6 +242,16 @@ def snowflake_flow(cfg:config.Config):
242
242
  )
243
243
  cfg.set("engine_size", engine_size)
244
244
 
245
+ # init SF specific configuration
246
+ if not pyrel_config or cfg.get("data_freshness_mins", None) is None:
247
+ data_freshness_mins = controls.number(
248
+ "How often should data in RAI be refreshed (minutes)?\n(30 minutes recommended for development, otherwise 0 for data to refreshed on each program execution):",
249
+ default=30,
250
+ min_allowed=0,
251
+ float_allowed=False,
252
+ )
253
+ cfg.set("data_freshness_mins", int(data_freshness_mins))
254
+
245
255
  return account
246
256
 
247
257
  def mfa_passcode_flow(cfg:config.Config):
@@ -332,6 +332,21 @@ def password(message:str, default:str|None = None, validator:Callable|None = Non
332
332
  except KeyboardInterrupt:
333
333
  return abort()
334
334
 
335
+ def number(message:str, default:float|int|None = None, validator:Callable|None = None, invalid_message:str|None = None, **kwargs) -> float|int:
336
+ if not invalid_message:
337
+ invalid_message = "Invalid input"
338
+ try:
339
+ return inquirer.number(
340
+ message,
341
+ default=default or 0,
342
+ keybindings=default_bindings,
343
+ validate=validator,
344
+ invalid_message=invalid_message,
345
+ **kwargs
346
+ ).execute()
347
+ except KeyboardInterrupt:
348
+ return abort()
349
+
335
350
  def file(message: str, start_path:Path|None = None, allow_freeform=False, **kwargs) -> str|None:
336
351
  try:
337
352
  return FuzzyFile(message, start_path, allow_freeform=allow_freeform, max_height=8, border=True, style=STYLE, **kwargs).execute()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.12.6
3
+ Version: 0.12.8
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
13
13
  Requires-Dist: inquirerpy
14
- Requires-Dist: lqp==0.1.16
14
+ Requires-Dist: lqp==0.1.18
15
15
  Requires-Dist: nicegui==2.16.1
16
16
  Requires-Dist: numpy<2
17
17
  Requires-Dist: opentelemetry-api
@@ -28,9 +28,9 @@ relationalai/clients/export_procedure.py.jinja,sha256=nhvVcs5hQyWExFDuROQbi1VyYz
28
28
  relationalai/clients/hash_util.py,sha256=pZVR1FX3q4G_19p_r6wpIR2tIM8_WUlfAR7AVZJjIYM,1495
29
29
  relationalai/clients/profile_polling.py,sha256=pUH7WKH4nYDD0SlQtg3wsWdj0K7qt6nZqUw8jTthCBs,2565
30
30
  relationalai/clients/result_helpers.py,sha256=wDSD02Ngx6W-YQqBIGKnpXD4Ju3pA1e9Nz6ORRI6SRI,17808
31
- relationalai/clients/snowflake.py,sha256=DUAYB4_OJmqmTcAkLebU_qZr0cjdX12p-2Z2A-qzkOU,163557
31
+ relationalai/clients/snowflake.py,sha256=QPJrRolINDkjZb8xyuvaLJIWOEYXdeALLSNqIAAXUEY,166006
32
32
  relationalai/clients/types.py,sha256=eNo6akcMTbnBFbBbHd5IgVeY-zuAgtXlOs8Bo1SWmVU,2890
33
- relationalai/clients/use_index_poller.py,sha256=OFeTJ3fF98UoVk6MA8v8ri8WPbmmCquyA4T8MD_T1Xc,46398
33
+ relationalai/clients/use_index_poller.py,sha256=rrkg35xiHqY0-2dZlPkgixEGENrIrl7bf_2TboX_qew,46794
34
34
  relationalai/clients/util.py,sha256=NJC8fnrWHR01NydwESPSetIHRWf7jQJURYpaWJjmDyE,12311
35
35
  relationalai/early_access/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  relationalai/early_access/builder/__init__.py,sha256=mrR-aGLPquUGc_e9-DOkVCCCo8QRE5A56GTTtgILNa4,993
@@ -163,7 +163,7 @@ relationalai/early_access/dsl/types/values.py,sha256=zP6Ovf3H9RZFFPsPcEdZ1GdfHCl
163
163
  relationalai/early_access/graphs/__init__.py,sha256=4s2waMnXWG3lRF_jii9CaveOYQluJwq1GK3NV1se8d8,304
164
164
  relationalai/early_access/lqp/__init__.py,sha256=D6Au6H1oIPO_x5AuV8Of90JvD5845AWygyqlAfBX2ks,319
165
165
  relationalai/early_access/lqp/compiler/__init__.py,sha256=AaxiWct-ZXLr8nIRn2ybcM-wSGGVLC3lsWaJVPPR2R8,279
166
- relationalai/early_access/lqp/constructors/__init__.py,sha256=tit9mNV0qFuVKYZExaA2YXYP_3bqiu8AJ6JeJB9sjWI,543
166
+ relationalai/early_access/lqp/constructors/__init__.py,sha256=ylitkCoQlTe0tWOVX9CiYya_fj1SnQhmK3O4ksBxOqk,525
167
167
  relationalai/early_access/lqp/executor/__init__.py,sha256=4H2krSmtTJX97rBN5ugIc7EoUQ96gzC9kmcZXS5EMbw,285
168
168
  relationalai/early_access/lqp/ir/__init__.py,sha256=80dggZVWTlnIqbHOC9fmunlRO2-We2eTDPyilLVCTCA,313
169
169
  relationalai/early_access/lqp/passes/__init__.py,sha256=QsW1mzsMTTC7LTDIVW3bQJKvrNzwdwUz5JpBdbPjOtM,277
@@ -179,7 +179,7 @@ relationalai/early_access/metamodel/dependency/__init__.py,sha256=bkrnbq8aRMwCPD
179
179
  relationalai/early_access/metamodel/factory/__init__.py,sha256=_boK2qJ4v_JVFn4OelJx3GTA3X48Yc5yCxq_DxG6fUs,946
180
180
  relationalai/early_access/metamodel/helpers/__init__.py,sha256=bkEbkPFhvcVhnwRAAJxEUMWlI5r3iYuyTIDINfY1frs,320
181
181
  relationalai/early_access/metamodel/ir/__init__.py,sha256=1oJzbPkQrRf5Cng51u1rZUa_sxIzSaSE4m6pvnHTUfE,571
182
- relationalai/early_access/metamodel/rewrite/__init__.py,sha256=TH1FykUuhb34Gd06klxhGvAqfpIB4ZhuHBSXOMeOhsI,342
182
+ relationalai/early_access/metamodel/rewrite/__init__.py,sha256=k7dbum8RWzcped7GuSP77wunBD7nNeop89M4KiU06l8,354
183
183
  relationalai/early_access/metamodel/typer/__init__.py,sha256=va6-xIBBh3B28O5JEUeXsu38FcZPTDTQuym4BDrshmw,123
184
184
  relationalai/early_access/metamodel/typer/typer/__init__.py,sha256=gUfw_Zkk_wq1iycTp7yrOxpZJs5GctvsLmatlmKlcFM,432
185
185
  relationalai/early_access/metamodel/types/__init__.py,sha256=M7KDNQyO7uA_p_U_IRT3jYaOzhVVDm5MBjgQdxZqWsY,741
@@ -302,32 +302,32 @@ relationalai/semantics/devtools/compilation_manager.py,sha256=XBqG_nYWtK3s_J6MeC
302
302
  relationalai/semantics/devtools/extract_lqp.py,sha256=gxI3EvPUTPAkwgnkCKAkEm2vA6QkLfoM8AXXiVz0c34,3696
303
303
  relationalai/semantics/internal/__init__.py,sha256=JXrpFaL-fdZrvKpWTEn1UoLXITOoTGnAYwmgeiglhSk,774
304
304
  relationalai/semantics/internal/annotations.py,sha256=PkrRN-gHO2ksh1hDKB1VVIB39dONvLdTd8_Y0rCR3fE,367
305
- relationalai/semantics/internal/internal.py,sha256=ws06j_IJQYX53A9ULI1j6n1Pen_rHV2lVcPqd4tjUvI,149079
306
- relationalai/semantics/internal/snowflake.py,sha256=3t_GVU61WRUtVrOCpTJ7RlVTZLm0DPpMKU7Q66IiatY,12966
305
+ relationalai/semantics/internal/internal.py,sha256=xobU6wWXpgbcG1lQIO1fkgnSx7YzQ_Dqsqf7lBD9QuA,149008
306
+ relationalai/semantics/internal/snowflake.py,sha256=8D6WYDFKtt8R-sc9o1Oxgtl6Xwehs2Txw_lKNBid7UA,13467
307
307
  relationalai/semantics/lqp/__init__.py,sha256=XgcQZxK-zz_LqPDVtwREhsIvjTuUIt4BZhIedCeMY-s,48
308
308
  relationalai/semantics/lqp/builtins.py,sha256=IWRYJ1J-HGEQqBn8QVOyjZvgEiq6W9tZ0nBLdHz5wjA,576
309
309
  relationalai/semantics/lqp/compiler.py,sha256=Nury1gPw_-Oi_mqT1-rhr13L4UmyIP2BGuotbuklQKA,949
310
- relationalai/semantics/lqp/constructors.py,sha256=8U4eUL8-m1wYRQnws_YWC1coGquTugVH5YC0Zek6VT8,2309
311
- relationalai/semantics/lqp/executor.py,sha256=P5_YITIGUfLlkblzzOB1CdprxhuVYA5pn5kow50Mnik,20636
312
- relationalai/semantics/lqp/intrinsics.py,sha256=Pb1mLIme7Q-5Y-CVacUOEvapfhKs076bgtRNi3f0ayY,833
310
+ relationalai/semantics/lqp/constructors.py,sha256=iYpi6G8diBUNVITwj7-lfNob_kRqdM7eBTpx5uJcQ7s,2124
311
+ relationalai/semantics/lqp/executor.py,sha256=LoExKB3NuF9JdkUqsshAAfbQS3E_OwSyTD_R0wjd7zM,21728
312
+ relationalai/semantics/lqp/intrinsics.py,sha256=5d6z_C-5Anc97p4Jrlgt7og9gGei5N48EDRrnYXz4CA,842
313
313
  relationalai/semantics/lqp/ir.py,sha256=DUw0ltul0AS9CRjntNlmllWTwXpxMyYg4iJ9t7NFYMA,1791
314
- relationalai/semantics/lqp/model2lqp.py,sha256=7_ZNPl5qSnoDomWD5vY1-dOp0rjut4Tm0JwUAwXNcW0,35343
315
- relationalai/semantics/lqp/passes.py,sha256=nLppoHvIQkGP6VuG56OAZ1oOrYhEqpR_0w91gfJ7t_s,27540
314
+ relationalai/semantics/lqp/model2lqp.py,sha256=4uydEMJhdp0yRC5bIsanXRCiVicEtmavQ_cwsiW7ouA,35414
315
+ relationalai/semantics/lqp/passes.py,sha256=R83UEed22yM3MnWgSv2maY94wgblM2r8JhTZ2fWswIU,28471
316
316
  relationalai/semantics/lqp/pragmas.py,sha256=FzzldrJEAZ1AIcEw6D-FfaVg3CoahRYgPCFo7xHfg1g,375
317
- relationalai/semantics/lqp/primitives.py,sha256=OUPAmCV7ToOMoamOF9vk2MHb4MYdaPkFkcuVGcZFVIY,11044
317
+ relationalai/semantics/lqp/primitives.py,sha256=9Hjow-Yp06jt0xatuUrH1dw0ErnzknIr9K0TB_AwdjU,11029
318
318
  relationalai/semantics/lqp/result_helpers.py,sha256=oYpLoTBnzsiyOVIWA2rLMHlgs7P7BoEkqthQ2aMosnk,10123
319
319
  relationalai/semantics/lqp/types.py,sha256=3TZ61ybwNV8lDyUMujZIWNFz3Fgn4uifsJb8ExfoMDg,4508
320
- relationalai/semantics/lqp/utils.py,sha256=x8dcfVoyqzCznNFtI4qSNSL-vWcdxzC-QrnFJlAARXs,6121
320
+ relationalai/semantics/lqp/utils.py,sha256=iOoS-f8kyFjrgAnpK4cWDvAA-WmPgDRggSKUXm_JdTc,6317
321
321
  relationalai/semantics/lqp/validators.py,sha256=YO_ciSgEVNILWUbkxIagKpIxI4oqV0fRSTO2Ok0rPJk,1526
322
- relationalai/semantics/lqp/rewrite/__init__.py,sha256=NQMkrZMUrLksScGXs0EiZTT-In5VltvswfeB4kCkeZM,337
322
+ relationalai/semantics/lqp/rewrite/__init__.py,sha256=AR3JvxNMnUuGFcbu1qXEutnnYkex3XT64rSdjehjfR4,355
323
323
  relationalai/semantics/lqp/rewrite/cdc.py,sha256=I6DeMOZScx-3UAVoSCMn9cuOgLzwdvJVKNwsgFa6R_k,10390
324
324
  relationalai/semantics/lqp/rewrite/extract_common.py,sha256=sbihURqk4wtc1ekDWXWltq9LrO42XTLfOHl5D6nT5vw,18371
325
325
  relationalai/semantics/lqp/rewrite/extract_keys.py,sha256=dSr5SVkYmrhiR0XPY5eRAnWD66dcZYgXdilXcERv634,18682
326
- relationalai/semantics/lqp/rewrite/fd_constraints.py,sha256=a4jetchlOfm2rb3QD0Nil0bvermpBx1up7p1uNgcJHg,3503
326
+ relationalai/semantics/lqp/rewrite/function_annotations.py,sha256=otnxjxnVI3ByvPKdyG1SlGBaEKBej-9_M8Xc5GBtOeE,3523
327
327
  relationalai/semantics/lqp/rewrite/quantify_vars.py,sha256=wYMEXzCW_D_Y_1rSLvuAAqw9KN1oIOn_vIMxELzRVb4,11568
328
328
  relationalai/semantics/lqp/rewrite/splinter.py,sha256=oeDjP_F2PVLVexAKFn8w7CLtO9oy-R-tS2IOmzw_Ujk,3199
329
329
  relationalai/semantics/metamodel/__init__.py,sha256=I-XqQAGycD0nKkKYvnF3G9d0QK_1LIM4xXICw8g8fBA,805
330
- relationalai/semantics/metamodel/builtins.py,sha256=gDM3DSKlZA1Orq7oqOn33Dm9-J3yHpDAe9Y2ea-zQsk,37940
330
+ relationalai/semantics/metamodel/builtins.py,sha256=vMe0Lytebk0e0M6US82-gvg6j8wGy6YtdAIBy1m2-HA,38047
331
331
  relationalai/semantics/metamodel/compiler.py,sha256=XBsAnbFwgZ_TcRry6yXGWLyw_MaO2WJDp1EnC_ubhps,4525
332
332
  relationalai/semantics/metamodel/dataflow.py,sha256=wfj1tARrR4yEAaTwUTrAcxEcz81VkUal4U_AX1esovk,3929
333
333
  relationalai/semantics/metamodel/dependency.py,sha256=iJLx-w_zqde7CtbGcXxLxZBdUKZYl7AUykezPI9ccck,33926
@@ -338,11 +338,12 @@ relationalai/semantics/metamodel/ir.py,sha256=4Xl3oc92Q7_s33axtrZUXr-GL8VGJsKc7y
338
338
  relationalai/semantics/metamodel/types.py,sha256=m3NolF3B_fBSnkQKA9o1feEawaW7RhR-t6W9OSxSFfc,11492
339
339
  relationalai/semantics/metamodel/util.py,sha256=cmSmeww34JVMqcFudwVAY820IPM2ETSELJylwJ3GRJk,16654
340
340
  relationalai/semantics/metamodel/visitor.py,sha256=DFY0DACLhxlZ0e4p0vWqbK6ZJr_GWEvH66CU_HVuoTk,35527
341
- relationalai/semantics/metamodel/rewrite/__init__.py,sha256=aPgZuRGpULwPVWtENUEHmGBSNAEsxz1i0t257IOCO-E,285
341
+ relationalai/semantics/metamodel/rewrite/__init__.py,sha256=9ONWFSdMPHkWpObDMSljt8DywhpFf4Ehsq1aT3fTPt8,344
342
342
  relationalai/semantics/metamodel/rewrite/discharge_constraints.py,sha256=0v613BqCLlo4sgWuZjcLSxxakp3d34mYWbG4ldhzGno,1949
343
- relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py,sha256=dlyD868Pg424BLowY4A0gOmSziSy1U-dYGXZEE3SW8E,7956
344
- relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py,sha256=0aKMoniIzq-uAm1iItRQEUxGGDYVnT8pWZxFXWlOk50,3366
345
- relationalai/semantics/metamodel/rewrite/flatten.py,sha256=W3zoUWY2UVOO_d-vyLZYb4y61wcM99ceJJFCuz_Rz-Q,27891
343
+ relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py,sha256=ZXX190gCKXhdB-Iyi4MGowc4FS9P0PIJTtTT0LrTr6A,7970
344
+ relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py,sha256=M5sSsyM2KKtz6ZD0zXT7bwTsJA_bgPJupu6TwnHLdmE,3341
345
+ relationalai/semantics/metamodel/rewrite/flatten.py,sha256=uw7pKBGdrGqGYZU9NewAjvqRuhJk7As49hA_Wcwfp2k,21918
346
+ relationalai/semantics/metamodel/rewrite/format_outputs.py,sha256=n0IxC3RL3UMly6MWsq342EGfL2yGj3vOgVG_wg7kt-o,6225
346
347
  relationalai/semantics/metamodel/typer/__init__.py,sha256=E3ydmhWRdm-cAqWsNR24_Qd3NcwiHx8ElO2tzNysAXc,143
347
348
  relationalai/semantics/metamodel/typer/checker.py,sha256=frY0gilDO6skbDiYFiIpDUOWyt9s9jAJsRBs848DcG0,19184
348
349
  relationalai/semantics/metamodel/typer/typer.py,sha256=7kD5o08Q1bv9M5aUn9diDM5AfiuiRYi37xplqcVyLT8,62363
@@ -350,27 +351,27 @@ relationalai/semantics/reasoners/__init__.py,sha256=cLrGNKFX859EdPjk2n6MdYLvueaF
350
351
  relationalai/semantics/reasoners/experimental/__init__.py,sha256=ZWXb3Oun7m_G2c3ijKnqxbEsAzTMVa7ciBXjdi4dCNI,144
351
352
  relationalai/semantics/reasoners/graph/README.md,sha256=QgKEXTllp5PO-yK8oDfMx1PNTYF2uVoneMRKsWTY5GU,23953
352
353
  relationalai/semantics/reasoners/graph/__init__.py,sha256=jSXR6J05SQZdjxQ5Y-ovqFqGTAXCOWeQDcvpfoBYgDA,1282
353
- relationalai/semantics/reasoners/graph/core.py,sha256=_5bE-8JYKjfJYuRZ6fYqKKuvOxHc1ZwQwOFFWeWlgcM,397902
354
+ relationalai/semantics/reasoners/graph/core.py,sha256=CBerRlgcNoiur8kIJTRnLFllibK7pBFrfViY1yfRXfI,400039
354
355
  relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md,sha256=Givh0W6B6Hlow6TpmK-8adpEYd8b3O_WmdgMOQIyKs0,55749
355
356
  relationalai/semantics/reasoners/graph/tests/README.md,sha256=XbauTzt6VA_YEOcrlZwsu4WOW5UoWV8M6F57wmxe5QU,1023
356
- relationalai/semantics/reasoners/optimization/__init__.py,sha256=ceDYhGtFuewYGILKcjpuNHnTaCK2qc7pmJEsDWUfrEo,598
357
- relationalai/semantics/reasoners/optimization/common.py,sha256=TVa9n9n97BwfMyYOTt895kkNiNkEX8WbaqReYM1PkuQ,1107
358
- relationalai/semantics/reasoners/optimization/solvers_dev.py,sha256=BjFcEfmqmdxM6jnd34pt1AlkrdwHd_HapqpB2oIvNP4,24142
359
- relationalai/semantics/reasoners/optimization/solvers_pb.py,sha256=ryNARpyph3uvr1dhWb7pNU3uuxuL1FLZZiTqFcr3Xf8,22148
357
+ relationalai/semantics/reasoners/optimization/__init__.py,sha256=lpavly1Qa3VKvLgrbpp-tsxY9hcqHL6buxuekgKPakw,2212
358
+ relationalai/semantics/reasoners/optimization/common.py,sha256=V0c9eGHJKI-gt0X-q9o0bIkgBCdWFdjWq2NQITKwmXg,3124
359
+ relationalai/semantics/reasoners/optimization/solvers_dev.py,sha256=lbw3c8Z6PlHRDm7TdAhICPShlGoab9uR_4uacMPvpBw,24493
360
+ relationalai/semantics/reasoners/optimization/solvers_pb.py,sha256=ESwraHU9c4NCEVRZ16tnBZsUCmJg7lUhy-v0-GGq0qo,48000
360
361
  relationalai/semantics/rel/__init__.py,sha256=pMlVTC_TbQ45mP1LpzwFBBgPxpKc0H3uJDvvDXEWzvs,55
361
362
  relationalai/semantics/rel/builtins.py,sha256=kQToiELc4NnvCmXyFtu9CsGZNdTQtSzTB-nuyIfQcsM,1562
362
- relationalai/semantics/rel/compiler.py,sha256=hiLIaZzhVU5VMtU6rdo3tH2pmKMEtXvh6AHh94CvRAg,42203
363
- relationalai/semantics/rel/executor.py,sha256=PfCm9tsY_HVYnw7Zo7RMR7GisQ9-5W-Hy6kqK4jFfpU,16133
363
+ relationalai/semantics/rel/compiler.py,sha256=7KmZ0X2DwsXoH5DwSYeqSFMUdBvrKUNRZX4e-hEBixg,42259
364
+ relationalai/semantics/rel/executor.py,sha256=v-yHl9R8AV0AA2xnm5YZDzue83pr8j2Q97Ky1MKkU70,17309
364
365
  relationalai/semantics/rel/rel.py,sha256=9I_V6dQ83QRaLzq04Tt-KjBWhmNxNO3tFzeornBK4zc,15738
365
366
  relationalai/semantics/rel/rel_utils.py,sha256=EH-NBROA4vIJXajLKniapt4Dxt7cXSqY4NEjD-wD8Mc,9566
366
- relationalai/semantics/snowflake/__init__.py,sha256=BW_zvPQBWGTAtY6cluG6tDDG-QmU_jRb-F7PeCpDhIU,134
367
+ relationalai/semantics/snowflake/__init__.py,sha256=wRvLb8sQ_SvoY6DEPKpMz6sdSJbrbgyQJVcHAPoSlAw,166
367
368
  relationalai/semantics/sql/__init__.py,sha256=59uuKmQOFUzwlYwc7anSuwhQ45bJTYVmd9nOJXr9mQs,80
368
369
  relationalai/semantics/sql/compiler.py,sha256=FFcaZYg64bY3HzAk5JugmHced8h2H8eqG4MsIqoDqTM,129171
369
370
  relationalai/semantics/sql/sql.py,sha256=7nUnm0RbHlOGSGQbnFrgzPYdmnoppifQ5jylR5Wtgcc,17122
370
371
  relationalai/semantics/sql/executor/__init__.py,sha256=F3HqQPJVP9wgV3rkwI5jy1_QBCD_3qj2IGxbdT_pX9k,120
371
372
  relationalai/semantics/sql/executor/duck_db.py,sha256=laI0jquMNNhj1pcFlaqxYAvvnCmSuvzzkibfjMz7liY,1909
372
373
  relationalai/semantics/sql/executor/result_helpers.py,sha256=kVfspHHuzyq4SNklrtvhYte1wqRFzct-dAKin_lOmR4,3215
373
- relationalai/semantics/sql/executor/snowflake.py,sha256=p7jLfDtqGgM8GEjHBGqdm_PbxEIQn0cmI_msEj9F0Xo,5861
374
+ relationalai/semantics/sql/executor/snowflake.py,sha256=ctbSssn91f6cV-_sPGizjkRn7vw_Lcqgd4Ai9S-DTFk,5912
374
375
  relationalai/semantics/sql/rewrite/__init__.py,sha256=AT1WR0rqQHQ7E06NLoVym0zrZpBVPqK85uRFNJUTDp4,254
375
376
  relationalai/semantics/sql/rewrite/denormalize.py,sha256=gPF0s1edthoHfuBIdS9-hnEaX5RFYBdtOlK5iAfB5CA,9040
376
377
  relationalai/semantics/sql/rewrite/double_negation.py,sha256=QXynhjwfPW52Hpdo78VWPNk2TXe_mMTWYN470in51z8,1710
@@ -389,7 +390,7 @@ relationalai/semantics/std/std.py,sha256=Ql27y2Rs0d1kluktWi-t6_M_uYIxQUfO94GjlVf
389
390
  relationalai/semantics/std/strings.py,sha256=Q_7kvx5dud6gppNURHOi4SMvgZNPRuWwEKDIPSEIOJI,2702
390
391
  relationalai/semantics/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
391
392
  relationalai/semantics/tests/logging.py,sha256=oJTrUS_Bq6WxqqO8QLtrjdkUB02Uu5erZ7FTl__-lNY,1432
392
- relationalai/semantics/tests/test_snapshot_abstract.py,sha256=IVQ72lBIpYJLOXGn26Yjb8Tp1PQ67kcSOUKKb4-I7Fw,6051
393
+ relationalai/semantics/tests/test_snapshot_abstract.py,sha256=1xJmyRPlC6ywPytFUh8V-TFqndAzlo5v0XggRTJBcys,6131
393
394
  relationalai/semantics/tests/test_snapshot_base.py,sha256=vlqqSyQf_IsDb7feDnkiHZKSCsJqDq0Ep4V3CKtKWns,466
394
395
  relationalai/semantics/tests/utils.py,sha256=h4GPNCJGmAWvwskGWxc523BtFEd2ayff4zfBNHapoCo,1825
395
396
  relationalai/std/__init__.py,sha256=U8-DpdOcxeGXVSf3LqJl9mSXKztNgB9iwropQcXp960,2178
@@ -402,8 +403,8 @@ relationalai/std/re.py,sha256=7B0dPaYyEdIlEgZfDzs7HJ_MTqccYTfIZieqst6MHbk,4457
402
403
  relationalai/std/strings.py,sha256=vHvex_W5GHhhsVws6Dfyl4w1EHdbDE3nPjT09DnpvSE,4260
403
404
  relationalai/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
404
405
  relationalai/tools/cleanup_snapshots.py,sha256=s1q1ophi1RmiTZ9QQolQ6q1K9ZwseCaOuDtI1Rm99MQ,3434
405
- relationalai/tools/cli.py,sha256=jaUyqq7PYdey7vx7jpAZtHxfixX4np3aMEUKNTFrlc4,76528
406
- relationalai/tools/cli_controls.py,sha256=NdODpsrqr77N2cbAAJ_fUJqVZYiG4pCht4gQoEaErP0,69944
406
+ relationalai/tools/cli.py,sha256=EBrPdJQsltUQGClQTYaEDVmEmm4w_UGdb8fT_DKIeOQ,77017
407
+ relationalai/tools/cli_controls.py,sha256=84K0sjfsVwqi9C8ZlpvPi6XZPhjyW-R06Pir9Ex_Xtg,70468
407
408
  relationalai/tools/cli_helpers.py,sha256=r-gJnWnb3d6yIn_ccyp3qx_Vpqh-FINCFMyPBVCA-Jg,14041
408
409
  relationalai/tools/constants.py,sha256=A8Qz0CPs2cRUs5xaZ-Y7BCyvqmI6RLvipzwLDYZ3_PU,4505
409
410
  relationalai/tools/debugger.py,sha256=yb03qO8ENHG2rBOPOF-rPKHGrJmaNy6iWXijg6T0dUI,6881
@@ -437,8 +438,8 @@ frontend/debugger/dist/index.html,sha256=0wIQ1Pm7BclVV1wna6Mj8OmgU73B9rSEGPVX-Wo
437
438
  frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png,sha256=tPXOEhOrM4tJyZVJQVBO_yFgNAlgooY38ZsjyrFstgg,620
438
439
  frontend/debugger/dist/assets/index-Cssla-O7.js,sha256=MxgIGfdKQyBWgufck1xYggQNhW5nj6BPjCF6Wleo-f0,298886
439
440
  frontend/debugger/dist/assets/index-DlHsYx1V.css,sha256=21pZtAjKCcHLFjbjfBQTF6y7QmOic-4FYaKNmwdNZVE,60141
440
- relationalai-0.12.6.dist-info/METADATA,sha256=bqs9JiJ-QYdl4IRbxPfaJPKeiPVX-WkMcOIQBuQ79M4,2562
441
- relationalai-0.12.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
442
- relationalai-0.12.6.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
443
- relationalai-0.12.6.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
444
- relationalai-0.12.6.dist-info/RECORD,,
441
+ relationalai-0.12.8.dist-info/METADATA,sha256=IGBDWxQWGYGQR1ZF-oDVSz-fj12UiuZrqdg7MgngzSA,2562
442
+ relationalai-0.12.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
443
+ relationalai-0.12.8.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
444
+ relationalai-0.12.8.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
445
+ relationalai-0.12.8.dist-info/RECORD,,