kumoai 2.13.0.dev202512040649__cp313-cp313-win_amd64.whl → 2.14.0.dev202601081732__cp313-cp313-win_amd64.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 (54) hide show
  1. kumoai/__init__.py +35 -26
  2. kumoai/_version.py +1 -1
  3. kumoai/client/client.py +6 -0
  4. kumoai/client/jobs.py +26 -0
  5. kumoai/client/pquery.py +6 -2
  6. kumoai/connector/utils.py +21 -7
  7. kumoai/experimental/rfm/__init__.py +51 -24
  8. kumoai/experimental/rfm/authenticate.py +3 -4
  9. kumoai/experimental/rfm/backend/local/__init__.py +4 -0
  10. kumoai/experimental/rfm/{local_graph_store.py → backend/local/graph_store.py} +62 -110
  11. kumoai/experimental/rfm/backend/local/sampler.py +312 -0
  12. kumoai/experimental/rfm/backend/local/table.py +35 -31
  13. kumoai/experimental/rfm/backend/snow/__init__.py +2 -0
  14. kumoai/experimental/rfm/backend/snow/sampler.py +366 -0
  15. kumoai/experimental/rfm/backend/snow/table.py +177 -50
  16. kumoai/experimental/rfm/backend/sqlite/__init__.py +4 -2
  17. kumoai/experimental/rfm/backend/sqlite/sampler.py +454 -0
  18. kumoai/experimental/rfm/backend/sqlite/table.py +131 -48
  19. kumoai/experimental/rfm/base/__init__.py +23 -3
  20. kumoai/experimental/rfm/base/column.py +96 -10
  21. kumoai/experimental/rfm/base/expression.py +44 -0
  22. kumoai/experimental/rfm/base/sampler.py +782 -0
  23. kumoai/experimental/rfm/base/source.py +2 -1
  24. kumoai/experimental/rfm/base/sql_sampler.py +247 -0
  25. kumoai/experimental/rfm/base/table.py +404 -203
  26. kumoai/experimental/rfm/graph.py +374 -172
  27. kumoai/experimental/rfm/infer/__init__.py +6 -4
  28. kumoai/experimental/rfm/infer/dtype.py +7 -4
  29. kumoai/experimental/rfm/infer/multicategorical.py +1 -1
  30. kumoai/experimental/rfm/infer/pkey.py +4 -2
  31. kumoai/experimental/rfm/infer/stype.py +35 -0
  32. kumoai/experimental/rfm/infer/time_col.py +1 -2
  33. kumoai/experimental/rfm/pquery/executor.py +27 -27
  34. kumoai/experimental/rfm/pquery/pandas_executor.py +30 -32
  35. kumoai/experimental/rfm/relbench.py +76 -0
  36. kumoai/experimental/rfm/rfm.py +762 -467
  37. kumoai/experimental/rfm/sagemaker.py +4 -4
  38. kumoai/experimental/rfm/task_table.py +292 -0
  39. kumoai/kumolib.cp313-win_amd64.pyd +0 -0
  40. kumoai/pquery/predictive_query.py +10 -6
  41. kumoai/pquery/training_table.py +16 -2
  42. kumoai/testing/snow.py +50 -0
  43. kumoai/trainer/distilled_trainer.py +175 -0
  44. kumoai/utils/__init__.py +3 -2
  45. kumoai/utils/display.py +87 -0
  46. kumoai/utils/progress_logger.py +190 -12
  47. kumoai/utils/sql.py +3 -0
  48. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202601081732.dist-info}/METADATA +3 -2
  49. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202601081732.dist-info}/RECORD +52 -41
  50. kumoai/experimental/rfm/local_graph_sampler.py +0 -223
  51. kumoai/experimental/rfm/local_pquery_driver.py +0 -689
  52. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202601081732.dist-info}/WHEEL +0 -0
  53. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202601081732.dist-info}/licenses/LICENSE +0 -0
  54. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202601081732.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,87 @@
1
+ from collections.abc import Sequence
2
+
3
+ import pandas as pd
4
+ from rich import box
5
+ from rich.console import Console
6
+ from rich.table import Table
7
+ from rich.text import Text
8
+
9
+ from kumoai import in_notebook, in_snowflake_notebook
10
+
11
+
12
+ def message(msg: str) -> None:
13
+ if in_snowflake_notebook():
14
+ import streamlit as st
15
+ st.markdown(msg)
16
+ elif in_notebook():
17
+ from IPython.display import Markdown, display
18
+ display(Markdown(msg))
19
+ else:
20
+ print(msg.replace("`", "'"))
21
+
22
+
23
+ def title(msg: str) -> None:
24
+ if in_notebook():
25
+ message(f"### {msg}")
26
+ else:
27
+ msg = msg.replace("`", "'")
28
+ Console().print(f"[bold]{msg}[/bold]", highlight=False)
29
+
30
+
31
+ def italic(msg: str) -> None:
32
+ if in_notebook():
33
+ message(f"*{msg}*")
34
+ else:
35
+ msg = msg.replace("`", "'")
36
+ Console().print(
37
+ f"[italic]{msg}[/italic]",
38
+ highlight=False,
39
+ style='dim',
40
+ )
41
+
42
+
43
+ def unordered_list(items: Sequence[str]) -> None:
44
+ if in_notebook():
45
+ msg = '\n'.join([f"- {item}" for item in items])
46
+ message(msg)
47
+ else:
48
+ text = Text('\n').join(
49
+ Text.assemble(
50
+ Text(' • ', style='yellow'),
51
+ Text(item.replace('`', '')),
52
+ ) for item in items)
53
+ Console().print(text, highlight=False)
54
+
55
+
56
+ def dataframe(df: pd.DataFrame) -> None:
57
+ if in_snowflake_notebook():
58
+ import streamlit as st
59
+ st.dataframe(df, hide_index=True)
60
+ elif in_notebook():
61
+ from IPython.display import display
62
+ try:
63
+ if hasattr(df.style, 'hide'):
64
+ display(df.style.hide(axis='index')) # pandas=2
65
+ else:
66
+ display(df.style.hide_index()) # pandas<1.3
67
+ except ImportError:
68
+ print(df.to_string(index=False)) # missing jinja2
69
+ else:
70
+ Console().print(to_rich_table(df))
71
+
72
+
73
+ def to_rich_table(df: pd.DataFrame) -> Table:
74
+ table = Table(box=box.ROUNDED)
75
+ for column in df.columns:
76
+ table.add_column(str(column))
77
+ for _, row in df.iterrows():
78
+ values: list[str | Text] = []
79
+ for value in row:
80
+ if str(value) == 'True':
81
+ values.append('✅')
82
+ elif str(value) in {'False', '-'}:
83
+ values.append(Text('-', style='dim'))
84
+ else:
85
+ values.append(str(value))
86
+ table.add_row(*values)
87
+ return table
@@ -1,6 +1,7 @@
1
+ import re
1
2
  import sys
2
3
  import time
3
- from typing import Any, List, Optional, Union
4
+ from typing import Any
4
5
 
5
6
  from rich.console import Console, ConsoleOptions, RenderResult
6
7
  from rich.live import Live
@@ -20,12 +21,23 @@ from typing_extensions import Self
20
21
 
21
22
 
22
23
  class ProgressLogger:
23
- def __init__(self, msg: str) -> None:
24
+ def __init__(self, msg: str, verbose: bool = True) -> None:
24
25
  self.msg = msg
25
- self.logs: List[str] = []
26
+ self.verbose = verbose
27
+ self.depth = 0
28
+
29
+ self.logs: list[str] = []
30
+
31
+ self.start_time: float | None = None
32
+ self.end_time: float | None = None
33
+
34
+ @classmethod
35
+ def default(cls, msg: str, verbose: bool = True) -> 'ProgressLogger':
36
+ from kumoai import in_snowflake_notebook
26
37
 
27
- self.start_time: Optional[float] = None
28
- self.end_time: Optional[float] = None
38
+ if in_snowflake_notebook():
39
+ return StreamlitProgressLogger(msg, verbose)
40
+ return RichProgressLogger(msg, verbose)
29
41
 
30
42
  @property
31
43
  def duration(self) -> float:
@@ -37,11 +49,19 @@ class ProgressLogger:
37
49
  def log(self, msg: str) -> None:
38
50
  self.logs.append(msg)
39
51
 
52
+ def init_progress(self, total: int, description: str) -> None:
53
+ pass
54
+
55
+ def step(self) -> None:
56
+ pass
57
+
40
58
  def __enter__(self) -> Self:
59
+ self.depth += 1
41
60
  self.start_time = time.perf_counter()
42
61
  return self
43
62
 
44
63
  def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
64
+ self.depth -= 1
45
65
  self.end_time = time.perf_counter()
46
66
 
47
67
  def __repr__(self) -> str:
@@ -66,22 +86,21 @@ class ColoredTimeRemainingColumn(TimeRemainingColumn):
66
86
  return Text(str(super().render(task)), style=self.style)
67
87
 
68
88
 
69
- class InteractiveProgressLogger(ProgressLogger):
89
+ class RichProgressLogger(ProgressLogger):
70
90
  def __init__(
71
91
  self,
72
92
  msg: str,
73
93
  verbose: bool = True,
74
94
  refresh_per_second: int = 10,
75
95
  ) -> None:
76
- super().__init__(msg=msg)
96
+ super().__init__(msg=msg, verbose=verbose)
77
97
 
78
- self.verbose = verbose
79
98
  self.refresh_per_second = refresh_per_second
80
99
 
81
- self._progress: Optional[Progress] = None
82
- self._task: Optional[int] = None
100
+ self._progress: Progress | None = None
101
+ self._task: int | None = None
83
102
 
84
- self._live: Optional[Live] = None
103
+ self._live: Live | None = None
85
104
  self._exception: bool = False
86
105
 
87
106
  def init_progress(self, total: int, description: str) -> None:
@@ -107,6 +126,9 @@ class InteractiveProgressLogger(ProgressLogger):
107
126
 
108
127
  super().__enter__()
109
128
 
129
+ if self.depth > 1:
130
+ return self
131
+
110
132
  if not in_notebook(): # Render progress bar in TUI.
111
133
  sys.stdout.write("\x1b]9;4;3\x07")
112
134
  sys.stdout.flush()
@@ -126,6 +148,9 @@ class InteractiveProgressLogger(ProgressLogger):
126
148
 
127
149
  super().__exit__(exc_type, exc_val, exc_tb)
128
150
 
151
+ if self.depth > 1:
152
+ return
153
+
129
154
  if exc_type is not None:
130
155
  self._exception = True
131
156
 
@@ -151,7 +176,7 @@ class InteractiveProgressLogger(ProgressLogger):
151
176
 
152
177
  table = Table.grid(padding=(0, 1))
153
178
 
154
- icon: Union[Text, Padding]
179
+ icon: Text | Padding
155
180
  if self._exception:
156
181
  style = 'red'
157
182
  icon = Text('❌', style=style)
@@ -175,3 +200,156 @@ class InteractiveProgressLogger(ProgressLogger):
175
200
 
176
201
  if self.verbose and self._progress is not None:
177
202
  yield self._progress.get_renderable()
203
+
204
+
205
+ class StreamlitProgressLogger(ProgressLogger):
206
+ def __init__(
207
+ self,
208
+ msg: str,
209
+ verbose: bool = True,
210
+ ) -> None:
211
+ super().__init__(msg=msg, verbose=verbose)
212
+
213
+ self._status: Any = None
214
+
215
+ self._total = 0
216
+ self._current = 0
217
+ self._description: str = ''
218
+ self._progress: Any = None
219
+
220
+ def __enter__(self) -> Self:
221
+ super().__enter__()
222
+
223
+ import streamlit as st
224
+
225
+ if self.depth > 1:
226
+ return self
227
+
228
+ # Adjust layout for prettier output:
229
+ st.markdown(STREAMLIT_CSS, unsafe_allow_html=True)
230
+
231
+ if self.verbose:
232
+ self._status = st.status(
233
+ f':blue[{self._sanitize_text(self.msg)}]',
234
+ expanded=True,
235
+ )
236
+
237
+ return self
238
+
239
+ def log(self, msg: str) -> None:
240
+ super().log(msg)
241
+ if self.verbose and self._status is not None:
242
+ self._status.write(self._sanitize_text(msg))
243
+
244
+ def init_progress(self, total: int, description: str) -> None:
245
+ if self.verbose and self._status is not None:
246
+ self._total = total
247
+ self._current = 0
248
+ self._description = self._sanitize_text(description)
249
+ percent = min(self._current / self._total, 1.0)
250
+ self._progress = self._status.progress(
251
+ value=percent,
252
+ text=f'{self._description} [{self._current}/{self._total}]',
253
+ )
254
+
255
+ def step(self) -> None:
256
+ self._current += 1
257
+
258
+ if self.verbose and self._progress is not None:
259
+ percent = min(self._current / self._total, 1.0)
260
+ self._progress.progress(
261
+ value=percent,
262
+ text=f'{self._description} [{self._current}/{self._total}]',
263
+ )
264
+
265
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
266
+ super().__exit__(exc_type, exc_val, exc_tb)
267
+
268
+ if not self.verbose or self._status is None or self.depth > 1:
269
+ return
270
+
271
+ label = f'{self._sanitize_text(self.msg)} ({self.duration:.2f}s)'
272
+
273
+ if exc_type is not None:
274
+ self._status.update(
275
+ label=f':red[{label}]',
276
+ state='error',
277
+ expanded=True,
278
+ )
279
+ else:
280
+ self._status.update(
281
+ label=f':green[{label}]',
282
+ state='complete',
283
+ expanded=True,
284
+ )
285
+
286
+ @staticmethod
287
+ def _sanitize_text(msg: str) -> str:
288
+ return re.sub(r'\[/?bold\]', '**', msg)
289
+
290
+
291
+ STREAMLIT_CSS = """
292
+ <style>
293
+ /* Fix horizontal scrollbar */
294
+ .stExpander summary {
295
+ width: auto;
296
+ }
297
+
298
+ /* Fix paddings/margins */
299
+ .stExpander summary {
300
+ padding: 0.75rem 1rem 0.5rem;
301
+ }
302
+ .stExpander p {
303
+ margin: 0px 0px 0.2rem;
304
+ }
305
+ .stExpander [data-testid="stExpanderDetails"] {
306
+ padding-bottom: 1.45rem;
307
+ }
308
+ .stExpander .stProgress div:first-child {
309
+ padding-bottom: 4px;
310
+ }
311
+
312
+ /* Fix expand icon position */
313
+ .stExpander summary svg {
314
+ height: 1.5rem;
315
+ }
316
+
317
+ /* Fix summary icons */
318
+ .stExpander summary [data-testid="stExpanderIconCheck"] {
319
+ font-size: 1.8rem;
320
+ margin-top: -3px;
321
+ color: rgb(21, 130, 55);
322
+ }
323
+ .stExpander summary [data-testid="stExpanderIconError"] {
324
+ font-size: 1.8rem;
325
+ margin-top: -3px;
326
+ color: rgb(255, 43, 43);
327
+ }
328
+ .stExpander summary span:first-child span:first-child {
329
+ width: 1.6rem;
330
+ }
331
+
332
+ /* Add border between title and content */
333
+ .stExpander [data-testid="stExpanderDetails"] {
334
+ border-top: 1px solid rgba(30, 37, 47, 0.2);
335
+ padding-top: 0.5rem;
336
+ }
337
+
338
+ /* Fix title font size */
339
+ .stExpander summary p {
340
+ font-size: 1rem;
341
+ }
342
+
343
+ /* Gray out content */
344
+ .stExpander [data-testid="stExpanderDetails"] {
345
+ color: rgba(30, 37, 47, 0.5);
346
+ }
347
+
348
+ /* Fix progress bar font size */
349
+ .stExpander .stProgress p {
350
+ line-height: 1.6;
351
+ font-size: 1rem;
352
+ color: rgba(30, 37, 47, 0.5);
353
+ }
354
+ </style>
355
+ """
kumoai/utils/sql.py ADDED
@@ -0,0 +1,3 @@
1
+ def quote_ident(name: str) -> str:
2
+ r"""Quotes a SQL identifier."""
3
+ return '"' + name.replace('"', '""') + '"'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kumoai
3
- Version: 2.13.0.dev202512040649
3
+ Version: 2.14.0.dev202601081732
4
4
  Summary: AI on the Modern Data Stack
5
5
  Author-email: "Kumo.AI" <hello@kumo.ai>
6
6
  License-Expression: MIT
@@ -23,7 +23,7 @@ Requires-Dist: requests>=2.28.2
23
23
  Requires-Dist: urllib3
24
24
  Requires-Dist: plotly
25
25
  Requires-Dist: typing_extensions>=4.5.0
26
- Requires-Dist: kumo-api==0.48.0
26
+ Requires-Dist: kumo-api==0.49.0
27
27
  Requires-Dist: tqdm>=4.66.0
28
28
  Requires-Dist: aiohttp>=3.10.0
29
29
  Requires-Dist: pydantic>=1.10.21
@@ -41,6 +41,7 @@ Requires-Dist: requests-mock; extra == "test"
41
41
  Provides-Extra: sqlite
42
42
  Requires-Dist: adbc_driver_sqlite; extra == "sqlite"
43
43
  Provides-Extra: snowflake
44
+ Requires-Dist: numpy<2.0; extra == "snowflake"
44
45
  Requires-Dist: snowflake-connector-python; extra == "snowflake"
45
46
  Requires-Dist: pyyaml; extra == "snowflake"
46
47
  Provides-Extra: sagemaker
@@ -1,26 +1,26 @@
1
- kumoai/__init__.py,sha256=qu-qohU2cQlManX1aZIlzA3ivKl52m-cSQBPSW8urUU,10837
1
+ kumoai/__init__.py,sha256=cKL7QeT-b5OHi75jtvFzbIKGjeJV5Tago7jKLX0nuYE,11207
2
2
  kumoai/_logging.py,sha256=qL4JbMQwKXri2f-SEJoFB8TY5ALG12S-nobGTNWxW-A,915
3
3
  kumoai/_singleton.py,sha256=i2BHWKpccNh5SJGDyU0IXsnYzJAYr8Xb0wz4c6LRbpo,861
4
- kumoai/_version.py,sha256=H2bfnVm1HSraI2mZWT2HRl3nFNJTW5mZUgbAWiVcfug,39
4
+ kumoai/_version.py,sha256=kzdldxHHR5QHfvOxMMZW6iK135Mpc7XrTltLFgYNQws,39
5
5
  kumoai/databricks.py,sha256=ahwJz6DWLXMkndT0XwEDBxF-hoqhidFR8wBUQ4TLZ68,490
6
6
  kumoai/exceptions.py,sha256=7TMs0SC8xrU009_Pgd4QXtSF9lxJq8MtRbeX9pcQUy4,859
7
7
  kumoai/formatting.py,sha256=o3uCnLwXPhe1KI5WV9sBgRrcU7ed4rgu_pf89GL9Nc0,983
8
8
  kumoai/futures.py,sha256=J8rtZMEYFzdn5xF_x-LAiKJz3KGL6PT02f6rq_2bOJk,3836
9
9
  kumoai/jobs.py,sha256=dCi7BAdfm2tCnonYlGU4WJokJWbh3RzFfaOX2EYCIHU,2576
10
- kumoai/kumolib.cp313-win_amd64.pyd,sha256=2kSNHb8iWibK953x_X8kM7YA5DH2HWFkEkL3nR5jn50,198144
10
+ kumoai/kumolib.cp313-win_amd64.pyd,sha256=hvnQnFCKpDyjgNu-pYLOFmRwl8KjNHrYn4VTaDS8-g4,198144
11
11
  kumoai/mixin.py,sha256=IaiB8SAI0VqOoMVzzIaUlqMt53-QPUK6OB0HikG-V9E,840
12
12
  kumoai/spcs.py,sha256=KWfENrwSLruprlD-QPh63uU0N6npiNrwkeKfBk3EUyQ,4260
13
13
  kumoai/artifact_export/__init__.py,sha256=UXAQI5q92ChBzWAk8o3J6pElzYHudAzFZssQXd4o7i8,247
14
14
  kumoai/artifact_export/config.py,sha256=PRoUByzu5l-nyBKFR4vnRlq19b53ExGVy8YDCD7zMuI,8233
15
15
  kumoai/artifact_export/job.py,sha256=lOFIdPCrvhwdfvvDhQ2yzW8J4qIdYQoHZO1Rz3kJky4,3383
16
16
  kumoai/client/__init__.py,sha256=v0ISO1QD8JJhIJS6IzWz5-SL3EhtNCPeX3j1b2HBY0s,69
17
- kumoai/client/client.py,sha256=T6Kw7-XWuAy5Dh7XU5graBl1-cTARiobycwtgxzaSE8,8731
17
+ kumoai/client/client.py,sha256=cabrXk8fPPrXsTDoWiBsZnXNpZsH3Ap2gk5pyVqxO9Y,8938
18
18
  kumoai/client/connector.py,sha256=CO2LG5aDpCLxWNYYFRXGZs1AhYH3dRcbqBEUGwHQGzQ,4030
19
19
  kumoai/client/endpoints.py,sha256=DpEKEQ1yvL15iHZadXZKO94t-qXrYLaeV1sknX4IuPg,5532
20
20
  kumoai/client/graph.py,sha256=6MFyPYxDPfGTWeAI_84RUgWx9rVvqbLnR0Ourtgj5rg,3951
21
- kumoai/client/jobs.py,sha256=Y8wKiTk1I5ywc-2cxR72LaBjfhPTCVOezSCTeDpTs8Q,17521
21
+ kumoai/client/jobs.py,sha256=SF99fbSEGo-O6MLDWRN1kEaOiiGuv5IeUJjE0exrJuw,18637
22
22
  kumoai/client/online.py,sha256=4s_8Sv8m_k_tty4CO7RuAt0e6BDMkGvsZZ3VX8zyDb8,2798
23
- kumoai/client/pquery.py,sha256=0pXgQLxjoaFWDif0XRAuC_P-X3OSnXNWsiVrXej9uMk,7094
23
+ kumoai/client/pquery.py,sha256=8hBT44-1gc2QoO-tjdDsJXJA4mLO1thmS27b4XDlUUY,7298
24
24
  kumoai/client/rfm.py,sha256=Gmt_dqoXekBCLiF0eQPgpoJ1cbnhnU8VbINF3U13qbQ,3838
25
25
  kumoai/client/source_table.py,sha256=mMHJtQ_yUHRI9LdHLVHxNGt83bbzmC1_d-NmXjbiTuI,2154
26
26
  kumoai/client/table.py,sha256=VhjLEMLQS1Z7zjcb2Yt3gZfiVqiD7b1gj-WNux_504A,3336
@@ -50,62 +50,73 @@ kumoai/connector/glue_connector.py,sha256=kqT2q53Da7PeeaZrvLVzFXC186E7glh5eGitKL
50
50
  kumoai/connector/s3_connector.py,sha256=AUzENbQ20bYXh3XOXEOsWRKlaGGkm3YrW9JfBLm-LqY,10433
51
51
  kumoai/connector/snowflake_connector.py,sha256=tQzIWxC4oDGqxFt0212w5eoIPT4QBP2nuF9SdKRNwNI,9274
52
52
  kumoai/connector/source_table.py,sha256=fnqwIKY6qYo4G0EsRzchb6FgZ-dQyU6aRaD9UAxsml0,18010
53
- kumoai/connector/utils.py,sha256=5K9BMdWiIP3hhdkUc6Xt1e0xv5YyziXtZ4PnBqq0Ehw,66490
53
+ kumoai/connector/utils.py,sha256=vxr5sVHAMucqlI3Xz5jfQ-uN_fa0KE2qcOY6c7TiUoU,66865
54
54
  kumoai/encoder/__init__.py,sha256=8FeP6mUyCeXxr1b8kUIi5dxe5vEXQRft9tPoaV1CBqg,186
55
55
  kumoai/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- kumoai/experimental/rfm/__init__.py,sha256=EFZz6IvvskmeO85Vig6p1m_6jdimS_BkeREOndHuRsc,6247
57
- kumoai/experimental/rfm/authenticate.py,sha256=G89_4TMeUpr5fG_0VTzMF5sdNhaciitA1oc2loTlTmo,19321
58
- kumoai/experimental/rfm/graph.py,sha256=kSWve-Fn_9qERFjEpCDO5zDnngtd9T4MOhR_o46PI7s,39602
59
- kumoai/experimental/rfm/local_graph_sampler.py,sha256=dQ3JnuozTNeZyUFRu2h8OTMNmV1RAoaCA0gvkpgOstg,8110
60
- kumoai/experimental/rfm/local_graph_store.py,sha256=6jY1ciVIlnBBhZCxWwBTl7SKX1fxRIDLszwrftD0Cdk,13485
61
- kumoai/experimental/rfm/local_pquery_driver.py,sha256=Yd_yHIrvuDj16IC1pvsqiQvZS41vvOOCRMiuDGtN6Fk,26851
62
- kumoai/experimental/rfm/rfm.py,sha256=vOnL8ecHTo1TX2B8_T8xaWGou8qYYz8DyVENu1H93mM,48834
63
- kumoai/experimental/rfm/sagemaker.py,sha256=sEJSyfEFBA3-7wKinBEzSooKHEn0BgPjrgRnPhYo79g,5120
56
+ kumoai/experimental/rfm/__init__.py,sha256=dibc0t7g-PYanT90TncRlceD0ZqxtKStVdzzG1_cXC8,7226
57
+ kumoai/experimental/rfm/authenticate.py,sha256=odKaqOAEkdC_wB340cs_ozjSvQLTce45WLiJSEzQaL8,19283
58
+ kumoai/experimental/rfm/graph.py,sha256=LHPJQyTSf_traFDX2AZj9ylpP69aATIB-TCDh_mj_gc,47583
59
+ kumoai/experimental/rfm/relbench.py,sha256=30O7QAKYcMgr6C9Qpgev7gxSMAtWXop25p7DtmzrBlE,2352
60
+ kumoai/experimental/rfm/rfm.py,sha256=D67eDTSHDkpCm1dPJAZcLZKyKc26AdT4REU1g0xk5hs,61047
61
+ kumoai/experimental/rfm/sagemaker.py,sha256=7Yk4um0gBBn7u-Bz8JRv53z0__FcD0uESoiImJhxsBw,5101
62
+ kumoai/experimental/rfm/task_table.py,sha256=4sx9z6JhHQVQaPAlbyfDwbyOBApOUs6SEXHHcfsdxl0,10139
64
63
  kumoai/experimental/rfm/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- kumoai/experimental/rfm/backend/local/__init__.py,sha256=usMh0fuDxKK-aOVT1sU30BQWFS0eSkfUrhUVILisQQI,934
66
- kumoai/experimental/rfm/backend/local/table.py,sha256=1PqNOROzlnK3SaZHNcU2hyzeifs0N4wssQAS3-Z0Myc,3674
67
- kumoai/experimental/rfm/backend/snow/__init__.py,sha256=viMeR9VWpB1kjRdSWCTNFMdM7a8Mj_Dtck1twJW8dV8,962
68
- kumoai/experimental/rfm/backend/snow/table.py,sha256=HVrPtCVvfsisFmq9jMovowsE5Wl5oti3O-kru7ruXlc,4312
69
- kumoai/experimental/rfm/backend/sqlite/__init__.py,sha256=xw5NNLrWSvUvRkD49X_9hZYjas5EuP1XDANPy0EEjOg,874
70
- kumoai/experimental/rfm/backend/sqlite/table.py,sha256=mBiZC21gQwfR4demFrP37GmawMHfIm-G82mLQeBqIZo,3901
71
- kumoai/experimental/rfm/base/__init__.py,sha256=oXPkeBemtuDxRUK61-0sOT84GZB_oQ6HvaZNU1KFNaw,199
72
- kumoai/experimental/rfm/base/column.py,sha256=OE-PRQ8HO4uTq0e3_3eHJFfhp5nzw79zd-43g3iMh4g,2385
73
- kumoai/experimental/rfm/base/source.py,sha256=H5yN9xAwK3i_69EdqOV_x58muPGKQiI8ev5BhHQDZEo,290
74
- kumoai/experimental/rfm/base/table.py,sha256=glyAg4LCQdddM3lIRClJSA7qMyfoHUVAGBf1rEs6B8Y,20113
75
- kumoai/experimental/rfm/infer/__init__.py,sha256=qKg8or-SpgTApD6ePw1PJ4aUZPrOLTHLRCmBIJ92hrk,486
64
+ kumoai/experimental/rfm/backend/local/__init__.py,sha256=8JbLaai0yhtldFcDkddphIJKMiKc0XnodvYBWkrGPXI,1056
65
+ kumoai/experimental/rfm/backend/local/graph_store.py,sha256=fmBOdXK6a7hHqfB5NqpcGB8GTH60pEbTn7hZJcJi6yk,11591
66
+ kumoai/experimental/rfm/backend/local/sampler.py,sha256=tD3l5xfcxjsWDaC45V-xOAI_-Jyyk_au-E7wyrMqCx4,11038
67
+ kumoai/experimental/rfm/backend/local/table.py,sha256=86lztrVxdpya25X4r8mR2c_t-tI8gAEyahz-mNmk9tA,3602
68
+ kumoai/experimental/rfm/backend/snow/__init__.py,sha256=lsF0sJXZ0Pc3NvBTBXJHudp-iZJXdidrhyqFQKEU5_Q,1030
69
+ kumoai/experimental/rfm/backend/snow/sampler.py,sha256=9mtVpsyBYjPxWjBbqyoDLJlhttTnbOLwm3ixA9cTpKw,14707
70
+ kumoai/experimental/rfm/backend/snow/table.py,sha256=ZEaHsTV7dt4aS1Wp_4gYV475Ysyr7icRVlyKxKrjh7o,9134
71
+ kumoai/experimental/rfm/backend/sqlite/__init__.py,sha256=wkSr2D_E5VCH4RGW8FCN2iJp-6wb_RTCMO8R3p5lkiw,934
72
+ kumoai/experimental/rfm/backend/sqlite/sampler.py,sha256=l6Ht8nXWKLjbmwDESmYKWhwVO_sbgx-YtYZ0uaO24gM,19112
73
+ kumoai/experimental/rfm/backend/sqlite/table.py,sha256=nH3S3lBVfG6aWp0DtCUVJRBZhlQV4ieskbz-5D0AlG0,6867
74
+ kumoai/experimental/rfm/base/__init__.py,sha256=is8HTLng28h5AtpledQ-hdIheGM052JdBhjv8HtKhDw,754
75
+ kumoai/experimental/rfm/base/column.py,sha256=JeDKSZnTChFHMaIC3TcEgdPG9Rr2PATTAMIMhjnvXrs,5117
76
+ kumoai/experimental/rfm/base/expression.py,sha256=04NgmrrvjM1yFXnOMDZtb5V1-oFufqCamv2KTETOHik,1296
77
+ kumoai/experimental/rfm/base/sampler.py,sha256=yTAUGRL_UmZVsj7ctf2W1DtciQLNrktwtU9Qd_wE52A,32673
78
+ kumoai/experimental/rfm/base/source.py,sha256=67rpePejkZli4B_eDWzDrn_8Q5Msyo2XZ9F8IGB0ImI,320
79
+ kumoai/experimental/rfm/base/sql_sampler.py,sha256=Wd60cvIs06WkW13Jh64QtAgQCEbA5M_7Rde473Jh_SU,9605
80
+ kumoai/experimental/rfm/base/table.py,sha256=5tVaTFTBlUoP_-2I0IdFonmpFRzlwQe0vGthkApQucM,27629
81
+ kumoai/experimental/rfm/infer/__init__.py,sha256=Uf4Od7B2G80U61mkkxsnxHPGu1Hh2RqOazTkOYtNLvA,538
76
82
  kumoai/experimental/rfm/infer/categorical.py,sha256=bqmfrE5ZCBTcb35lA4SyAkCu3MgttAn29VBJYMBNhVg,893
77
- kumoai/experimental/rfm/infer/dtype.py,sha256=Hf_drluYNuN59lTSe-8GuXalg20Pv93kCktB6Hb9f74,2686
83
+ kumoai/experimental/rfm/infer/dtype.py,sha256=LnAazTqfic0SOH0Py_ooXvVxXR5OVi6-Og1L_9lMOZc,2864
78
84
  kumoai/experimental/rfm/infer/id.py,sha256=xaJBETLZa8ttzZCsDwFSwfyCi3VYsLc_kDWT_t_6Ih4,954
79
- kumoai/experimental/rfm/infer/multicategorical.py,sha256=D-1KwYRkOSkBrOJr4Xa3eTCoAF9O9hPGa7Vg67V5_HU,1150
80
- kumoai/experimental/rfm/infer/pkey.py,sha256=Hvztcircd4iGdsnFU9Xi1kq_A5ONMnkAdnrpQT5svSs,4519
81
- kumoai/experimental/rfm/infer/time_col.py,sha256=G98Cgz1m9G9VA-ApnCmGYnJxEFwp1jfaPf3nCMOz_N0,1882
85
+ kumoai/experimental/rfm/infer/multicategorical.py,sha256=mMuRCbfs0zsfOoPB_eCs6nlt4WgNPvklmYPRq7w85L4,1167
86
+ kumoai/experimental/rfm/infer/pkey.py,sha256=GCAUN8Hz5-leVv2-H8soP3k-DsXJ1O_uQU25-CsSWN0,4540
87
+ kumoai/experimental/rfm/infer/stype.py,sha256=lOgiGJ_rsaeiFWyVUw0IMwn_7hGOqL8mvy2rGzXfi3Q,929
88
+ kumoai/experimental/rfm/infer/time_col.py,sha256=-OJbjHxD05UuSF2ePBkywzm-h2Qd9kC4BEFaHuglUbs,1850
82
89
  kumoai/experimental/rfm/infer/timestamp.py,sha256=L2VxjtYTSyUBYAo4M-L08xSQlPpqnHMAVF5_vxjh3Y0,1135
83
90
  kumoai/experimental/rfm/pquery/__init__.py,sha256=RkTn0I74uXOUuOiBpa6S-_QEYctMutkUnBEfF9ztQzI,159
84
- kumoai/experimental/rfm/pquery/executor.py,sha256=S8wwXbAkH-YSnmEVYB8d6wyJF4JJ003mH_0zFTvOp_I,2843
85
- kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=QQpOZ_ArH3eSAkenaY3J-gW1Wn5A7f85RiqZxaO5u1Q,19019
91
+ kumoai/experimental/rfm/pquery/executor.py,sha256=mz5mqhHbgZM0f5oNFLyThWGM4UePx_kd1O4zyJ_8ToQ,2830
92
+ kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=awZSp41i0qTPzMowWJ1-FY4rbpTH7hxMeV91drEPfUQ,18984
86
93
  kumoai/graph/__init__.py,sha256=QGk3OMwRzQJSGESdcc7hcQH6UDmNVJYTdqnRren4c7Q,240
87
94
  kumoai/graph/column.py,sha256=cQhioibTbIKIBZ-bf8-Bt4F4Iblhidps-CYWrkxRPnE,4295
88
95
  kumoai/graph/graph.py,sha256=Pq-dxi4MwoDtrrwm3xeyUB9Hl7ryNfHq4rMHuvyNB3c,39239
89
96
  kumoai/graph/table.py,sha256=BB-4ezyd7hrrj6QZwRBa80ySH0trwYb4fmhRn3xoK-k,34726
90
97
  kumoai/pquery/__init__.py,sha256=FF6QUTG_xrz2ic1I8NcIa8O993Ae98eZ9gkvQ4rapgo,558
91
98
  kumoai/pquery/prediction_table.py,sha256=hWG4L_ze4PLgUoxCXNKk8_nkYxVXELQs8_X8KGOE9yk,11063
92
- kumoai/pquery/predictive_query.py,sha256=GWhQpQxf6apyyu-bvE3z63mX6NLd8lKbyu_jzj7rNms,25608
93
- kumoai/pquery/training_table.py,sha256=L1QjaVlY4SAPD8OUmTaH6YjZzBbPOnS9mnAT69znWv0,16233
99
+ kumoai/pquery/predictive_query.py,sha256=I5Ntc7YO1qEGxKrLuhAzZO3SySr8Wnjhde8eDbbB7zk,25542
100
+ kumoai/pquery/training_table.py,sha256=ex5FpA4_rY5OSIl2koisQENFoPbTz2PmG-DR3rvnysg,17004
94
101
  kumoai/testing/__init__.py,sha256=XBQ_Sa3WnOYlpXZ3gUn8w6nVfZt-nfPhytfIBeiPt4w,178
95
102
  kumoai/testing/decorators.py,sha256=p79ZCQqPY_MHWy0_l7-xQ6wUIqFTn4AbrGWTHLvpbQY,1664
103
+ kumoai/testing/snow.py,sha256=i0m8y7ciqUnQeP1Xe_-bOxVh_xyAuuyz_rTEHJFkYY0,1537
96
104
  kumoai/trainer/__init__.py,sha256=uCFXy9bw_byn_wYd3M-BTZCHTVvv4XXr8qRlh-QOvag,981
97
105
  kumoai/trainer/baseline_trainer.py,sha256=oXweh8j1sar6KhQfr3A7gmQxcDq7SG0Bx3jIenbtyC4,4117
98
106
  kumoai/trainer/config.py,sha256=7_Jv1w1mqaokCQwQdJkqCSgVpmh8GqE3fL1Ky_vvttI,100
107
+ kumoai/trainer/distilled_trainer.py,sha256=hdZWi1_6bxNBDwHGmEMXTYtFUwC0JiDLozOR8zQvBBY,6659
99
108
  kumoai/trainer/job.py,sha256=IBP2SeIk21XpRK1Um1NIs2dEKid319cHu6UkCjKO6jc,46130
100
109
  kumoai/trainer/online_serving.py,sha256=T1jicl-qXiiWGQWUCwlfQsyxWUODybj_975gx9yglH4,9824
101
110
  kumoai/trainer/trainer.py,sha256=AKumc3X2Vm3qxZSA85Dv_fSLC4JQ3rM7P0ixOWbEex0,20608
102
111
  kumoai/trainer/util.py,sha256=LCXkY5MNl6NbEVd2OZ0aVqF6fvr3KiCFh6pH0igAi_g,4165
103
- kumoai/utils/__init__.py,sha256=wAKgmwtMIGuiauW9D_GGKH95K-24Kgwmld27mm4nsro,278
112
+ kumoai/utils/__init__.py,sha256=lazi9gAl5YBg1Nk121zSDg-BIKTVETjFTZwTFUlGngo,267
104
113
  kumoai/utils/datasets.py,sha256=UyAII-oAn7x3ombuvpbSQ41aVF9SYKBjQthTD-vcT2A,3011
114
+ kumoai/utils/display.py,sha256=oPNcXLUUnSKo0m2Hxc330QFPPtnV-wjJMjKoBseB1HY,2519
105
115
  kumoai/utils/forecasting.py,sha256=ZgKeUCbWLOot0giAkoigwU5du8LkrwAicFOi5hVn6wg,7624
106
- kumoai/utils/progress_logger.py,sha256=MZsWgHd4UZQKCXiJZgQeW-Emi_BmzlCKPLPXOL_HqBo,5239
107
- kumoai-2.13.0.dev202512040649.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
108
- kumoai-2.13.0.dev202512040649.dist-info/METADATA,sha256=WKQQ5DZOBPmZb92KBCid5QIQp0cB2RM_AAahN0BdC60,2580
109
- kumoai-2.13.0.dev202512040649.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
110
- kumoai-2.13.0.dev202512040649.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
111
- kumoai-2.13.0.dev202512040649.dist-info/RECORD,,
116
+ kumoai/utils/progress_logger.py,sha256=UYVaPhY6BFVhV48bYeMWMtYWRJFPvnQq2UqkZhLbzFQ,9860
117
+ kumoai/utils/sql.py,sha256=a9HT5IIUaXfbQaLbZ2HuuYHLBDev_cer1Tzif7xE-R4,121
118
+ kumoai-2.14.0.dev202601081732.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
119
+ kumoai-2.14.0.dev202601081732.dist-info/METADATA,sha256=vYTHC9RcmY73aISUFIuzPUuvQzTRYYo6tAb8rgMjUBY,2628
120
+ kumoai-2.14.0.dev202601081732.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
121
+ kumoai-2.14.0.dev202601081732.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
122
+ kumoai-2.14.0.dev202601081732.dist-info/RECORD,,