kumoai 2.13.0.dev202512040252__cp310-cp310-win_amd64.whl → 2.15.0.dev202601141731__cp310-cp310-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 (56) 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 +407 -0
  15. kumoai/experimental/rfm/backend/snow/table.py +181 -51
  16. kumoai/experimental/rfm/backend/sqlite/__init__.py +4 -2
  17. kumoai/experimental/rfm/backend/sqlite/sampler.py +456 -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/mapper.py +69 -0
  23. kumoai/experimental/rfm/base/sampler.py +783 -0
  24. kumoai/experimental/rfm/base/source.py +2 -1
  25. kumoai/experimental/rfm/base/sql_sampler.py +385 -0
  26. kumoai/experimental/rfm/base/table.py +385 -203
  27. kumoai/experimental/rfm/base/utils.py +36 -0
  28. kumoai/experimental/rfm/graph.py +374 -172
  29. kumoai/experimental/rfm/infer/__init__.py +6 -4
  30. kumoai/experimental/rfm/infer/dtype.py +10 -5
  31. kumoai/experimental/rfm/infer/multicategorical.py +1 -1
  32. kumoai/experimental/rfm/infer/pkey.py +4 -2
  33. kumoai/experimental/rfm/infer/stype.py +35 -0
  34. kumoai/experimental/rfm/infer/time_col.py +5 -4
  35. kumoai/experimental/rfm/pquery/executor.py +27 -27
  36. kumoai/experimental/rfm/pquery/pandas_executor.py +30 -32
  37. kumoai/experimental/rfm/relbench.py +76 -0
  38. kumoai/experimental/rfm/rfm.py +770 -467
  39. kumoai/experimental/rfm/sagemaker.py +4 -4
  40. kumoai/experimental/rfm/task_table.py +292 -0
  41. kumoai/kumolib.cp310-win_amd64.pyd +0 -0
  42. kumoai/pquery/predictive_query.py +10 -6
  43. kumoai/pquery/training_table.py +16 -2
  44. kumoai/testing/snow.py +50 -0
  45. kumoai/trainer/distilled_trainer.py +175 -0
  46. kumoai/utils/__init__.py +3 -2
  47. kumoai/utils/display.py +87 -0
  48. kumoai/utils/progress_logger.py +192 -13
  49. kumoai/utils/sql.py +3 -0
  50. {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.15.0.dev202601141731.dist-info}/METADATA +3 -2
  51. {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.15.0.dev202601141731.dist-info}/RECORD +54 -41
  52. kumoai/experimental/rfm/local_graph_sampler.py +0 -223
  53. kumoai/experimental/rfm/local_pquery_driver.py +0 -689
  54. {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.15.0.dev202601141731.dist-info}/WHEEL +0 -0
  55. {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.15.0.dev202601141731.dist-info}/licenses/LICENSE +0 -0
  56. {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.15.0.dev202601141731.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,20 @@ 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:
41
- self.start_time = time.perf_counter()
59
+ self.depth += 1
60
+ if self.depth == 1:
61
+ self.start_time = time.perf_counter()
42
62
  return self
43
63
 
44
64
  def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
65
+ self.depth -= 1
45
66
  self.end_time = time.perf_counter()
46
67
 
47
68
  def __repr__(self) -> str:
@@ -66,22 +87,21 @@ class ColoredTimeRemainingColumn(TimeRemainingColumn):
66
87
  return Text(str(super().render(task)), style=self.style)
67
88
 
68
89
 
69
- class InteractiveProgressLogger(ProgressLogger):
90
+ class RichProgressLogger(ProgressLogger):
70
91
  def __init__(
71
92
  self,
72
93
  msg: str,
73
94
  verbose: bool = True,
74
95
  refresh_per_second: int = 10,
75
96
  ) -> None:
76
- super().__init__(msg=msg)
97
+ super().__init__(msg=msg, verbose=verbose)
77
98
 
78
- self.verbose = verbose
79
99
  self.refresh_per_second = refresh_per_second
80
100
 
81
- self._progress: Optional[Progress] = None
82
- self._task: Optional[int] = None
101
+ self._progress: Progress | None = None
102
+ self._task: int | None = None
83
103
 
84
- self._live: Optional[Live] = None
104
+ self._live: Live | None = None
85
105
  self._exception: bool = False
86
106
 
87
107
  def init_progress(self, total: int, description: str) -> None:
@@ -107,6 +127,9 @@ class InteractiveProgressLogger(ProgressLogger):
107
127
 
108
128
  super().__enter__()
109
129
 
130
+ if self.depth > 1:
131
+ return self
132
+
110
133
  if not in_notebook(): # Render progress bar in TUI.
111
134
  sys.stdout.write("\x1b]9;4;3\x07")
112
135
  sys.stdout.flush()
@@ -126,6 +149,9 @@ class InteractiveProgressLogger(ProgressLogger):
126
149
 
127
150
  super().__exit__(exc_type, exc_val, exc_tb)
128
151
 
152
+ if self.depth > 1:
153
+ return
154
+
129
155
  if exc_type is not None:
130
156
  self._exception = True
131
157
 
@@ -151,7 +177,7 @@ class InteractiveProgressLogger(ProgressLogger):
151
177
 
152
178
  table = Table.grid(padding=(0, 1))
153
179
 
154
- icon: Union[Text, Padding]
180
+ icon: Text | Padding
155
181
  if self._exception:
156
182
  style = 'red'
157
183
  icon = Text('❌', style=style)
@@ -175,3 +201,156 @@ class InteractiveProgressLogger(ProgressLogger):
175
201
 
176
202
  if self.verbose and self._progress is not None:
177
203
  yield self._progress.get_renderable()
204
+
205
+
206
+ class StreamlitProgressLogger(ProgressLogger):
207
+ def __init__(
208
+ self,
209
+ msg: str,
210
+ verbose: bool = True,
211
+ ) -> None:
212
+ super().__init__(msg=msg, verbose=verbose)
213
+
214
+ self._status: Any = None
215
+
216
+ self._total = 0
217
+ self._current = 0
218
+ self._description: str = ''
219
+ self._progress: Any = None
220
+
221
+ def __enter__(self) -> Self:
222
+ super().__enter__()
223
+
224
+ import streamlit as st
225
+
226
+ if self.depth > 1:
227
+ return self
228
+
229
+ # Adjust layout for prettier output:
230
+ st.markdown(STREAMLIT_CSS, unsafe_allow_html=True)
231
+
232
+ if self.verbose:
233
+ self._status = st.status(
234
+ f':blue[{self._sanitize_text(self.msg)}]',
235
+ expanded=True,
236
+ )
237
+
238
+ return self
239
+
240
+ def log(self, msg: str) -> None:
241
+ super().log(msg)
242
+ if self.verbose and self._status is not None:
243
+ self._status.write(self._sanitize_text(msg))
244
+
245
+ def init_progress(self, total: int, description: str) -> None:
246
+ if self.verbose and self._status is not None:
247
+ self._total = total
248
+ self._current = 0
249
+ self._description = self._sanitize_text(description)
250
+ percent = min(self._current / self._total, 1.0)
251
+ self._progress = self._status.progress(
252
+ value=percent,
253
+ text=f'{self._description} [{self._current}/{self._total}]',
254
+ )
255
+
256
+ def step(self) -> None:
257
+ self._current += 1
258
+
259
+ if self.verbose and self._progress is not None:
260
+ percent = min(self._current / self._total, 1.0)
261
+ self._progress.progress(
262
+ value=percent,
263
+ text=f'{self._description} [{self._current}/{self._total}]',
264
+ )
265
+
266
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
267
+ super().__exit__(exc_type, exc_val, exc_tb)
268
+
269
+ if not self.verbose or self._status is None or self.depth > 1:
270
+ return
271
+
272
+ label = f'{self._sanitize_text(self.msg)} ({self.duration:.2f}s)'
273
+
274
+ if exc_type is not None:
275
+ self._status.update(
276
+ label=f':red[{label}]',
277
+ state='error',
278
+ expanded=True,
279
+ )
280
+ else:
281
+ self._status.update(
282
+ label=f':green[{label}]',
283
+ state='complete',
284
+ expanded=True,
285
+ )
286
+
287
+ @staticmethod
288
+ def _sanitize_text(msg: str) -> str:
289
+ return re.sub(r'\[/?bold\]', '**', msg)
290
+
291
+
292
+ STREAMLIT_CSS = """
293
+ <style>
294
+ /* Fix horizontal scrollbar */
295
+ .stExpander summary {
296
+ width: auto;
297
+ }
298
+
299
+ /* Fix paddings/margins */
300
+ .stExpander summary {
301
+ padding: 0.75rem 1rem 0.5rem;
302
+ }
303
+ .stExpander p {
304
+ margin: 0px 0px 0.2rem;
305
+ }
306
+ .stExpander [data-testid="stExpanderDetails"] {
307
+ padding-bottom: 1.45rem;
308
+ }
309
+ .stExpander .stProgress div:first-child {
310
+ padding-bottom: 4px;
311
+ }
312
+
313
+ /* Fix expand icon position */
314
+ .stExpander summary svg {
315
+ height: 1.5rem;
316
+ }
317
+
318
+ /* Fix summary icons */
319
+ .stExpander summary [data-testid="stExpanderIconCheck"] {
320
+ font-size: 1.8rem;
321
+ margin-top: -3px;
322
+ color: rgb(21, 130, 55);
323
+ }
324
+ .stExpander summary [data-testid="stExpanderIconError"] {
325
+ font-size: 1.8rem;
326
+ margin-top: -3px;
327
+ color: rgb(255, 43, 43);
328
+ }
329
+ .stExpander summary span:first-child span:first-child {
330
+ width: 1.6rem;
331
+ }
332
+
333
+ /* Add border between title and content */
334
+ .stExpander [data-testid="stExpanderDetails"] {
335
+ border-top: 1px solid rgba(30, 37, 47, 0.2);
336
+ padding-top: 0.5rem;
337
+ }
338
+
339
+ /* Fix title font size */
340
+ .stExpander summary p {
341
+ font-size: 1rem;
342
+ }
343
+
344
+ /* Gray out content */
345
+ .stExpander [data-testid="stExpanderDetails"] {
346
+ color: rgba(30, 37, 47, 0.5);
347
+ }
348
+
349
+ /* Fix progress bar font size */
350
+ .stExpander .stProgress p {
351
+ line-height: 1.6;
352
+ font-size: 1rem;
353
+ color: rgba(30, 37, 47, 0.5);
354
+ }
355
+ </style>
356
+ """
kumoai/utils/sql.py ADDED
@@ -0,0 +1,3 @@
1
+ def quote_ident(ident: str, char: str = '"') -> str:
2
+ r"""Quotes a SQL identifier."""
3
+ return char + ident.replace(char, char + char) + char
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kumoai
3
- Version: 2.13.0.dev202512040252
3
+ Version: 2.15.0.dev202601141731
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<1.0.0,>=0.53.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=16u1rVm-N2IEE7QbyS9U5nn_hjp7P_wxBIQzzAKSnDA,39
4
+ kumoai/_version.py,sha256=wpyPfyXQ1IsCHkvXkWcLPeI-fP3hV5kKRytLtRx7M5g,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.cp310-win_amd64.pyd,sha256=3iE0thfrVDx0Yhh0I0li-BwZcIpQfRpaYxYMsSpYofc,194048
10
+ kumoai/kumolib.cp310-win_amd64.pyd,sha256=iS6g8nVEGE8mZX2hJscPOAVU22jWFF-nTbGkb6QTel0,194048
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,75 @@ 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=l31iaWoDujjmPilzTbh8BL_Ajlvpg4TSTYdnkbelsIg,61436
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=qmjhO_Nz9cCiqmMCesw6PCGwFfY6705EkOdireHI0KM,16729
70
+ kumoai/experimental/rfm/backend/snow/table.py,sha256=5F_E3E4pGelFwbGe0zhXH31BZa5qZnDec0Uxtn38d2M,9323
71
+ kumoai/experimental/rfm/backend/sqlite/__init__.py,sha256=wkSr2D_E5VCH4RGW8FCN2iJp-6wb_RTCMO8R3p5lkiw,934
72
+ kumoai/experimental/rfm/backend/sqlite/sampler.py,sha256=3vt4i2sv1cOjHq3_4JHya_NJEjMcy5TijopDwTY8F0Q,19155
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/mapper.py,sha256=WWPwpIOYa4Ppw8UOh4zf2D9fY2t3FtYKdEM3VCHJNiE,2489
78
+ kumoai/experimental/rfm/base/sampler.py,sha256=2hvFfvgwjqbQljZKAKtZCIcQCsmWGj_CMpSEWpSx3uk,32734
79
+ kumoai/experimental/rfm/base/source.py,sha256=67rpePejkZli4B_eDWzDrn_8Q5Msyo2XZ9F8IGB0ImI,320
80
+ kumoai/experimental/rfm/base/sql_sampler.py,sha256=bsHQ1UTIjodkkU4c3oY-_6DRZHS8m6RIqLqSwPUfLZ4,16067
81
+ kumoai/experimental/rfm/base/table.py,sha256=N47ym2p7jJ5RO8jjt_KQWfATTW__MlJnGi4zV6EVUIk,26737
82
+ kumoai/experimental/rfm/base/utils.py,sha256=VEMeOehsQCKVatqPzMTzXnVFsLz-NkyQQ67pgivtuCE,1169
83
+ kumoai/experimental/rfm/infer/__init__.py,sha256=Uf4Od7B2G80U61mkkxsnxHPGu1Hh2RqOazTkOYtNLvA,538
76
84
  kumoai/experimental/rfm/infer/categorical.py,sha256=bqmfrE5ZCBTcb35lA4SyAkCu3MgttAn29VBJYMBNhVg,893
77
- kumoai/experimental/rfm/infer/dtype.py,sha256=Hf_drluYNuN59lTSe-8GuXalg20Pv93kCktB6Hb9f74,2686
85
+ kumoai/experimental/rfm/infer/dtype.py,sha256=SDZR9ULx6Z35Ij29v6t79y-VuTvikEfrHDQLOIL_xI4,2895
78
86
  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
87
+ kumoai/experimental/rfm/infer/multicategorical.py,sha256=mMuRCbfs0zsfOoPB_eCs6nlt4WgNPvklmYPRq7w85L4,1167
88
+ kumoai/experimental/rfm/infer/pkey.py,sha256=GCAUN8Hz5-leVv2-H8soP3k-DsXJ1O_uQU25-CsSWN0,4540
89
+ kumoai/experimental/rfm/infer/stype.py,sha256=lOgiGJ_rsaeiFWyVUw0IMwn_7hGOqL8mvy2rGzXfi3Q,929
90
+ kumoai/experimental/rfm/infer/time_col.py,sha256=G2zMtcy7gEPgz7O4ljXBws5LgZ1qpQpoFUk3t5q5eqA,1881
82
91
  kumoai/experimental/rfm/infer/timestamp.py,sha256=L2VxjtYTSyUBYAo4M-L08xSQlPpqnHMAVF5_vxjh3Y0,1135
83
92
  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
93
+ kumoai/experimental/rfm/pquery/executor.py,sha256=mz5mqhHbgZM0f5oNFLyThWGM4UePx_kd1O4zyJ_8ToQ,2830
94
+ kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=awZSp41i0qTPzMowWJ1-FY4rbpTH7hxMeV91drEPfUQ,18984
86
95
  kumoai/graph/__init__.py,sha256=QGk3OMwRzQJSGESdcc7hcQH6UDmNVJYTdqnRren4c7Q,240
87
96
  kumoai/graph/column.py,sha256=cQhioibTbIKIBZ-bf8-Bt4F4Iblhidps-CYWrkxRPnE,4295
88
97
  kumoai/graph/graph.py,sha256=Pq-dxi4MwoDtrrwm3xeyUB9Hl7ryNfHq4rMHuvyNB3c,39239
89
98
  kumoai/graph/table.py,sha256=BB-4ezyd7hrrj6QZwRBa80ySH0trwYb4fmhRn3xoK-k,34726
90
99
  kumoai/pquery/__init__.py,sha256=FF6QUTG_xrz2ic1I8NcIa8O993Ae98eZ9gkvQ4rapgo,558
91
100
  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
101
+ kumoai/pquery/predictive_query.py,sha256=I5Ntc7YO1qEGxKrLuhAzZO3SySr8Wnjhde8eDbbB7zk,25542
102
+ kumoai/pquery/training_table.py,sha256=ex5FpA4_rY5OSIl2koisQENFoPbTz2PmG-DR3rvnysg,17004
94
103
  kumoai/testing/__init__.py,sha256=XBQ_Sa3WnOYlpXZ3gUn8w6nVfZt-nfPhytfIBeiPt4w,178
95
104
  kumoai/testing/decorators.py,sha256=p79ZCQqPY_MHWy0_l7-xQ6wUIqFTn4AbrGWTHLvpbQY,1664
105
+ kumoai/testing/snow.py,sha256=QItmVyelgPRW7dRcG1IQGAUdXFuWNULtz5Jo7GrxDtM,1576
96
106
  kumoai/trainer/__init__.py,sha256=uCFXy9bw_byn_wYd3M-BTZCHTVvv4XXr8qRlh-QOvag,981
97
107
  kumoai/trainer/baseline_trainer.py,sha256=oXweh8j1sar6KhQfr3A7gmQxcDq7SG0Bx3jIenbtyC4,4117
98
108
  kumoai/trainer/config.py,sha256=7_Jv1w1mqaokCQwQdJkqCSgVpmh8GqE3fL1Ky_vvttI,100
109
+ kumoai/trainer/distilled_trainer.py,sha256=hdZWi1_6bxNBDwHGmEMXTYtFUwC0JiDLozOR8zQvBBY,6659
99
110
  kumoai/trainer/job.py,sha256=IBP2SeIk21XpRK1Um1NIs2dEKid319cHu6UkCjKO6jc,46130
100
111
  kumoai/trainer/online_serving.py,sha256=T1jicl-qXiiWGQWUCwlfQsyxWUODybj_975gx9yglH4,9824
101
112
  kumoai/trainer/trainer.py,sha256=AKumc3X2Vm3qxZSA85Dv_fSLC4JQ3rM7P0ixOWbEex0,20608
102
113
  kumoai/trainer/util.py,sha256=LCXkY5MNl6NbEVd2OZ0aVqF6fvr3KiCFh6pH0igAi_g,4165
103
- kumoai/utils/__init__.py,sha256=wAKgmwtMIGuiauW9D_GGKH95K-24Kgwmld27mm4nsro,278
114
+ kumoai/utils/__init__.py,sha256=lazi9gAl5YBg1Nk121zSDg-BIKTVETjFTZwTFUlGngo,267
104
115
  kumoai/utils/datasets.py,sha256=UyAII-oAn7x3ombuvpbSQ41aVF9SYKBjQthTD-vcT2A,3011
116
+ kumoai/utils/display.py,sha256=oPNcXLUUnSKo0m2Hxc330QFPPtnV-wjJMjKoBseB1HY,2519
105
117
  kumoai/utils/forecasting.py,sha256=ZgKeUCbWLOot0giAkoigwU5du8LkrwAicFOi5hVn6wg,7624
106
- kumoai/utils/progress_logger.py,sha256=MZsWgHd4UZQKCXiJZgQeW-Emi_BmzlCKPLPXOL_HqBo,5239
107
- kumoai-2.13.0.dev202512040252.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
108
- kumoai-2.13.0.dev202512040252.dist-info/METADATA,sha256=T-O--qEm_2QPzB-dDkwR6Ei7r79H7v6qQBbR1e1J8gg,2580
109
- kumoai-2.13.0.dev202512040252.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
110
- kumoai-2.13.0.dev202512040252.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
111
- kumoai-2.13.0.dev202512040252.dist-info/RECORD,,
118
+ kumoai/utils/progress_logger.py,sha256=z1eZwxMLcSymhS3r9_GQ35AgoRl1Hz5BfxAyUJkmifg,9893
119
+ kumoai/utils/sql.py,sha256=e4dMLBxIdxqOLgwdgsFshX1JQq4gpA5UlStI-XiuUBw,150
120
+ kumoai-2.15.0.dev202601141731.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
121
+ kumoai-2.15.0.dev202601141731.dist-info/METADATA,sha256=ly_E9-Gt5E7kNtxCoznsjNBViIzEY1Bjqzce9sRbkZ4,2635
122
+ kumoai-2.15.0.dev202601141731.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
123
+ kumoai-2.15.0.dev202601141731.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
124
+ kumoai-2.15.0.dev202601141731.dist-info/RECORD,,