kumoai 2.13.0.dev202512040649__cp313-cp313-win_amd64.whl → 2.14.0.dev202512211732__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 (46) hide show
  1. kumoai/__init__.py +12 -0
  2. kumoai/_version.py +1 -1
  3. kumoai/client/pquery.py +6 -2
  4. kumoai/experimental/rfm/__init__.py +33 -8
  5. kumoai/experimental/rfm/authenticate.py +3 -4
  6. kumoai/experimental/rfm/backend/local/__init__.py +4 -0
  7. kumoai/experimental/rfm/{local_graph_store.py → backend/local/graph_store.py} +52 -91
  8. kumoai/experimental/rfm/backend/local/sampler.py +315 -0
  9. kumoai/experimental/rfm/backend/local/table.py +21 -16
  10. kumoai/experimental/rfm/backend/snow/__init__.py +2 -0
  11. kumoai/experimental/rfm/backend/snow/sampler.py +252 -0
  12. kumoai/experimental/rfm/backend/snow/table.py +102 -48
  13. kumoai/experimental/rfm/backend/sqlite/__init__.py +4 -2
  14. kumoai/experimental/rfm/backend/sqlite/sampler.py +349 -0
  15. kumoai/experimental/rfm/backend/sqlite/table.py +84 -31
  16. kumoai/experimental/rfm/base/__init__.py +26 -3
  17. kumoai/experimental/rfm/base/column.py +14 -12
  18. kumoai/experimental/rfm/base/column_expression.py +50 -0
  19. kumoai/experimental/rfm/base/sampler.py +773 -0
  20. kumoai/experimental/rfm/base/source.py +1 -0
  21. kumoai/experimental/rfm/base/sql_sampler.py +84 -0
  22. kumoai/experimental/rfm/base/sql_table.py +229 -0
  23. kumoai/experimental/rfm/base/table.py +173 -138
  24. kumoai/experimental/rfm/graph.py +302 -108
  25. kumoai/experimental/rfm/infer/__init__.py +6 -4
  26. kumoai/experimental/rfm/infer/dtype.py +3 -3
  27. kumoai/experimental/rfm/infer/pkey.py +4 -2
  28. kumoai/experimental/rfm/infer/stype.py +35 -0
  29. kumoai/experimental/rfm/infer/time_col.py +1 -2
  30. kumoai/experimental/rfm/pquery/executor.py +27 -27
  31. kumoai/experimental/rfm/pquery/pandas_executor.py +30 -32
  32. kumoai/experimental/rfm/rfm.py +299 -230
  33. kumoai/experimental/rfm/sagemaker.py +4 -4
  34. kumoai/kumolib.cp313-win_amd64.pyd +0 -0
  35. kumoai/pquery/predictive_query.py +10 -6
  36. kumoai/testing/snow.py +50 -0
  37. kumoai/utils/__init__.py +3 -2
  38. kumoai/utils/progress_logger.py +178 -12
  39. kumoai/utils/sql.py +3 -0
  40. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202512211732.dist-info}/METADATA +3 -2
  41. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202512211732.dist-info}/RECORD +44 -36
  42. kumoai/experimental/rfm/local_graph_sampler.py +0 -223
  43. kumoai/experimental/rfm/local_pquery_driver.py +0 -689
  44. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202512211732.dist-info}/WHEEL +0 -0
  45. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202512211732.dist-info}/licenses/LICENSE +0 -0
  46. {kumoai-2.13.0.dev202512040649.dist-info → kumoai-2.14.0.dev202512211732.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  import base64
2
2
  import json
3
- from typing import Any, Dict, List, Tuple
3
+ from typing import Any
4
4
 
5
5
  import requests
6
6
 
@@ -48,8 +48,8 @@ class KumoClient_SageMakerAdapter(KumoClient):
48
48
 
49
49
  # Recording buffers.
50
50
  self._recording_active = False
51
- self._recorded_reqs: List[Dict[str, Any]] = []
52
- self._recorded_resps: List[Dict[str, Any]] = []
51
+ self._recorded_reqs: list[dict[str, Any]] = []
52
+ self._recorded_resps: list[dict[str, Any]] = []
53
53
 
54
54
  def authenticate(self) -> None:
55
55
  # TODO(siyang): call /ping to verify?
@@ -92,7 +92,7 @@ class KumoClient_SageMakerAdapter(KumoClient):
92
92
  self._recorded_reqs.clear()
93
93
  self._recorded_resps.clear()
94
94
 
95
- def end_recording(self) -> List[Tuple[Dict[str, Any], Dict[str, Any]]]:
95
+ def end_recording(self) -> list[tuple[dict[str, Any], dict[str, Any]]]:
96
96
  """Stop recording and return recorded requests/responses."""
97
97
  assert self._recording_active
98
98
  self._recording_active = False
Binary file
@@ -370,9 +370,11 @@ class PredictiveQuery:
370
370
  train_table_job_api = global_state.client.generate_train_table_job_api
371
371
  job_id: GenerateTrainTableJobID = train_table_job_api.create(
372
372
  GenerateTrainTableRequest(
373
- dict(custom_tags), pq_id, plan,
374
- graph_snapshot_id=self.graph.snapshot(
375
- non_blocking=non_blocking)))
373
+ dict(custom_tags),
374
+ pq_id,
375
+ plan,
376
+ None,
377
+ ))
376
378
 
377
379
  self._train_table = TrainingTableJob(job_id=job_id)
378
380
  if non_blocking:
@@ -451,9 +453,11 @@ class PredictiveQuery:
451
453
  bp_table_api = global_state.client.generate_prediction_table_job_api
452
454
  job_id: GeneratePredictionTableJobID = bp_table_api.create(
453
455
  GeneratePredictionTableRequest(
454
- dict(custom_tags), pq_id, plan,
455
- graph_snapshot_id=self.graph.snapshot(
456
- non_blocking=non_blocking)))
456
+ dict(custom_tags),
457
+ pq_id,
458
+ plan,
459
+ None,
460
+ ))
457
461
 
458
462
  self._prediction_table = PredictionTableJob(job_id=job_id)
459
463
  if non_blocking:
kumoai/testing/snow.py ADDED
@@ -0,0 +1,50 @@
1
+ import json
2
+ import os
3
+
4
+ from kumoai.experimental.rfm.backend.snow import Connection
5
+ from kumoai.experimental.rfm.backend.snow import connect as _connect
6
+
7
+
8
+ def connect(
9
+ region: str,
10
+ id: str,
11
+ account: str,
12
+ user: str,
13
+ warehouse: str,
14
+ database: str | None = None,
15
+ schema: str | None = None,
16
+ ) -> Connection:
17
+
18
+ kwargs = dict(password=os.getenv('SNOWFLAKE_PASSWORD'))
19
+ if kwargs['password'] is None:
20
+ import boto3
21
+ from cryptography.hazmat.primitives import serialization
22
+
23
+ client = boto3.client(
24
+ service_name='secretsmanager',
25
+ region_name=region,
26
+ )
27
+ secret_id = (f'arn:aws:secretsmanager:{region}:{id}:secret:'
28
+ f'{account}.snowflakecomputing.com')
29
+ response = client.get_secret_value(SecretId=secret_id)['SecretString']
30
+ secret = json.loads(response)
31
+
32
+ private_key = serialization.load_pem_private_key(
33
+ secret['kumo_user_secretkey'].encode(),
34
+ password=None,
35
+ )
36
+ kwargs['private_key'] = private_key.private_bytes(
37
+ encoding=serialization.Encoding.DER,
38
+ format=serialization.PrivateFormat.PKCS8,
39
+ encryption_algorithm=serialization.NoEncryption(),
40
+ )
41
+
42
+ return _connect(
43
+ account=account,
44
+ user=user,
45
+ warehouse='WH_XS',
46
+ database='KUMO',
47
+ schema=schema,
48
+ session_parameters=dict(CLIENT_TELEMETRY_ENABLED=False),
49
+ **kwargs,
50
+ )
kumoai/utils/__init__.py CHANGED
@@ -1,10 +1,11 @@
1
- from .progress_logger import ProgressLogger, InteractiveProgressLogger
1
+ from .sql import quote_ident
2
+ from .progress_logger import ProgressLogger
2
3
  from .forecasting import ForecastVisualizer
3
4
  from .datasets import from_relbench
4
5
 
5
6
  __all__ = [
7
+ 'quote_ident',
6
8
  'ProgressLogger',
7
- 'InteractiveProgressLogger',
8
9
  'ForecastVisualizer',
9
10
  'from_relbench',
10
11
  ]
@@ -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,22 @@ 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
+
28
+ self.logs: list[str] = []
29
+
30
+ self.start_time: float | None = None
31
+ self.end_time: float | None = None
32
+
33
+ @classmethod
34
+ def default(cls, msg: str, verbose: bool = True) -> 'ProgressLogger':
35
+ from kumoai import in_snowflake_notebook
26
36
 
27
- self.start_time: Optional[float] = None
28
- self.end_time: Optional[float] = None
37
+ if in_snowflake_notebook():
38
+ return StreamlitProgressLogger(msg, verbose)
39
+ return RichProgressLogger(msg, verbose)
29
40
 
30
41
  @property
31
42
  def duration(self) -> float:
@@ -37,6 +48,12 @@ class ProgressLogger:
37
48
  def log(self, msg: str) -> None:
38
49
  self.logs.append(msg)
39
50
 
51
+ def init_progress(self, total: int, description: str) -> None:
52
+ pass
53
+
54
+ def step(self) -> None:
55
+ pass
56
+
40
57
  def __enter__(self) -> Self:
41
58
  self.start_time = time.perf_counter()
42
59
  return self
@@ -66,22 +83,21 @@ class ColoredTimeRemainingColumn(TimeRemainingColumn):
66
83
  return Text(str(super().render(task)), style=self.style)
67
84
 
68
85
 
69
- class InteractiveProgressLogger(ProgressLogger):
86
+ class RichProgressLogger(ProgressLogger):
70
87
  def __init__(
71
88
  self,
72
89
  msg: str,
73
90
  verbose: bool = True,
74
91
  refresh_per_second: int = 10,
75
92
  ) -> None:
76
- super().__init__(msg=msg)
93
+ super().__init__(msg=msg, verbose=verbose)
77
94
 
78
- self.verbose = verbose
79
95
  self.refresh_per_second = refresh_per_second
80
96
 
81
- self._progress: Optional[Progress] = None
82
- self._task: Optional[int] = None
97
+ self._progress: Progress | None = None
98
+ self._task: int | None = None
83
99
 
84
- self._live: Optional[Live] = None
100
+ self._live: Live | None = None
85
101
  self._exception: bool = False
86
102
 
87
103
  def init_progress(self, total: int, description: str) -> None:
@@ -151,7 +167,7 @@ class InteractiveProgressLogger(ProgressLogger):
151
167
 
152
168
  table = Table.grid(padding=(0, 1))
153
169
 
154
- icon: Union[Text, Padding]
170
+ icon: Text | Padding
155
171
  if self._exception:
156
172
  style = 'red'
157
173
  icon = Text('❌', style=style)
@@ -175,3 +191,153 @@ class InteractiveProgressLogger(ProgressLogger):
175
191
 
176
192
  if self.verbose and self._progress is not None:
177
193
  yield self._progress.get_renderable()
194
+
195
+
196
+ class StreamlitProgressLogger(ProgressLogger):
197
+ def __init__(
198
+ self,
199
+ msg: str,
200
+ verbose: bool = True,
201
+ ) -> None:
202
+ super().__init__(msg=msg, verbose=verbose)
203
+
204
+ self._status: Any = None
205
+
206
+ self._total = 0
207
+ self._current = 0
208
+ self._description: str = ''
209
+ self._progress: Any = None
210
+
211
+ def __enter__(self) -> Self:
212
+ super().__enter__()
213
+
214
+ import streamlit as st
215
+
216
+ # Adjust layout for prettier output:
217
+ st.markdown(STREAMLIT_CSS, unsafe_allow_html=True)
218
+
219
+ if self.verbose:
220
+ self._status = st.status(
221
+ f':blue[{self._sanitize_text(self.msg)}]',
222
+ expanded=True,
223
+ )
224
+
225
+ return self
226
+
227
+ def log(self, msg: str) -> None:
228
+ super().log(msg)
229
+ if self.verbose and self._status is not None:
230
+ self._status.write(self._sanitize_text(msg))
231
+
232
+ def init_progress(self, total: int, description: str) -> None:
233
+ if self.verbose and self._status is not None:
234
+ self._total = total
235
+ self._current = 0
236
+ self._description = self._sanitize_text(description)
237
+ percent = min(self._current / self._total, 1.0)
238
+ self._progress = self._status.progress(
239
+ value=percent,
240
+ text=f'{self._description} [{self._current}/{self._total}]',
241
+ )
242
+
243
+ def step(self) -> None:
244
+ self._current += 1
245
+
246
+ if self.verbose and self._progress is not None:
247
+ percent = min(self._current / self._total, 1.0)
248
+ self._progress.progress(
249
+ value=percent,
250
+ text=f'{self._description} [{self._current}/{self._total}]',
251
+ )
252
+
253
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
254
+ super().__exit__(exc_type, exc_val, exc_tb)
255
+
256
+ if not self.verbose or self._status is None:
257
+ return
258
+
259
+ label = f'{self._sanitize_text(self.msg)} ({self.duration:.2f}s)'
260
+
261
+ if exc_type is not None:
262
+ self._status.update(
263
+ label=f':red[{label}]',
264
+ state='error',
265
+ expanded=True,
266
+ )
267
+ else:
268
+ self._status.update(
269
+ label=f':green[{label}]',
270
+ state='complete',
271
+ expanded=True,
272
+ )
273
+
274
+ @staticmethod
275
+ def _sanitize_text(msg: str) -> str:
276
+ return re.sub(r'\[/?bold\]', '**', msg)
277
+
278
+
279
+ STREAMLIT_CSS = """
280
+ <style>
281
+ /* Fix horizontal scrollbar */
282
+ .stExpander summary {
283
+ width: auto;
284
+ }
285
+
286
+ /* Fix paddings/margins */
287
+ .stExpander summary {
288
+ padding: 0.75rem 1rem 0.5rem;
289
+ }
290
+ .stExpander p {
291
+ margin: 0px 0px 0.2rem;
292
+ }
293
+ .stExpander [data-testid="stExpanderDetails"] {
294
+ padding-bottom: 1.45rem;
295
+ }
296
+ .stExpander .stProgress div:first-child {
297
+ padding-bottom: 4px;
298
+ }
299
+
300
+ /* Fix expand icon position */
301
+ .stExpander summary svg {
302
+ height: 1.5rem;
303
+ }
304
+
305
+ /* Fix summary icons */
306
+ .stExpander summary [data-testid="stExpanderIconCheck"] {
307
+ font-size: 1.8rem;
308
+ margin-top: -3px;
309
+ color: rgb(21, 130, 55);
310
+ }
311
+ .stExpander summary [data-testid="stExpanderIconError"] {
312
+ font-size: 1.8rem;
313
+ margin-top: -3px;
314
+ color: rgb(255, 43, 43);
315
+ }
316
+ .stExpander summary span:first-child span:first-child {
317
+ width: 1.6rem;
318
+ }
319
+
320
+ /* Add border between title and content */
321
+ .stExpander [data-testid="stExpanderDetails"] {
322
+ border-top: 1px solid rgba(30, 37, 47, 0.2);
323
+ padding-top: 0.5rem;
324
+ }
325
+
326
+ /* Fix title font size */
327
+ .stExpander summary p {
328
+ font-size: 1rem;
329
+ }
330
+
331
+ /* Gray out content */
332
+ .stExpander [data-testid="stExpanderDetails"] {
333
+ color: rgba(30, 37, 47, 0.5);
334
+ }
335
+
336
+ /* Fix progress bar font size */
337
+ .stExpander .stProgress p {
338
+ line-height: 1.6;
339
+ font-size: 1rem;
340
+ color: rgba(30, 37, 47, 0.5);
341
+ }
342
+ </style>
343
+ """
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.dev202512211732
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,13 +1,13 @@
1
- kumoai/__init__.py,sha256=qu-qohU2cQlManX1aZIlzA3ivKl52m-cSQBPSW8urUU,10837
1
+ kumoai/__init__.py,sha256=aDhb7KGetDnOz54u1Fd45zfM2N8oAha6XT2CvJqOvgc,11146
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=r_ZJN4_1Q2z42px3GUoxeFu6s1G0ZVF0s5q_k2WJWS8,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=Etr0FROvpwYRpjsHqdfGr7kmcROvj273xJnJxK1B2ew,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
@@ -20,7 +20,7 @@ kumoai/client/endpoints.py,sha256=DpEKEQ1yvL15iHZadXZKO94t-qXrYLaeV1sknX4IuPg,55
20
20
  kumoai/client/graph.py,sha256=6MFyPYxDPfGTWeAI_84RUgWx9rVvqbLnR0Ourtgj5rg,3951
21
21
  kumoai/client/jobs.py,sha256=Y8wKiTk1I5ywc-2cxR72LaBjfhPTCVOezSCTeDpTs8Q,17521
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
@@ -53,46 +53,53 @@ kumoai/connector/source_table.py,sha256=fnqwIKY6qYo4G0EsRzchb6FgZ-dQyU6aRaD9UAxs
53
53
  kumoai/connector/utils.py,sha256=5K9BMdWiIP3hhdkUc6Xt1e0xv5YyziXtZ4PnBqq0Ehw,66490
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=Hws948dE_YfBSR2GEEHiZMcqctahIqH7CrlRRhdgIVU,7332
57
+ kumoai/experimental/rfm/authenticate.py,sha256=odKaqOAEkdC_wB340cs_ozjSvQLTce45WLiJSEzQaL8,19283
58
+ kumoai/experimental/rfm/graph.py,sha256=hJuZrNF5xC03REY06W-985fuXzI1Kll8hpbtgUt4UCE,47499
59
+ kumoai/experimental/rfm/rfm.py,sha256=OWFKebezAkGpEzZCf4DgyepCVbpzpZxhiUYZ0V9g60o,51447
60
+ kumoai/experimental/rfm/sagemaker.py,sha256=7Yk4um0gBBn7u-Bz8JRv53z0__FcD0uESoiImJhxsBw,5101
64
61
  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
62
+ kumoai/experimental/rfm/backend/local/__init__.py,sha256=8JbLaai0yhtldFcDkddphIJKMiKc0XnodvYBWkrGPXI,1056
63
+ kumoai/experimental/rfm/backend/local/graph_store.py,sha256=Nx9cDZG_Fi1fMUPi1R9xZ3k0vAOky8UutRiQdyAo-9w,12160
64
+ kumoai/experimental/rfm/backend/local/sampler.py,sha256=p59f6pU4g2GpyXh8EP9eWHDsL17Ck3xX_0bZ-R68PHI,11151
65
+ kumoai/experimental/rfm/backend/local/table.py,sha256=vEuvtett3oaO-AhlrJMMhqsA87IgQRfqnAI-vesD5D0,3933
66
+ kumoai/experimental/rfm/backend/snow/__init__.py,sha256=lsF0sJXZ0Pc3NvBTBXJHudp-iZJXdidrhyqFQKEU5_Q,1030
67
+ kumoai/experimental/rfm/backend/snow/sampler.py,sha256=v3dGIK4RKxNUULlmwa7UKwa8H8ap4dh4lzHWHzTVsDk,10262
68
+ kumoai/experimental/rfm/backend/snow/table.py,sha256=9BZXCiqySU2Cq_dNdv1wsc09MfDWr_uOuKYgXBM_1G0,6451
69
+ kumoai/experimental/rfm/backend/sqlite/__init__.py,sha256=wkSr2D_E5VCH4RGW8FCN2iJp-6wb_RTCMO8R3p5lkiw,934
70
+ kumoai/experimental/rfm/backend/sqlite/sampler.py,sha256=fGU6r0X0sAZ-OFkZOyK94kKuW4KduRJZX8KIE8viQRU,14591
71
+ kumoai/experimental/rfm/backend/sqlite/table.py,sha256=hrxaNVX9KEVa27htdvDseLVcch8RboEiLkwthFj9OXk,6137
72
+ kumoai/experimental/rfm/base/__init__.py,sha256=YE9E5x5DUT-RQxpanlNl5WZiSeYaxJbzc_uRVMV39UY,918
73
+ kumoai/experimental/rfm/base/column.py,sha256=5t4UBANg-Se3BXL4uiXbAfI-C9DQV_iAiM8sglUjFDA,2356
74
+ kumoai/experimental/rfm/base/column_expression.py,sha256=CBD5LXBdVDYjSiUM42FXCObKNEF8V4u9upVOpU5VTAk,1311
75
+ kumoai/experimental/rfm/base/sampler.py,sha256=Pi_UcdCxpoIXIYDDGTn0hYYQZbMbvC75dwEjPz_wMic,32222
76
+ kumoai/experimental/rfm/base/source.py,sha256=-I_yBCGWuCpD4j2I7hzfl3Cj8A25rXAGCpih5_0ShwY,313
77
+ kumoai/experimental/rfm/base/sql_sampler.py,sha256=4soPQ50g4jJhMb-EZyOsxrIXdPOx4-vppJalAd8l4fg,2682
78
+ kumoai/experimental/rfm/base/sql_table.py,sha256=DT9D0pHJc4oQERNL3hVdzzjd1vR_faEnLc_OSG8d-Xg,8480
79
+ kumoai/experimental/rfm/base/table.py,sha256=FTnv6AOMRTsZToQNcl7ACAL__aR6mCh9BurAOe6sEx8,21021
80
+ kumoai/experimental/rfm/infer/__init__.py,sha256=Uf4Od7B2G80U61mkkxsnxHPGu1Hh2RqOazTkOYtNLvA,538
76
81
  kumoai/experimental/rfm/infer/categorical.py,sha256=bqmfrE5ZCBTcb35lA4SyAkCu3MgttAn29VBJYMBNhVg,893
77
- kumoai/experimental/rfm/infer/dtype.py,sha256=Hf_drluYNuN59lTSe-8GuXalg20Pv93kCktB6Hb9f74,2686
82
+ kumoai/experimental/rfm/infer/dtype.py,sha256=enZ-b8NmSlY687P59y7Kelq9vZJjq3Q-h7EyrPNfRRc,2714
78
83
  kumoai/experimental/rfm/infer/id.py,sha256=xaJBETLZa8ttzZCsDwFSwfyCi3VYsLc_kDWT_t_6Ih4,954
79
84
  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/pkey.py,sha256=GCAUN8Hz5-leVv2-H8soP3k-DsXJ1O_uQU25-CsSWN0,4540
86
+ kumoai/experimental/rfm/infer/stype.py,sha256=lOgiGJ_rsaeiFWyVUw0IMwn_7hGOqL8mvy2rGzXfi3Q,929
87
+ kumoai/experimental/rfm/infer/time_col.py,sha256=-OJbjHxD05UuSF2ePBkywzm-h2Qd9kC4BEFaHuglUbs,1850
82
88
  kumoai/experimental/rfm/infer/timestamp.py,sha256=L2VxjtYTSyUBYAo4M-L08xSQlPpqnHMAVF5_vxjh3Y0,1135
83
89
  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
90
+ kumoai/experimental/rfm/pquery/executor.py,sha256=mz5mqhHbgZM0f5oNFLyThWGM4UePx_kd1O4zyJ_8ToQ,2830
91
+ kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=awZSp41i0qTPzMowWJ1-FY4rbpTH7hxMeV91drEPfUQ,18984
86
92
  kumoai/graph/__init__.py,sha256=QGk3OMwRzQJSGESdcc7hcQH6UDmNVJYTdqnRren4c7Q,240
87
93
  kumoai/graph/column.py,sha256=cQhioibTbIKIBZ-bf8-Bt4F4Iblhidps-CYWrkxRPnE,4295
88
94
  kumoai/graph/graph.py,sha256=Pq-dxi4MwoDtrrwm3xeyUB9Hl7ryNfHq4rMHuvyNB3c,39239
89
95
  kumoai/graph/table.py,sha256=BB-4ezyd7hrrj6QZwRBa80ySH0trwYb4fmhRn3xoK-k,34726
90
96
  kumoai/pquery/__init__.py,sha256=FF6QUTG_xrz2ic1I8NcIa8O993Ae98eZ9gkvQ4rapgo,558
91
97
  kumoai/pquery/prediction_table.py,sha256=hWG4L_ze4PLgUoxCXNKk8_nkYxVXELQs8_X8KGOE9yk,11063
92
- kumoai/pquery/predictive_query.py,sha256=GWhQpQxf6apyyu-bvE3z63mX6NLd8lKbyu_jzj7rNms,25608
98
+ kumoai/pquery/predictive_query.py,sha256=I5Ntc7YO1qEGxKrLuhAzZO3SySr8Wnjhde8eDbbB7zk,25542
93
99
  kumoai/pquery/training_table.py,sha256=L1QjaVlY4SAPD8OUmTaH6YjZzBbPOnS9mnAT69znWv0,16233
94
100
  kumoai/testing/__init__.py,sha256=XBQ_Sa3WnOYlpXZ3gUn8w6nVfZt-nfPhytfIBeiPt4w,178
95
101
  kumoai/testing/decorators.py,sha256=p79ZCQqPY_MHWy0_l7-xQ6wUIqFTn4AbrGWTHLvpbQY,1664
102
+ kumoai/testing/snow.py,sha256=i0m8y7ciqUnQeP1Xe_-bOxVh_xyAuuyz_rTEHJFkYY0,1537
96
103
  kumoai/trainer/__init__.py,sha256=uCFXy9bw_byn_wYd3M-BTZCHTVvv4XXr8qRlh-QOvag,981
97
104
  kumoai/trainer/baseline_trainer.py,sha256=oXweh8j1sar6KhQfr3A7gmQxcDq7SG0Bx3jIenbtyC4,4117
98
105
  kumoai/trainer/config.py,sha256=7_Jv1w1mqaokCQwQdJkqCSgVpmh8GqE3fL1Ky_vvttI,100
@@ -100,12 +107,13 @@ kumoai/trainer/job.py,sha256=IBP2SeIk21XpRK1Um1NIs2dEKid319cHu6UkCjKO6jc,46130
100
107
  kumoai/trainer/online_serving.py,sha256=T1jicl-qXiiWGQWUCwlfQsyxWUODybj_975gx9yglH4,9824
101
108
  kumoai/trainer/trainer.py,sha256=AKumc3X2Vm3qxZSA85Dv_fSLC4JQ3rM7P0ixOWbEex0,20608
102
109
  kumoai/trainer/util.py,sha256=LCXkY5MNl6NbEVd2OZ0aVqF6fvr3KiCFh6pH0igAi_g,4165
103
- kumoai/utils/__init__.py,sha256=wAKgmwtMIGuiauW9D_GGKH95K-24Kgwmld27mm4nsro,278
110
+ kumoai/utils/__init__.py,sha256=lazi9gAl5YBg1Nk121zSDg-BIKTVETjFTZwTFUlGngo,267
104
111
  kumoai/utils/datasets.py,sha256=UyAII-oAn7x3ombuvpbSQ41aVF9SYKBjQthTD-vcT2A,3011
105
112
  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,,
113
+ kumoai/utils/progress_logger.py,sha256=OR_4Yh__8ZPhBtSTMESFuFQbyennfWZuD6zjiaqzaLw,9608
114
+ kumoai/utils/sql.py,sha256=a9HT5IIUaXfbQaLbZ2HuuYHLBDev_cer1Tzif7xE-R4,121
115
+ kumoai-2.14.0.dev202512211732.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
116
+ kumoai-2.14.0.dev202512211732.dist-info/METADATA,sha256=iepUeGFV0MlqovuT7wkyO0LWyhcCH30pDoKoO-VVM4s,2628
117
+ kumoai-2.14.0.dev202512211732.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
118
+ kumoai-2.14.0.dev202512211732.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
119
+ kumoai-2.14.0.dev202512211732.dist-info/RECORD,,