kumoai 2.12.0.dev202511051731__cp310-cp310-win_amd64.whl → 2.13.0.dev202511261731__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.
kumoai/spcs.py CHANGED
@@ -54,9 +54,7 @@ def _refresh_spcs_token() -> None:
54
54
  api_key=global_state._api_key,
55
55
  spcs_token=spcs_token,
56
56
  )
57
- if not client.authenticate():
58
- raise ValueError("Client authentication failed. Please check if you "
59
- "have a valid API key.")
57
+ client.authenticate()
60
58
 
61
59
  # Update state:
62
60
  global_state.set_spcs_token(spcs_token)
@@ -103,10 +103,13 @@ class InteractiveProgressLogger(ProgressLogger):
103
103
  self._progress.update(self._task, advance=1) # type: ignore
104
104
 
105
105
  def __enter__(self) -> Self:
106
+ from kumoai import in_notebook
107
+
106
108
  super().__enter__()
107
109
 
108
- sys.stdout.write("\x1b]9;4;3\x07")
109
- sys.stdout.flush()
110
+ if not in_notebook(): # Render progress bar in TUI.
111
+ sys.stdout.write("\x1b]9;4;3\x07")
112
+ sys.stdout.flush()
110
113
 
111
114
  if self.verbose:
112
115
  self._live = Live(
@@ -119,6 +122,8 @@ class InteractiveProgressLogger(ProgressLogger):
119
122
  return self
120
123
 
121
124
  def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
125
+ from kumoai import in_notebook
126
+
122
127
  super().__exit__(exc_type, exc_val, exc_tb)
123
128
 
124
129
  if exc_type is not None:
@@ -134,8 +139,9 @@ class InteractiveProgressLogger(ProgressLogger):
134
139
  self._live.stop()
135
140
  self._live = None
136
141
 
137
- sys.stdout.write("\x1b]9;4;0\x07")
138
- sys.stdout.flush()
142
+ if not in_notebook():
143
+ sys.stdout.write("\x1b]9;4;0\x07")
144
+ sys.stdout.flush()
139
145
 
140
146
  def __rich_console__(
141
147
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kumoai
3
- Version: 2.12.0.dev202511051731
3
+ Version: 2.13.0.dev202511261731
4
4
  Summary: AI on the Modern Data Stack
5
5
  Author-email: "Kumo.AI" <hello@kumo.ai>
6
6
  License-Expression: MIT
@@ -23,11 +23,13 @@ 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.40.0
26
+ Requires-Dist: kumo-api==0.46.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
31
33
  Provides-Extra: doc
32
34
  Requires-Dist: sphinx; extra == "doc"
33
35
  Requires-Dist: sphinx-book-theme; extra == "doc"
@@ -38,6 +40,13 @@ Provides-Extra: test
38
40
  Requires-Dist: pytest; extra == "test"
39
41
  Requires-Dist: pytest-mock; extra == "test"
40
42
  Requires-Dist: requests-mock; extra == "test"
43
+ Provides-Extra: test-sagemaker
44
+ Requires-Dist: sagemaker; extra == "test-sagemaker"
45
+ Requires-Dist: pandas==2.1.4; extra == "test-sagemaker"
46
+ Requires-Dist: pyarrow==12.0.1; extra == "test-sagemaker"
47
+ Provides-Extra: sagemaker
48
+ Requires-Dist: boto3<2.0,>=1.30.0; extra == "sagemaker"
49
+ Requires-Dist: mypy-boto3-sagemaker-runtime<2.0,>=1.34.0; extra == "sagemaker"
41
50
  Dynamic: license-file
42
51
  Dynamic: requires-dist
43
52
 
@@ -1,27 +1,27 @@
1
- kumoai/__init__.py,sha256=4efagNAotP3c8mj8yyDGfVFcbgQ9l4wRC4FP-Yt0J3E,11002
1
+ kumoai/__init__.py,sha256=qu-qohU2cQlManX1aZIlzA3ivKl52m-cSQBPSW8urUU,10837
2
2
  kumoai/_logging.py,sha256=qL4JbMQwKXri2f-SEJoFB8TY5ALG12S-nobGTNWxW-A,915
3
3
  kumoai/_singleton.py,sha256=i2BHWKpccNh5SJGDyU0IXsnYzJAYr8Xb0wz4c6LRbpo,861
4
- kumoai/_version.py,sha256=KfN7gfSaIMYMUGBQEb3i90sBSoG98jsaVXnJHqM3QOw,39
4
+ kumoai/_version.py,sha256=P7PbPaqmt6kLq-80AyouMRr_ZBx8A7_nPBBPEXW44ag,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=iqZtjlpH3gbMm0mXfV18cOUOm9gTukSwuMeLun7jpRw,194048
10
+ kumoai/kumolib.cp310-win_amd64.pyd,sha256=lfpQDN2Fu1tGqTxas5A9Jv3fLm-WdA_oSkhQfo6-pvg,194048
11
11
  kumoai/mixin.py,sha256=IaiB8SAI0VqOoMVzzIaUlqMt53-QPUK6OB0HikG-V9E,840
12
- kumoai/spcs.py,sha256=SWvfkeJvb_7sGkjSqyMBIuPbMTWCP6v0BC9HBXM1uSI,4398
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=IoZ6WH-VIAdwpwmd5DhP4HqjQL_YpB5vaWjtaWrNECk,8801
17
+ kumoai/client/client.py,sha256=T6Kw7-XWuAy5Dh7XU5graBl1-cTARiobycwtgxzaSE8,8731
18
18
  kumoai/client/connector.py,sha256=CO2LG5aDpCLxWNYYFRXGZs1AhYH3dRcbqBEUGwHQGzQ,4030
19
- kumoai/client/endpoints.py,sha256=gyVxVkdlO7FMR_UHof3RWsoTY-87JTD7y1lLIw1kh8A,5464
19
+ kumoai/client/endpoints.py,sha256=DpEKEQ1yvL15iHZadXZKO94t-qXrYLaeV1sknX4IuPg,5532
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
23
  kumoai/client/pquery.py,sha256=0pXgQLxjoaFWDif0XRAuC_P-X3OSnXNWsiVrXej9uMk,7094
24
- kumoai/client/rfm.py,sha256=z5XGwnFCGJgcrfycdGNQf1zC4hluk6kvJw3_SCfk0r0,3002
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
27
27
  kumoai/client/utils.py,sha256=RSD5Ia0lQQDR1drRFBJFdo2KVHfQqhJuk6m6du7Kl4E,3979
@@ -53,25 +53,24 @@ kumoai/connector/source_table.py,sha256=fnqwIKY6qYo4G0EsRzchb6FgZ-dQyU6aRaD9UAxs
53
53
  kumoai/connector/utils.py,sha256=SlkjPJS_wqfwFzIaQOHZtENQnbOz5sgLbvvvPDXE1ww,65786
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=21qX8kSSQ6SJ62zGZSAhESFHVrm7UgKIMqjhZiniLxk,1706
56
+ kumoai/experimental/rfm/__init__.py,sha256=gpjpeN8PT3ZESi6kUaeyZqYnoJnysRVXDaY9hrycJA4,7020
57
57
  kumoai/experimental/rfm/authenticate.py,sha256=G89_4TMeUpr5fG_0VTzMF5sdNhaciitA1oc2loTlTmo,19321
58
58
  kumoai/experimental/rfm/local_graph.py,sha256=nZ9hDfyWg1dHFLoTEKoLt0ZJPvf9MUA1MNyfTRzJThg,30886
59
- kumoai/experimental/rfm/local_graph_sampler.py,sha256=ZCnILozG95EzpgMqhGTG2AF85JphLvAhj-3YPaTqoaQ,6922
59
+ kumoai/experimental/rfm/local_graph_sampler.py,sha256=3JNpktW__nwxVKZxP4cQBgsIin7J_LNXYS7YlV36xbU,6854
60
60
  kumoai/experimental/rfm/local_graph_store.py,sha256=eUuIMFcdIRqN1kRxnqOdJpKEt-S_oyupAyHr7YuQoSU,14206
61
- kumoai/experimental/rfm/local_pquery_driver.py,sha256=bIDXVm6NrXmzjxRUV8MPn_XmXVBVjqB8Szq3mAofe5k,19094
61
+ kumoai/experimental/rfm/local_pquery_driver.py,sha256=Yd_yHIrvuDj16IC1pvsqiQvZS41vvOOCRMiuDGtN6Fk,26851
62
62
  kumoai/experimental/rfm/local_table.py,sha256=5H08657TIyH7n_QnpFKr2g4BtVqdXTymmrfhSGaDmkU,20150
63
- kumoai/experimental/rfm/rfm.py,sha256=_dQVifo9KdXOAKK9X5aqL8D1zvDnaHCK-hYs2_YzGRw,47301
63
+ kumoai/experimental/rfm/rfm.py,sha256=MarISSPKuv6nIaGG69zFAwIagF6EA37xcSRClZrQMFc,49470
64
+ kumoai/experimental/rfm/sagemaker.py,sha256=eebpZtASqiIGF2FpY53bbWLj6p-u5hkK4RLgBNAvEzg,4953
64
65
  kumoai/experimental/rfm/utils.py,sha256=dLx2wdyTWg7vZI_7R-I0z_lA-2aV5M8h9n3bnnLyylI,11467
65
66
  kumoai/experimental/rfm/infer/__init__.py,sha256=fPsdDr4D3hgC8snW0j3pAVpCyR-xrauuogMnTOMrfok,304
66
67
  kumoai/experimental/rfm/infer/categorical.py,sha256=bqmfrE5ZCBTcb35lA4SyAkCu3MgttAn29VBJYMBNhVg,893
67
68
  kumoai/experimental/rfm/infer/id.py,sha256=xaJBETLZa8ttzZCsDwFSwfyCi3VYsLc_kDWT_t_6Ih4,954
68
69
  kumoai/experimental/rfm/infer/multicategorical.py,sha256=D-1KwYRkOSkBrOJr4Xa3eTCoAF9O9hPGa7Vg67V5_HU,1150
69
70
  kumoai/experimental/rfm/infer/timestamp.py,sha256=L2VxjtYTSyUBYAo4M-L08xSQlPpqnHMAVF5_vxjh3Y0,1135
70
- kumoai/experimental/rfm/pquery/__init__.py,sha256=lUY3aml-NjeiWJpxK5Aqbs1a4VTJyASfbMvs5kH6Qz0,294
71
- kumoai/experimental/rfm/pquery/backend.py,sha256=mGbRdDcZxRGhFGz55bDHCICkEzsYRO3Gyj95QkzxpKY,3423
71
+ kumoai/experimental/rfm/pquery/__init__.py,sha256=RkTn0I74uXOUuOiBpa6S-_QEYctMutkUnBEfF9ztQzI,159
72
72
  kumoai/experimental/rfm/pquery/executor.py,sha256=S8wwXbAkH-YSnmEVYB8d6wyJF4JJ003mH_0zFTvOp_I,2843
73
- kumoai/experimental/rfm/pquery/pandas_backend.py,sha256=slG4WhuY0IOAtm_pKYuRDUQ-1wUcLESQsaUkFkQFq74,15874
74
- kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=W0CEnjDdqxkBADSyvnupwS1k86N9DhFXejJEDKS1MBo,17832
73
+ kumoai/experimental/rfm/pquery/pandas_executor.py,sha256=QQpOZ_ArH3eSAkenaY3J-gW1Wn5A7f85RiqZxaO5u1Q,19019
75
74
  kumoai/graph/__init__.py,sha256=QGk3OMwRzQJSGESdcc7hcQH6UDmNVJYTdqnRren4c7Q,240
76
75
  kumoai/graph/column.py,sha256=cQhioibTbIKIBZ-bf8-Bt4F4Iblhidps-CYWrkxRPnE,4295
77
76
  kumoai/graph/graph.py,sha256=Pq-dxi4MwoDtrrwm3xeyUB9Hl7ryNfHq4rMHuvyNB3c,39239
@@ -92,9 +91,9 @@ kumoai/trainer/util.py,sha256=LCXkY5MNl6NbEVd2OZ0aVqF6fvr3KiCFh6pH0igAi_g,4165
92
91
  kumoai/utils/__init__.py,sha256=wAKgmwtMIGuiauW9D_GGKH95K-24Kgwmld27mm4nsro,278
93
92
  kumoai/utils/datasets.py,sha256=UyAII-oAn7x3ombuvpbSQ41aVF9SYKBjQthTD-vcT2A,3011
94
93
  kumoai/utils/forecasting.py,sha256=ZgKeUCbWLOot0giAkoigwU5du8LkrwAicFOi5hVn6wg,7624
95
- kumoai/utils/progress_logger.py,sha256=tzwFrUO5VuiArxx9_tSETno8JF5rnFOedX26I2yDW10,5046
96
- kumoai-2.12.0.dev202511051731.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
97
- kumoai-2.12.0.dev202511051731.dist-info/METADATA,sha256=ieFt7HnkF1EOWR19ZX6mJ-5e56wvBP-KzhaQHlklROo,2112
98
- kumoai-2.12.0.dev202511051731.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
99
- kumoai-2.12.0.dev202511051731.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
100
- kumoai-2.12.0.dev202511051731.dist-info/RECORD,,
94
+ kumoai/utils/progress_logger.py,sha256=MZsWgHd4UZQKCXiJZgQeW-Emi_BmzlCKPLPXOL_HqBo,5239
95
+ kumoai-2.13.0.dev202511261731.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
96
+ kumoai-2.13.0.dev202511261731.dist-info/METADATA,sha256=KEPt_QdWVLyZhYMj3PNjwvb1gm6fXI9_FvWyMOvMrtw,2544
97
+ kumoai-2.13.0.dev202511261731.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
98
+ kumoai-2.13.0.dev202511261731.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
99
+ kumoai-2.13.0.dev202511261731.dist-info/RECORD,,
@@ -1,136 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from typing import Dict, Generic, Optional, Tuple, TypeVar, Union
3
-
4
- from kumoapi.rfm import PQueryDefinition
5
- from kumoapi.rfm.pquery import (
6
- Aggregation,
7
- AggregationType,
8
- BoolOp,
9
- Column,
10
- Condition,
11
- Filter,
12
- Float,
13
- FloatList,
14
- Int,
15
- IntList,
16
- LogicalOperation,
17
- MemberOp,
18
- RelOp,
19
- Str,
20
- StrList,
21
- )
22
-
23
- TableData = TypeVar('TableData')
24
- ColumnData = TypeVar('ColumnData')
25
- IndexData = TypeVar('IndexData')
26
-
27
-
28
- class PQueryBackend(Generic[TableData, ColumnData, IndexData], ABC):
29
- @abstractmethod
30
- def eval_aggregation_type(
31
- self,
32
- op: AggregationType,
33
- feat: Optional[ColumnData],
34
- batch: IndexData,
35
- batch_size: int,
36
- filter_na: bool = True,
37
- ) -> Tuple[ColumnData, IndexData]:
38
- pass
39
-
40
- @abstractmethod
41
- def eval_rel_op(
42
- self,
43
- left: ColumnData,
44
- op: RelOp,
45
- right: Union[Int, Float, Str, None],
46
- ) -> ColumnData:
47
- pass
48
-
49
- @abstractmethod
50
- def eval_member_op(
51
- self,
52
- left: ColumnData,
53
- op: MemberOp,
54
- right: Union[IntList, FloatList, StrList],
55
- ) -> ColumnData:
56
- pass
57
-
58
- @abstractmethod
59
- def eval_bool_op(
60
- self,
61
- left: ColumnData,
62
- op: BoolOp,
63
- right: Optional[ColumnData],
64
- ) -> ColumnData:
65
- pass
66
-
67
- @abstractmethod
68
- def eval_column(
69
- self,
70
- column: Column,
71
- feat_dict: Dict[str, TableData],
72
- filter_na: bool = True,
73
- ) -> Tuple[ColumnData, IndexData]:
74
- pass
75
-
76
- @abstractmethod
77
- def eval_aggregation(
78
- self,
79
- aggr: Aggregation,
80
- feat_dict: Dict[str, TableData],
81
- time_dict: Dict[str, ColumnData],
82
- batch_dict: Dict[str, IndexData],
83
- anchor_time: ColumnData,
84
- filter_na: bool = True,
85
- num_forecasts: int = 1,
86
- ) -> Tuple[ColumnData, IndexData]:
87
- pass
88
-
89
- @abstractmethod
90
- def eval_condition(
91
- self,
92
- condition: Condition,
93
- feat_dict: Dict[str, TableData],
94
- time_dict: Dict[str, ColumnData],
95
- batch_dict: Dict[str, IndexData],
96
- anchor_time: ColumnData,
97
- filter_na: bool = True,
98
- num_forecasts: int = 1,
99
- ) -> Tuple[ColumnData, IndexData]:
100
- pass
101
-
102
- @abstractmethod
103
- def eval_logical_operation(
104
- self,
105
- logical_operation: LogicalOperation,
106
- feat_dict: Dict[str, TableData],
107
- time_dict: Dict[str, ColumnData],
108
- batch_dict: Dict[str, IndexData],
109
- anchor_time: ColumnData,
110
- filter_na: bool = True,
111
- num_forecasts: int = 1,
112
- ) -> Tuple[ColumnData, IndexData]:
113
- pass
114
-
115
- @abstractmethod
116
- def eval_filter(
117
- self,
118
- filter: Filter,
119
- feat_dict: Dict[str, TableData],
120
- time_dict: Dict[str, ColumnData],
121
- batch_dict: Dict[str, IndexData],
122
- anchor_time: ColumnData,
123
- ) -> IndexData:
124
- pass
125
-
126
- @abstractmethod
127
- def eval_pquery(
128
- self,
129
- query: PQueryDefinition,
130
- feat_dict: Dict[str, TableData],
131
- time_dict: Dict[str, ColumnData],
132
- batch_dict: Dict[str, IndexData],
133
- anchor_time: ColumnData,
134
- num_forecasts: int = 1,
135
- ) -> Tuple[ColumnData, IndexData]:
136
- pass