kumoai 2.13.0.dev202511181731__cp311-cp311-macosx_11_0_arm64.whl → 2.14.0.dev202512191731__cp311-cp311-macosx_11_0_arm64.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.
- kumoai/__init__.py +12 -0
- kumoai/_version.py +1 -1
- kumoai/client/pquery.py +6 -2
- kumoai/connector/utils.py +23 -2
- kumoai/experimental/rfm/__init__.py +52 -52
- kumoai/experimental/rfm/authenticate.py +3 -4
- kumoai/experimental/rfm/backend/__init__.py +0 -0
- kumoai/experimental/rfm/backend/local/__init__.py +42 -0
- kumoai/experimental/rfm/{local_graph_store.py → backend/local/graph_store.py} +57 -110
- kumoai/experimental/rfm/backend/local/sampler.py +315 -0
- kumoai/experimental/rfm/backend/local/table.py +114 -0
- kumoai/experimental/rfm/backend/snow/__init__.py +37 -0
- kumoai/experimental/rfm/backend/snow/sampler.py +252 -0
- kumoai/experimental/rfm/backend/snow/table.py +169 -0
- kumoai/experimental/rfm/backend/sqlite/__init__.py +32 -0
- kumoai/experimental/rfm/backend/sqlite/sampler.py +349 -0
- kumoai/experimental/rfm/backend/sqlite/table.py +154 -0
- kumoai/experimental/rfm/base/__init__.py +33 -0
- kumoai/experimental/rfm/base/column.py +68 -0
- kumoai/experimental/rfm/base/column_expression.py +50 -0
- kumoai/experimental/rfm/base/sampler.py +773 -0
- kumoai/experimental/rfm/base/source.py +19 -0
- kumoai/experimental/rfm/base/sql_sampler.py +84 -0
- kumoai/experimental/rfm/base/sql_table.py +229 -0
- kumoai/experimental/rfm/{local_table.py → base/table.py} +219 -189
- kumoai/experimental/rfm/{local_graph.py → graph.py} +510 -91
- kumoai/experimental/rfm/infer/__init__.py +8 -0
- kumoai/experimental/rfm/infer/dtype.py +79 -0
- kumoai/experimental/rfm/infer/pkey.py +128 -0
- kumoai/experimental/rfm/infer/stype.py +35 -0
- kumoai/experimental/rfm/infer/time_col.py +61 -0
- kumoai/experimental/rfm/pquery/executor.py +27 -27
- kumoai/experimental/rfm/pquery/pandas_executor.py +30 -32
- kumoai/experimental/rfm/rfm.py +313 -246
- kumoai/experimental/rfm/sagemaker.py +15 -7
- kumoai/pquery/predictive_query.py +10 -6
- kumoai/testing/decorators.py +1 -1
- kumoai/testing/snow.py +50 -0
- kumoai/utils/__init__.py +3 -2
- kumoai/utils/progress_logger.py +178 -12
- kumoai/utils/sql.py +3 -0
- {kumoai-2.13.0.dev202511181731.dist-info → kumoai-2.14.0.dev202512191731.dist-info}/METADATA +10 -8
- {kumoai-2.13.0.dev202511181731.dist-info → kumoai-2.14.0.dev202512191731.dist-info}/RECORD +46 -26
- kumoai/experimental/rfm/local_graph_sampler.py +0 -184
- kumoai/experimental/rfm/local_pquery_driver.py +0 -689
- kumoai/experimental/rfm/utils.py +0 -344
- {kumoai-2.13.0.dev202511181731.dist-info → kumoai-2.14.0.dev202512191731.dist-info}/WHEEL +0 -0
- {kumoai-2.13.0.dev202511181731.dist-info → kumoai-2.14.0.dev202512191731.dist-info}/licenses/LICENSE +0 -0
- {kumoai-2.13.0.dev202511181731.dist-info → kumoai-2.14.0.dev202512191731.dist-info}/top_level.txt +0 -0
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import json
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
|
-
import boto3
|
|
6
5
|
import requests
|
|
7
|
-
from mypy_boto3_sagemaker_runtime.client import SageMakerRuntimeClient
|
|
8
|
-
from mypy_boto3_sagemaker_runtime.type_defs import InvokeEndpointOutputTypeDef
|
|
9
6
|
|
|
10
7
|
from kumoai.client import KumoClient
|
|
11
8
|
from kumoai.client.endpoints import Endpoint, HTTPMethod
|
|
12
9
|
from kumoai.exceptions import HTTPException
|
|
13
10
|
|
|
11
|
+
try:
|
|
12
|
+
# isort: off
|
|
13
|
+
from mypy_boto3_sagemaker_runtime.client import SageMakerRuntimeClient
|
|
14
|
+
from mypy_boto3_sagemaker_runtime.type_defs import (
|
|
15
|
+
InvokeEndpointOutputTypeDef, )
|
|
16
|
+
# isort: on
|
|
17
|
+
except ImportError:
|
|
18
|
+
SageMakerRuntimeClient = Any
|
|
19
|
+
InvokeEndpointOutputTypeDef = Any
|
|
20
|
+
|
|
14
21
|
|
|
15
22
|
class SageMakerResponseAdapter(requests.Response):
|
|
16
23
|
def __init__(self, sm_response: InvokeEndpointOutputTypeDef):
|
|
@@ -34,14 +41,15 @@ class SageMakerResponseAdapter(requests.Response):
|
|
|
34
41
|
|
|
35
42
|
class KumoClient_SageMakerAdapter(KumoClient):
|
|
36
43
|
def __init__(self, region: str, endpoint_name: str):
|
|
44
|
+
import boto3
|
|
37
45
|
self._client: SageMakerRuntimeClient = boto3.client(
|
|
38
46
|
service_name="sagemaker-runtime", region_name=region)
|
|
39
47
|
self._endpoint_name = endpoint_name
|
|
40
48
|
|
|
41
49
|
# Recording buffers.
|
|
42
50
|
self._recording_active = False
|
|
43
|
-
self._recorded_reqs:
|
|
44
|
-
self._recorded_resps:
|
|
51
|
+
self._recorded_reqs: list[dict[str, Any]] = []
|
|
52
|
+
self._recorded_resps: list[dict[str, Any]] = []
|
|
45
53
|
|
|
46
54
|
def authenticate(self) -> None:
|
|
47
55
|
# TODO(siyang): call /ping to verify?
|
|
@@ -84,7 +92,7 @@ class KumoClient_SageMakerAdapter(KumoClient):
|
|
|
84
92
|
self._recorded_reqs.clear()
|
|
85
93
|
self._recorded_resps.clear()
|
|
86
94
|
|
|
87
|
-
def end_recording(self) ->
|
|
95
|
+
def end_recording(self) -> list[tuple[dict[str, Any], dict[str, Any]]]:
|
|
88
96
|
"""Stop recording and return recorded requests/responses."""
|
|
89
97
|
assert self._recording_active
|
|
90
98
|
self._recording_active = False
|
|
@@ -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),
|
|
374
|
-
|
|
375
|
-
|
|
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),
|
|
455
|
-
|
|
456
|
-
|
|
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/decorators.py
CHANGED
|
@@ -25,7 +25,7 @@ def onlyFullTest(func: Callable) -> Callable:
|
|
|
25
25
|
def has_package(package: str) -> bool:
|
|
26
26
|
r"""Returns ``True`` in case ``package`` is installed."""
|
|
27
27
|
req = Requirement(package)
|
|
28
|
-
if importlib.util.find_spec(req.name) is None:
|
|
28
|
+
if importlib.util.find_spec(req.name) is None: # type: ignore
|
|
29
29
|
return False
|
|
30
30
|
|
|
31
31
|
try:
|
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 .
|
|
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
|
]
|
kumoai/utils/progress_logger.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import re
|
|
1
2
|
import sys
|
|
2
3
|
import time
|
|
3
|
-
from typing import Any
|
|
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.
|
|
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
|
-
|
|
28
|
-
|
|
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
|
|
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:
|
|
82
|
-
self._task:
|
|
97
|
+
self._progress: Progress | None = None
|
|
98
|
+
self._task: int | None = None
|
|
83
99
|
|
|
84
|
-
self._live:
|
|
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:
|
|
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
{kumoai-2.13.0.dev202511181731.dist-info → kumoai-2.14.0.dev202512191731.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kumoai
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.14.0.dev202512191731
|
|
4
4
|
Summary: AI on the Modern Data Stack
|
|
5
5
|
Author-email: "Kumo.AI" <hello@kumo.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -23,13 +23,11 @@ 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.
|
|
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
|
|
30
30
|
Requires-Dist: rich>=9.0.0
|
|
31
|
-
Requires-Dist: mypy-boto3-sagemaker-runtime
|
|
32
|
-
Requires-Dist: boto3
|
|
33
31
|
Provides-Extra: doc
|
|
34
32
|
Requires-Dist: sphinx; extra == "doc"
|
|
35
33
|
Requires-Dist: sphinx-book-theme; extra == "doc"
|
|
@@ -40,13 +38,17 @@ Provides-Extra: test
|
|
|
40
38
|
Requires-Dist: pytest; extra == "test"
|
|
41
39
|
Requires-Dist: pytest-mock; extra == "test"
|
|
42
40
|
Requires-Dist: requests-mock; extra == "test"
|
|
43
|
-
Provides-Extra:
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
|
|
46
|
-
Requires-Dist:
|
|
41
|
+
Provides-Extra: sqlite
|
|
42
|
+
Requires-Dist: adbc_driver_sqlite; extra == "sqlite"
|
|
43
|
+
Provides-Extra: snowflake
|
|
44
|
+
Requires-Dist: numpy<2.0; extra == "snowflake"
|
|
45
|
+
Requires-Dist: snowflake-connector-python; extra == "snowflake"
|
|
46
|
+
Requires-Dist: pyyaml; extra == "snowflake"
|
|
47
47
|
Provides-Extra: sagemaker
|
|
48
48
|
Requires-Dist: boto3<2.0,>=1.30.0; extra == "sagemaker"
|
|
49
49
|
Requires-Dist: mypy-boto3-sagemaker-runtime<2.0,>=1.34.0; extra == "sagemaker"
|
|
50
|
+
Provides-Extra: test-sagemaker
|
|
51
|
+
Requires-Dist: sagemaker<3.0; extra == "test-sagemaker"
|
|
50
52
|
Dynamic: license-file
|
|
51
53
|
Dynamic: requires-dist
|
|
52
54
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
kumoai/_logging.py,sha256=U2_5ROdyk92P4xO4H2WJV8EC7dr6YxmmnM-b7QX9M7I,886
|
|
2
2
|
kumoai/mixin.py,sha256=MP413xzuCqWhxAPUHmloLA3j4ZyF1tEtfi516b_hOXQ,812
|
|
3
|
-
kumoai/_version.py,sha256=
|
|
4
|
-
kumoai/__init__.py,sha256=
|
|
3
|
+
kumoai/_version.py,sha256=bg4u5p5AlIEEC0Uofffnreg00mhW9fgSYW5WMk-Z464,39
|
|
4
|
+
kumoai/__init__.py,sha256=Nn9YH_x9kAeEFn8RWbP95slZow0qFnakPZZ1WADe1hY,10843
|
|
5
5
|
kumoai/formatting.py,sha256=jA_rLDCGKZI8WWCha-vtuLenVKTZvli99Tqpurz1H84,953
|
|
6
6
|
kumoai/futures.py,sha256=oJFIfdCM_3nWIqQteBKYMY4fPhoYlYWE_JA2o6tx-ng,3737
|
|
7
7
|
kumoai/kumolib.cpython-311-darwin.so,sha256=AmB_Fysmud1y7Gm5CuBQ5lWDuSzpxVDV_iTA2cjH1s8,232544
|
|
@@ -11,24 +11,42 @@ kumoai/databricks.py,sha256=e6E4lOFvZHXFwh4CO1kXU1zzDU3AapLQYMxjiHPC-HQ,476
|
|
|
11
11
|
kumoai/spcs.py,sha256=N31d7rLa-bgYh8e2J4YzX1ScxGLqiVXrqJnCl1y4Mts,4139
|
|
12
12
|
kumoai/_singleton.py,sha256=UTwrbDkoZSGB8ZelorvprPDDv9uZkUi1q_SrmsyngpQ,836
|
|
13
13
|
kumoai/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
kumoai/experimental/rfm/
|
|
15
|
-
kumoai/experimental/rfm/
|
|
16
|
-
kumoai/experimental/rfm/
|
|
17
|
-
kumoai/experimental/rfm/
|
|
18
|
-
kumoai/experimental/rfm/
|
|
19
|
-
kumoai/experimental/rfm/
|
|
20
|
-
kumoai/experimental/rfm/
|
|
21
|
-
kumoai/experimental/rfm/
|
|
22
|
-
kumoai/experimental/rfm/
|
|
23
|
-
kumoai/experimental/rfm/
|
|
14
|
+
kumoai/experimental/rfm/graph.py,sha256=63Sovf7Da4q3FLRKTMcImB4v_VkjC87AdCBQm385w6w,46270
|
|
15
|
+
kumoai/experimental/rfm/__init__.py,sha256=9aelcHodt2Oriw76vdEmtWrmAQ0CXTdFPrKgwVB9eKc,7124
|
|
16
|
+
kumoai/experimental/rfm/sagemaker.py,sha256=6fyXO1Jd_scq-DH7kcv6JcV8QPyTbh4ceqwQDPADlZ0,4963
|
|
17
|
+
kumoai/experimental/rfm/rfm.py,sha256=Yssmo-PaCfjT9hll0BKl8fahsuKpG-gViwFdKH1F3os,50247
|
|
18
|
+
kumoai/experimental/rfm/authenticate.py,sha256=G2RkRWznMVQUzvhvbKhn0bMCY7VmoNYxluz3THRqSdE,18851
|
|
19
|
+
kumoai/experimental/rfm/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
kumoai/experimental/rfm/backend/sqlite/__init__.py,sha256=jl-DBbhsqQ-dUXyWhyQTM1AU2qNAtXCmi1mokdhtBTg,902
|
|
21
|
+
kumoai/experimental/rfm/backend/sqlite/table.py,sha256=JpHtA6Sdz96VpqC73h_1YnuW8mQ9cMInG6y4KmjZYHE,5983
|
|
22
|
+
kumoai/experimental/rfm/backend/sqlite/sampler.py,sha256=pBCj0bXnh1PMg9cYJw-K983FzJX1_SLOe3QuOxkmvBQ,14242
|
|
23
|
+
kumoai/experimental/rfm/backend/local/__init__.py,sha256=2s9sSA-E-8pfkkzCH4XPuaSxSznEURMfMgwEIfYYPsg,1014
|
|
24
|
+
kumoai/experimental/rfm/backend/local/table.py,sha256=VP3s-MgWKXPjezgRfc2bxr-9Fp2X5i9V2Do0IiNAmVM,3819
|
|
25
|
+
kumoai/experimental/rfm/backend/local/graph_store.py,sha256=cY9KeLir9Xsp4MJl_K0VZckNa_LMKiiWCZG14uu21JI,11854
|
|
26
|
+
kumoai/experimental/rfm/backend/local/sampler.py,sha256=85HoHCDiFOiuD_vFPZRx9JCyQUlLsqgsuB3NAw50wNw,10836
|
|
27
|
+
kumoai/experimental/rfm/backend/snow/__init__.py,sha256=BYfsiuJ4Ee30GjG9EuUtitMHXnRfvVKi85zNlIwldV4,993
|
|
28
|
+
kumoai/experimental/rfm/backend/snow/table.py,sha256=0W4jtb3MdYpsGzjU7UBS8xt8yfvYIou3nX4woVd-vZQ,6282
|
|
29
|
+
kumoai/experimental/rfm/backend/snow/sampler.py,sha256=oNiBTo-Dr6LNCFJ9uHzLfKFYtx0rZq-Do2UOluwWWt0,10010
|
|
24
30
|
kumoai/experimental/rfm/pquery/__init__.py,sha256=X0O3EIq5SMfBEE-ii5Cq6iDhR3s3XMXB52Cx5htoePw,152
|
|
25
|
-
kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=
|
|
26
|
-
kumoai/experimental/rfm/pquery/executor.py,sha256=
|
|
31
|
+
kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=MwSvFRwLq-z19LEdF0G0AT7Gj9tCqu-XLEA7mNbqXwc,18454
|
|
32
|
+
kumoai/experimental/rfm/pquery/executor.py,sha256=gs5AVNaA50ci8zXOBD3qt5szdTReSwTs4BGuEyx4BEE,2728
|
|
27
33
|
kumoai/experimental/rfm/infer/multicategorical.py,sha256=0-cLpDnGryhr76QhZNO-klKokJ6MUSfxXcGdQ61oykY,1102
|
|
28
34
|
kumoai/experimental/rfm/infer/categorical.py,sha256=VwNaKwKbRYkTxEJ1R6gziffC8dGsEThcDEfbi-KqW5c,853
|
|
35
|
+
kumoai/experimental/rfm/infer/time_col.py,sha256=oNenUK6P7ql8uwShodtQ73uG1x3fbFWT78jRcF9DLTI,1789
|
|
36
|
+
kumoai/experimental/rfm/infer/pkey.py,sha256=IaJI5GHK8ds_a3AOr3YYVgUlSmYYEgr4Nu92s2RyBV4,4412
|
|
29
37
|
kumoai/experimental/rfm/infer/id.py,sha256=ZIO0DWIoiEoS_8MVc5lkqBfkTWWQ0yGCgjkwLdaYa_Q,908
|
|
30
|
-
kumoai/experimental/rfm/infer/
|
|
38
|
+
kumoai/experimental/rfm/infer/dtype.py,sha256=rzZRafxjr_mhvC7jeAZHVBvlbHJwmHvMlQqDuuePX8k,2635
|
|
39
|
+
kumoai/experimental/rfm/infer/__init__.py,sha256=8GDxQKd0pxZULdk7mpwl3CsOpL4v2HPuPEsbi2t_vzc,519
|
|
31
40
|
kumoai/experimental/rfm/infer/timestamp.py,sha256=vM9--7eStzaGG13Y-oLYlpNJyhL6f9dp17HDXwtl_DM,1094
|
|
41
|
+
kumoai/experimental/rfm/infer/stype.py,sha256=fu4zsOB-C7jNeMnq6dsK4bOZSewe7PtZe_AkohSRLoM,894
|
|
42
|
+
kumoai/experimental/rfm/base/sql_sampler.py,sha256=-2dyftqvfbzMceIhE6i4wYFt7-p7FDeqlfH4P--qjWw,2598
|
|
43
|
+
kumoai/experimental/rfm/base/__init__.py,sha256=E8Zrh52vczubhepBbS5AIe5wiBFeXbQCzfQ1-jLg_rU,885
|
|
44
|
+
kumoai/experimental/rfm/base/sql_table.py,sha256=JP-fX8SLHGKeltMxkc2gdQ4RwW0DU3QHg5sjixMXRLs,8251
|
|
45
|
+
kumoai/experimental/rfm/base/table.py,sha256=bRn3lP0Vc5uxCgsH8YD3aeMY6MnVTxi7eCMj92MhcfM,20446
|
|
46
|
+
kumoai/experimental/rfm/base/column_expression.py,sha256=OoZXSaQRB7cBLVDEg1gcp65jHpUUO7e-vW-_asiAUPo,1261
|
|
47
|
+
kumoai/experimental/rfm/base/sampler.py,sha256=aCD98t0CUhAvGXEFv24Vq2g4otuclpKkkyL1rMR_mFg,31449
|
|
48
|
+
kumoai/experimental/rfm/base/source.py,sha256=RqlI_kBoRV0ADb8KdEKn15RNHMdFUzEVzb57lIoyBM4,294
|
|
49
|
+
kumoai/experimental/rfm/base/column.py,sha256=wmKlqixNCmrmrAhSHfymJp76izpaykF9bdxNqgKbJzw,2288
|
|
32
50
|
kumoai/encoder/__init__.py,sha256=VPGs4miBC_WfwWeOXeHhFomOUocERFavhKf5fqITcds,182
|
|
33
51
|
kumoai/graph/graph.py,sha256=iyp4klPIMn2ttuEqMJvsrxKb_tmz_DTnvziIhCegduM,38291
|
|
34
52
|
kumoai/graph/__init__.py,sha256=n8X4X8luox4hPBHTRC9R-3JzvYYMoR8n7lF1H4w4Hzc,228
|
|
@@ -38,8 +56,9 @@ kumoai/artifact_export/config.py,sha256=jOPDduduxv0uuB-7xVlDiZglfpmFF5lzQhhH1SMk
|
|
|
38
56
|
kumoai/artifact_export/job.py,sha256=GEisSwvcjK_35RgOfsLXGgxMTXIWm765B_BW_Kgs-V0,3275
|
|
39
57
|
kumoai/artifact_export/__init__.py,sha256=BsfDrc3mCHpO9-BqvqKm8qrXDIwfdaoH5UIoG4eQkc4,238
|
|
40
58
|
kumoai/utils/datasets.py,sha256=ptKIUoBONVD55pTVNdRCkQT3NWdN_r9UAUu4xewPa3U,2928
|
|
41
|
-
kumoai/utils/__init__.py,sha256=
|
|
42
|
-
kumoai/utils/progress_logger.py,sha256=
|
|
59
|
+
kumoai/utils/__init__.py,sha256=6S-UtwjeLpnCYRCCIEWhkitPYGaqOGXC1ChE13DzXiU,256
|
|
60
|
+
kumoai/utils/progress_logger.py,sha256=3aYOoVSbQv5i9m2T8IqMydofKf6iNB1jxsl1uGjHZz8,9265
|
|
61
|
+
kumoai/utils/sql.py,sha256=f6lR6rBEW7Dtk0NdM26dOZXUHDizEHb1WPlBCJrwoq0,118
|
|
43
62
|
kumoai/utils/forecasting.py,sha256=-nDS6ucKNfQhTQOfebjefj0wwWH3-KYNslIomxwwMBM,7415
|
|
44
63
|
kumoai/codegen/generate.py,sha256=SvfWWa71xSAOjH9645yQvgoEM-o4BYjupM_EpUxqB_E,7331
|
|
45
64
|
kumoai/codegen/naming.py,sha256=_XVQGxHfuub4bhvyuBKjltD5Lm_oPpibvP_LZteCGk0,3021
|
|
@@ -57,8 +76,9 @@ kumoai/codegen/handlers/__init__.py,sha256=k8TB_Kn-1BycBBi51kqFS2fZHCpCPgR9-3J9g
|
|
|
57
76
|
kumoai/codegen/handlers/utils.py,sha256=58b2GCgaTBUp2aId7BLMXMV0ENrusbNbfw7mlyXAXPE,1447
|
|
58
77
|
kumoai/codegen/handlers/connector.py,sha256=afGf_GreyQ9y6qF3QTgSiM416qtUcP298SatNqUFhvQ,3828
|
|
59
78
|
kumoai/codegen/handlers/table.py,sha256=POHpA-GFYFGTSuerGmtigYablk-Wq1L3EBvsOI-iFMQ,3956
|
|
79
|
+
kumoai/testing/snow.py,sha256=ubx3yJP0UHxsNiar1-jNdv8ZfszKc8Js3_Gg70uf008,1487
|
|
60
80
|
kumoai/testing/__init__.py,sha256=goHIIo3JE7uHV7njo4_aTd89mVVR74BEAZ2uyBaOR0w,170
|
|
61
|
-
kumoai/testing/decorators.py,sha256=
|
|
81
|
+
kumoai/testing/decorators.py,sha256=83tMifuPTpUqX7zHxMttkj1TDdB62EBtAP-Fjj72Zdo,1607
|
|
62
82
|
kumoai/connector/glue_connector.py,sha256=HivT0QYQ8-XeB4QLgWvghiqXuq7jyBK9G2R1py_NnE4,4697
|
|
63
83
|
kumoai/connector/databricks_connector.py,sha256=YQy203XHZGzNJ8bPUjUOnrVt2KlpgMdVuTHpc6sVCcs,7574
|
|
64
84
|
kumoai/connector/snowflake_connector.py,sha256=K0s-H9tW3rve8g2x1PbyxvzSpkROfGQZz-Qa4PoT4UE,9022
|
|
@@ -66,14 +86,14 @@ kumoai/connector/bigquery_connector.py,sha256=IkyRqvF8Cg96kApUuuz86eYnl-BqBmDX1f
|
|
|
66
86
|
kumoai/connector/source_table.py,sha256=QLT8bEYaxeMwy-b168url0VfnkTrs5K6VKLbxTI4hEY,17539
|
|
67
87
|
kumoai/connector/__init__.py,sha256=9g6oNJ0qHWFlL5enTSoK4_SSH_5hP74xUDZx-9SggC4,842
|
|
68
88
|
kumoai/connector/file_upload_connector.py,sha256=swp03HgChOvmNPJetuujBSAqADe7NRmS_T0F3o9it4w,7008
|
|
69
|
-
kumoai/connector/utils.py,sha256=
|
|
89
|
+
kumoai/connector/utils.py,sha256=wlqQxMmPvnFNoCcczGkKYjSu05h8OhWh4fhTzQm_2bQ,64694
|
|
70
90
|
kumoai/connector/s3_connector.py,sha256=3kbv-h7DwD8O260Q0h1GPm5wwQpLt-Tb3d_CBSaie44,10155
|
|
71
91
|
kumoai/connector/base.py,sha256=cujXSZF3zAfuxNuEw54DSL1T7XCuR4t0shSMDuPUagQ,5291
|
|
72
92
|
kumoai/pquery/__init__.py,sha256=uTXr7t1eXcVfM-ETaM_1ImfEqhrmaj8BjiIvy1YZTL8,533
|
|
73
|
-
kumoai/pquery/predictive_query.py,sha256=
|
|
93
|
+
kumoai/pquery/predictive_query.py,sha256=UXn1s8ztubYZMNGl4ijaeidMiGlFveb1TGw9qI5-TAo,24901
|
|
74
94
|
kumoai/pquery/prediction_table.py,sha256=QPDH22X1UB0NIufY7qGuV2XW7brG3Pv--FbjNezzM2g,10776
|
|
75
95
|
kumoai/pquery/training_table.py,sha256=elmPDZx11kPiC_dkOhJcBUGtHKgL32GCBvZ9k6U0pMg,15809
|
|
76
|
-
kumoai/client/pquery.py,sha256=
|
|
96
|
+
kumoai/client/pquery.py,sha256=IQ8As-OOJOkuMoMosphOsA5hxQYLCbzOQJO7RezK8uY,7091
|
|
77
97
|
kumoai/client/client.py,sha256=Jda8V9yiu3LbhxlcgRWPeYi7eF6jzCKcq8-B_vEd1ik,8514
|
|
78
98
|
kumoai/client/graph.py,sha256=zvLEDExLT_RVbUMHqVl0m6tO6s2gXmYSoWmPF6YMlnA,3831
|
|
79
99
|
kumoai/client/online.py,sha256=pkBBh_DEC3GAnPcNw6bopNRlGe7EUbIFe7_seQqZRaw,2720
|
|
@@ -92,8 +112,8 @@ kumoai/trainer/baseline_trainer.py,sha256=LlfViNOmswNv4c6zJJLsyv0pC2mM2WKMGYx06o
|
|
|
92
112
|
kumoai/trainer/__init__.py,sha256=zUdFl-f-sBWmm2x8R-rdVzPBeU2FaMzUY5mkcgoTa1k,939
|
|
93
113
|
kumoai/trainer/online_serving.py,sha256=9cddb5paeZaCgbUeceQdAOxysCtV5XP-KcsgFz_XR5w,9566
|
|
94
114
|
kumoai/trainer/trainer.py,sha256=hBXO7gwpo3t59zKFTeIkK65B8QRmWCwO33sbDuEAPlY,20133
|
|
95
|
-
kumoai-2.
|
|
96
|
-
kumoai-2.
|
|
97
|
-
kumoai-2.
|
|
98
|
-
kumoai-2.
|
|
99
|
-
kumoai-2.
|
|
115
|
+
kumoai-2.14.0.dev202512191731.dist-info/RECORD,,
|
|
116
|
+
kumoai-2.14.0.dev202512191731.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
|
|
117
|
+
kumoai-2.14.0.dev202512191731.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
|
|
118
|
+
kumoai-2.14.0.dev202512191731.dist-info/METADATA,sha256=AQWzOiYUi-qDdeHMHwKs19JkZpJ7fMUAdH8M5ndS1YY,2557
|
|
119
|
+
kumoai-2.14.0.dev202512191731.dist-info/licenses/LICENSE,sha256=TbWlyqRmhq9PEzCaTI0H0nWLQCCOywQM8wYH8MbjfLo,1102
|