kumoai 2.13.0.dev202512040252__cp310-cp310-win_amd64.whl → 2.13.0.dev202512041731__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/__init__.py +12 -0
- kumoai/_version.py +1 -1
- kumoai/experimental/rfm/backend/snow/table.py +3 -1
- kumoai/experimental/rfm/base/__init__.py +2 -0
- kumoai/experimental/rfm/base/sampler.py +134 -0
- kumoai/experimental/rfm/base/table.py +8 -3
- kumoai/experimental/rfm/graph.py +54 -24
- kumoai/kumolib.cp310-win_amd64.pyd +0 -0
- {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/METADATA +1 -1
- {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/RECORD +13 -12
- {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/WHEEL +0 -0
- {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/licenses/LICENSE +0 -0
- {kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/top_level.txt +0 -0
kumoai/__init__.py
CHANGED
|
@@ -280,7 +280,19 @@ __all__ = [
|
|
|
280
280
|
]
|
|
281
281
|
|
|
282
282
|
|
|
283
|
+
def in_snowflake_notebook() -> bool:
|
|
284
|
+
try:
|
|
285
|
+
from snowflake.snowpark.context import get_active_session
|
|
286
|
+
import streamlit # noqa: F401
|
|
287
|
+
get_active_session()
|
|
288
|
+
return True
|
|
289
|
+
except Exception:
|
|
290
|
+
return False
|
|
291
|
+
|
|
292
|
+
|
|
283
293
|
def in_notebook() -> bool:
|
|
294
|
+
if in_snowflake_notebook():
|
|
295
|
+
return True
|
|
284
296
|
try:
|
|
285
297
|
from IPython import get_ipython
|
|
286
298
|
shell = get_ipython()
|
kumoai/_version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.13.0.
|
|
1
|
+
__version__ = '2.13.0.dev202512041731'
|
|
@@ -4,7 +4,7 @@ from typing import List, Optional, Sequence
|
|
|
4
4
|
import pandas as pd
|
|
5
5
|
from kumoapi.typing import Dtype
|
|
6
6
|
|
|
7
|
-
from kumoai.experimental.rfm.backend.
|
|
7
|
+
from kumoai.experimental.rfm.backend.snow import Connection
|
|
8
8
|
from kumoai.experimental.rfm.base import SourceColumn, SourceForeignKey, Table
|
|
9
9
|
|
|
10
10
|
|
|
@@ -14,6 +14,8 @@ class SnowTable(Table):
|
|
|
14
14
|
Args:
|
|
15
15
|
connection: The connection to a :class:`snowflake` database.
|
|
16
16
|
name: The name of this table.
|
|
17
|
+
database: The database.
|
|
18
|
+
schema: The schema.
|
|
17
19
|
columns: The selected columns of this table.
|
|
18
20
|
primary_key: The name of the primary key of this table, if it exists.
|
|
19
21
|
time_column: The name of the time column of this table, if it exists.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import copy
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
import pandas as pd
|
|
8
|
+
from kumoapi.rfm.context import Subgraph
|
|
9
|
+
from kumoapi.typing import Stype
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from kumoai.experimental.rfm import Graph
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class EdgeSpec:
|
|
17
|
+
num_neighbors: int | None = None
|
|
18
|
+
time_offsets: tuple[
|
|
19
|
+
pd.DateOffset | None,
|
|
20
|
+
pd.DateOffset,
|
|
21
|
+
] | None = None
|
|
22
|
+
|
|
23
|
+
def __post_init__(self) -> None:
|
|
24
|
+
if (self.num_neighbors is None) == (self.time_offsets is None):
|
|
25
|
+
raise ValueError("Only one of 'num_neighbors' and 'time_offsets' "
|
|
26
|
+
"must be provided")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class SamplerOutput:
|
|
31
|
+
df_dict: dict[str, pd.DataFrame]
|
|
32
|
+
batch_dict: dict[str, pd.DataFrame]
|
|
33
|
+
num_sampled_nodes_dict: dict[str, list[int]]
|
|
34
|
+
edge_index_dict: dict[tuple[str, str, str], np.ndarray] | None = None
|
|
35
|
+
num_sampled_edges_dict: dict[tuple[str, str, str], list[int]] | None = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class Sampler(ABC):
|
|
39
|
+
def __init__(self, graph: 'Graph') -> None:
|
|
40
|
+
self._edge_types: list[tuple[str, str, str]] = []
|
|
41
|
+
for edge in graph.edges:
|
|
42
|
+
edge_type = (edge.src_table, edge.fkey, edge.dst_table)
|
|
43
|
+
self._edge_types.append(edge_type)
|
|
44
|
+
self._edge_types.append(Subgraph.rev_edge_type(edge_type))
|
|
45
|
+
|
|
46
|
+
self._primary_key_dict: dict[str, str] = {
|
|
47
|
+
table.name: table._primary_key
|
|
48
|
+
for table in graph.tables.values()
|
|
49
|
+
if table._primary_key is not None
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
self._time_column_dict: dict[str, str] = {
|
|
53
|
+
table.name: table._time_column
|
|
54
|
+
for table in graph.tables.values()
|
|
55
|
+
if table._time_column is not None
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
foreign_keys = {(edge.src_table, edge.fkey) for edge in graph.edges}
|
|
59
|
+
self._stype_dict: dict[str, dict[str, Stype]] = {}
|
|
60
|
+
for table in graph.tables.values():
|
|
61
|
+
self._stype_dict[table.name] = {}
|
|
62
|
+
for column in table.columns:
|
|
63
|
+
if column == table.primary_key:
|
|
64
|
+
continue
|
|
65
|
+
if (table.name, column.name) in foreign_keys:
|
|
66
|
+
continue
|
|
67
|
+
self._stype_dict[table.name][column.name] = column.stype
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def edge_types(self) -> list[tuple[str, str, str]]:
|
|
71
|
+
return self._edge_types
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def primary_key_dict(self) -> dict[str, str]:
|
|
75
|
+
return self._primary_key_dict
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def time_column_dict(self) -> dict[str, str]:
|
|
79
|
+
return self._time_column_dict
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def stype_dict(self) -> dict[str, dict[str, Stype]]:
|
|
83
|
+
return self._stype_dict
|
|
84
|
+
|
|
85
|
+
def sample_subgraph(
|
|
86
|
+
self,
|
|
87
|
+
entity_table_names: tuple[str, ...],
|
|
88
|
+
entity_pkey: pd.Series,
|
|
89
|
+
anchor_time: pd.Series,
|
|
90
|
+
num_neighbors: list[int],
|
|
91
|
+
exclude_cols_dict: dict[str, list[str]] | None = None,
|
|
92
|
+
) -> Subgraph:
|
|
93
|
+
|
|
94
|
+
edge_spec: dict[tuple[str, str, str], list[EdgeSpec]] = {
|
|
95
|
+
edge_type: [EdgeSpec(value) for value in num_neighbors]
|
|
96
|
+
for edge_type in self.edge_types
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
stype_dict: dict[str, dict[str, Stype]] = self._stype_dict
|
|
100
|
+
if exclude_cols_dict is not None:
|
|
101
|
+
stype_dict = copy.deepcopy(stype_dict)
|
|
102
|
+
for table_name, exclude_cols in exclude_cols_dict.items():
|
|
103
|
+
for column_name in exclude_cols:
|
|
104
|
+
del stype_dict[table_name][column_name]
|
|
105
|
+
|
|
106
|
+
column_spec: dict[str, list[str]] = {
|
|
107
|
+
table_name: list(stypes.keys())
|
|
108
|
+
for table_name, stypes in stype_dict.items()
|
|
109
|
+
}
|
|
110
|
+
for table_name in entity_table_names:
|
|
111
|
+
column_spec[table_name].append(self.primary_key_dict[table_name])
|
|
112
|
+
|
|
113
|
+
return self._sample(
|
|
114
|
+
entity_table_name=entity_table_names[0],
|
|
115
|
+
entity_pkey=entity_pkey,
|
|
116
|
+
anchor_time=anchor_time,
|
|
117
|
+
column_spec=column_spec,
|
|
118
|
+
edge_spec=edge_spec,
|
|
119
|
+
return_edges=True,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# Abstract Methods ########################################################
|
|
123
|
+
|
|
124
|
+
@abstractmethod
|
|
125
|
+
def _sample(
|
|
126
|
+
self,
|
|
127
|
+
entity_table_name: str,
|
|
128
|
+
entity_pkey: pd.Series,
|
|
129
|
+
anchor_time: pd.Series,
|
|
130
|
+
column_spec: dict[str, list[str]],
|
|
131
|
+
edge_spec: dict[tuple[str, str, str], list[EdgeSpec]],
|
|
132
|
+
return_edges: bool = False,
|
|
133
|
+
) -> SamplerOutput:
|
|
134
|
+
pass
|
|
@@ -10,7 +10,7 @@ from kumoapi.table import TableDefinition
|
|
|
10
10
|
from kumoapi.typing import Stype
|
|
11
11
|
from typing_extensions import Self
|
|
12
12
|
|
|
13
|
-
from kumoai import in_notebook
|
|
13
|
+
from kumoai import in_notebook, in_snowflake_notebook
|
|
14
14
|
from kumoai.experimental.rfm.base import Column, SourceColumn, SourceForeignKey
|
|
15
15
|
from kumoai.experimental.rfm.infer import (
|
|
16
16
|
contains_categorical,
|
|
@@ -384,7 +384,12 @@ class Table(ABC):
|
|
|
384
384
|
if self._num_rows is not None:
|
|
385
385
|
num_rows_repr = ' ({self._num_rows:,} rows)'
|
|
386
386
|
|
|
387
|
-
if
|
|
387
|
+
if in_snowflake_notebook():
|
|
388
|
+
import streamlit as st
|
|
389
|
+
md_repr = f"### 🏷️ Metadata of Table `{self.name}`{num_rows_repr}"
|
|
390
|
+
st.markdown(md_repr)
|
|
391
|
+
st.dataframe(self.metadata, hide_index=True)
|
|
392
|
+
elif in_notebook():
|
|
388
393
|
from IPython.display import Markdown, display
|
|
389
394
|
md_repr = f"### 🏷️ Metadata of Table `{self.name}`{num_rows_repr}"
|
|
390
395
|
display(Markdown(md_repr))
|
|
@@ -496,7 +501,7 @@ class Table(ABC):
|
|
|
496
501
|
f' end_time_column={self._end_time_column},\n'
|
|
497
502
|
f')')
|
|
498
503
|
|
|
499
|
-
# Abstract
|
|
504
|
+
# Abstract Methods ########################################################
|
|
500
505
|
|
|
501
506
|
@cached_property
|
|
502
507
|
def _source_column_dict(self) -> Dict[str, SourceColumn]:
|
kumoai/experimental/rfm/graph.py
CHANGED
|
@@ -3,7 +3,6 @@ import io
|
|
|
3
3
|
import warnings
|
|
4
4
|
from collections import defaultdict
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
|
-
from importlib.util import find_spec
|
|
7
6
|
from pathlib import Path
|
|
8
7
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Union
|
|
9
8
|
|
|
@@ -13,7 +12,7 @@ from kumoapi.table import TableDefinition
|
|
|
13
12
|
from kumoapi.typing import Stype
|
|
14
13
|
from typing_extensions import Self
|
|
15
14
|
|
|
16
|
-
from kumoai import in_notebook
|
|
15
|
+
from kumoai import in_notebook, in_snowflake_notebook
|
|
17
16
|
from kumoai.experimental.rfm import Table
|
|
18
17
|
from kumoai.graph import Edge
|
|
19
18
|
from kumoai.mixin import CastMixin
|
|
@@ -251,6 +250,8 @@ class Graph:
|
|
|
251
250
|
def from_snowflake(
|
|
252
251
|
cls,
|
|
253
252
|
connection: Union['SnowflakeConnection', Dict[str, Any], None] = None,
|
|
253
|
+
database: Optional[str] = None,
|
|
254
|
+
schema: Optional[str] = None,
|
|
254
255
|
table_names: Optional[Sequence[str]] = None,
|
|
255
256
|
edges: Optional[Sequence[Edge]] = None,
|
|
256
257
|
infer_metadata: bool = True,
|
|
@@ -267,7 +268,7 @@ class Graph:
|
|
|
267
268
|
>>> import kumoai.experimental.rfm as rfm
|
|
268
269
|
|
|
269
270
|
>>> # Create a graph directly in a Snowflake notebook:
|
|
270
|
-
>>> graph = rfm.Graph.from_snowflake()
|
|
271
|
+
>>> graph = rfm.Graph.from_snowflake(schema='my_schema')
|
|
271
272
|
|
|
272
273
|
Args:
|
|
273
274
|
connection: An open connection from
|
|
@@ -276,6 +277,8 @@ class Graph:
|
|
|
276
277
|
connection. If ``None``, will re-use an active session in case
|
|
277
278
|
it exists, or create a new connection from credentials stored
|
|
278
279
|
in environment variables.
|
|
280
|
+
database: The database.
|
|
281
|
+
schema: The schema.
|
|
279
282
|
table_names: Set of table names to include. If ``None``, will add
|
|
280
283
|
all tables present in the database.
|
|
281
284
|
edges: An optional list of :class:`~kumoai.graph.Edge` objects to
|
|
@@ -297,17 +300,27 @@ class Graph:
|
|
|
297
300
|
|
|
298
301
|
if table_names is None:
|
|
299
302
|
with connection.cursor() as cursor:
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
+
if database is None and schema is None:
|
|
304
|
+
cursor.execute("SELECT CURRENT_DATABASE(), "
|
|
305
|
+
"CURRENT_SCHEMA()")
|
|
306
|
+
result = cursor.fetchone()
|
|
307
|
+
database = database or result[0]
|
|
308
|
+
schema = schema or result[1]
|
|
309
|
+
cursor.execute(f"""
|
|
303
310
|
SELECT TABLE_NAME
|
|
304
311
|
FROM {database}.INFORMATION_SCHEMA.TABLES
|
|
305
312
|
WHERE TABLE_SCHEMA = '{schema}'
|
|
306
|
-
"""
|
|
307
|
-
cursor.execute(query)
|
|
313
|
+
""")
|
|
308
314
|
table_names = [row[0] for row in cursor.fetchall()]
|
|
309
315
|
|
|
310
|
-
tables = [
|
|
316
|
+
tables = [
|
|
317
|
+
SnowTable(
|
|
318
|
+
connection,
|
|
319
|
+
name=table_name,
|
|
320
|
+
database=database,
|
|
321
|
+
schema=schema,
|
|
322
|
+
) for table_name in table_names
|
|
323
|
+
]
|
|
311
324
|
|
|
312
325
|
graph = cls(tables, edges=edges or [])
|
|
313
326
|
|
|
@@ -488,9 +501,13 @@ class Graph:
|
|
|
488
501
|
|
|
489
502
|
def print_metadata(self) -> None:
|
|
490
503
|
r"""Prints the :meth:`~Graph.metadata` of the graph."""
|
|
491
|
-
if
|
|
504
|
+
if in_snowflake_notebook():
|
|
505
|
+
import streamlit as st
|
|
506
|
+
st.markdown("### 🗂️ Graph Metadata")
|
|
507
|
+
st.dataframe(self.metadata, hide_index=True)
|
|
508
|
+
elif in_notebook():
|
|
492
509
|
from IPython.display import Markdown, display
|
|
493
|
-
display(Markdown(
|
|
510
|
+
display(Markdown("### 🗂️ Graph Metadata"))
|
|
494
511
|
df = self.metadata
|
|
495
512
|
try:
|
|
496
513
|
if hasattr(df.style, 'hide'):
|
|
@@ -534,26 +551,36 @@ class Graph:
|
|
|
534
551
|
edge.src_table, edge.fkey) for edge in self.edges]
|
|
535
552
|
edges = sorted(edges)
|
|
536
553
|
|
|
537
|
-
if
|
|
554
|
+
if in_snowflake_notebook():
|
|
555
|
+
import streamlit as st
|
|
556
|
+
st.markdown("### 🕸️ Graph Links (FK ↔️ PK)")
|
|
557
|
+
if len(edges) > 0:
|
|
558
|
+
st.markdown('\n'.join([
|
|
559
|
+
f"- `{edge[2]}.{edge[3]}` ↔️ `{edge[0]}.{edge[1]}`"
|
|
560
|
+
for edge in edges
|
|
561
|
+
]))
|
|
562
|
+
else:
|
|
563
|
+
st.markdown("*No links registered*")
|
|
564
|
+
elif in_notebook():
|
|
538
565
|
from IPython.display import Markdown, display
|
|
539
|
-
display(Markdown(
|
|
566
|
+
display(Markdown("### 🕸️ Graph Links (FK ↔️ PK)"))
|
|
540
567
|
if len(edges) > 0:
|
|
541
568
|
display(
|
|
542
569
|
Markdown('\n'.join([
|
|
543
|
-
f
|
|
570
|
+
f"- `{edge[2]}.{edge[3]}` ↔️ `{edge[0]}.{edge[1]}`"
|
|
544
571
|
for edge in edges
|
|
545
572
|
])))
|
|
546
573
|
else:
|
|
547
|
-
display(Markdown(
|
|
574
|
+
display(Markdown("*No links registered*"))
|
|
548
575
|
else:
|
|
549
576
|
print("🕸️ Graph Links (FK ↔️ PK):")
|
|
550
577
|
if len(edges) > 0:
|
|
551
578
|
print('\n'.join([
|
|
552
|
-
f
|
|
579
|
+
f"• {edge[2]}.{edge[3]} ↔️ {edge[0]}.{edge[1]}"
|
|
553
580
|
for edge in edges
|
|
554
581
|
]))
|
|
555
582
|
else:
|
|
556
|
-
print(
|
|
583
|
+
print("No links registered")
|
|
557
584
|
|
|
558
585
|
def link(
|
|
559
586
|
self,
|
|
@@ -870,19 +897,19 @@ class Graph:
|
|
|
870
897
|
|
|
871
898
|
return True
|
|
872
899
|
|
|
873
|
-
# Check basic dependency:
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
900
|
+
try: # Check basic dependency:
|
|
901
|
+
import graphviz
|
|
902
|
+
except ImportError as e:
|
|
903
|
+
raise ImportError("The 'graphviz' package is required for "
|
|
904
|
+
"visualization") from e
|
|
905
|
+
|
|
906
|
+
if not in_snowflake_notebook() and not has_graphviz_executables():
|
|
878
907
|
raise RuntimeError("Could not visualize graph as 'graphviz' "
|
|
879
908
|
"executables are not installed. These "
|
|
880
909
|
"dependencies are required in addition to the "
|
|
881
910
|
"'graphviz' Python package. Please install "
|
|
882
911
|
"them as described at "
|
|
883
912
|
"https://graphviz.org/download/.")
|
|
884
|
-
else:
|
|
885
|
-
import graphviz
|
|
886
913
|
|
|
887
914
|
format: Optional[str] = None
|
|
888
915
|
if isinstance(path, str):
|
|
@@ -966,6 +993,9 @@ class Graph:
|
|
|
966
993
|
graph.render(path, cleanup=True)
|
|
967
994
|
elif isinstance(path, io.BytesIO):
|
|
968
995
|
path.write(graph.pipe())
|
|
996
|
+
elif in_snowflake_notebook():
|
|
997
|
+
import streamlit as st
|
|
998
|
+
st.graphviz_chart(graph)
|
|
969
999
|
elif in_notebook():
|
|
970
1000
|
from IPython.display import display
|
|
971
1001
|
display(graph)
|
|
Binary file
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
kumoai/__init__.py,sha256=
|
|
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=
|
|
4
|
+
kumoai/_version.py,sha256=nAPj2gzW1byjXavAIRphLnIsySItnJOq_dJijgrT4kk,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=
|
|
10
|
+
kumoai/kumolib.cp310-win_amd64.pyd,sha256=4fWOeR-nrmdLzThTLrD0wexcVo5F4KECAdbjPSHPydM,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
|
|
@@ -55,7 +55,7 @@ kumoai/encoder/__init__.py,sha256=8FeP6mUyCeXxr1b8kUIi5dxe5vEXQRft9tPoaV1CBqg,18
|
|
|
55
55
|
kumoai/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
56
|
kumoai/experimental/rfm/__init__.py,sha256=EFZz6IvvskmeO85Vig6p1m_6jdimS_BkeREOndHuRsc,6247
|
|
57
57
|
kumoai/experimental/rfm/authenticate.py,sha256=G89_4TMeUpr5fG_0VTzMF5sdNhaciitA1oc2loTlTmo,19321
|
|
58
|
-
kumoai/experimental/rfm/graph.py,sha256=
|
|
58
|
+
kumoai/experimental/rfm/graph.py,sha256=SL3-WinoLnkZC6VVjebYGLuQJJyEVFJdCm6h3FNE0e4,40816
|
|
59
59
|
kumoai/experimental/rfm/local_graph_sampler.py,sha256=dQ3JnuozTNeZyUFRu2h8OTMNmV1RAoaCA0gvkpgOstg,8110
|
|
60
60
|
kumoai/experimental/rfm/local_graph_store.py,sha256=6jY1ciVIlnBBhZCxWwBTl7SKX1fxRIDLszwrftD0Cdk,13485
|
|
61
61
|
kumoai/experimental/rfm/local_pquery_driver.py,sha256=Yd_yHIrvuDj16IC1pvsqiQvZS41vvOOCRMiuDGtN6Fk,26851
|
|
@@ -65,13 +65,14 @@ kumoai/experimental/rfm/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
|
65
65
|
kumoai/experimental/rfm/backend/local/__init__.py,sha256=usMh0fuDxKK-aOVT1sU30BQWFS0eSkfUrhUVILisQQI,934
|
|
66
66
|
kumoai/experimental/rfm/backend/local/table.py,sha256=1PqNOROzlnK3SaZHNcU2hyzeifs0N4wssQAS3-Z0Myc,3674
|
|
67
67
|
kumoai/experimental/rfm/backend/snow/__init__.py,sha256=viMeR9VWpB1kjRdSWCTNFMdM7a8Mj_Dtck1twJW8dV8,962
|
|
68
|
-
kumoai/experimental/rfm/backend/snow/table.py,sha256=
|
|
68
|
+
kumoai/experimental/rfm/backend/snow/table.py,sha256=Rf4hUPOUtsjpaIc9vBKWPZ3yz20OOg6DZqCGeih4KC8,4372
|
|
69
69
|
kumoai/experimental/rfm/backend/sqlite/__init__.py,sha256=xw5NNLrWSvUvRkD49X_9hZYjas5EuP1XDANPy0EEjOg,874
|
|
70
70
|
kumoai/experimental/rfm/backend/sqlite/table.py,sha256=mBiZC21gQwfR4demFrP37GmawMHfIm-G82mLQeBqIZo,3901
|
|
71
|
-
kumoai/experimental/rfm/base/__init__.py,sha256=
|
|
71
|
+
kumoai/experimental/rfm/base/__init__.py,sha256=U4GMz-sHnagddIQEqhcfpY9JRhmOc0_Rs9c5_Zc9rqU,245
|
|
72
72
|
kumoai/experimental/rfm/base/column.py,sha256=OE-PRQ8HO4uTq0e3_3eHJFfhp5nzw79zd-43g3iMh4g,2385
|
|
73
|
+
kumoai/experimental/rfm/base/sampler.py,sha256=E0CC5Rfyjd8SjyjK1bCKKYDesPGYYbIiY96yW6xOXww,4563
|
|
73
74
|
kumoai/experimental/rfm/base/source.py,sha256=H5yN9xAwK3i_69EdqOV_x58muPGKQiI8ev5BhHQDZEo,290
|
|
74
|
-
kumoai/experimental/rfm/base/table.py,sha256=
|
|
75
|
+
kumoai/experimental/rfm/base/table.py,sha256=6GlWUz3tAu2g1QqTA5idWGmfo2KEJoNApDFZRn8e0pg,20388
|
|
75
76
|
kumoai/experimental/rfm/infer/__init__.py,sha256=qKg8or-SpgTApD6ePw1PJ4aUZPrOLTHLRCmBIJ92hrk,486
|
|
76
77
|
kumoai/experimental/rfm/infer/categorical.py,sha256=bqmfrE5ZCBTcb35lA4SyAkCu3MgttAn29VBJYMBNhVg,893
|
|
77
78
|
kumoai/experimental/rfm/infer/dtype.py,sha256=Hf_drluYNuN59lTSe-8GuXalg20Pv93kCktB6Hb9f74,2686
|
|
@@ -104,8 +105,8 @@ kumoai/utils/__init__.py,sha256=wAKgmwtMIGuiauW9D_GGKH95K-24Kgwmld27mm4nsro,278
|
|
|
104
105
|
kumoai/utils/datasets.py,sha256=UyAII-oAn7x3ombuvpbSQ41aVF9SYKBjQthTD-vcT2A,3011
|
|
105
106
|
kumoai/utils/forecasting.py,sha256=ZgKeUCbWLOot0giAkoigwU5du8LkrwAicFOi5hVn6wg,7624
|
|
106
107
|
kumoai/utils/progress_logger.py,sha256=MZsWgHd4UZQKCXiJZgQeW-Emi_BmzlCKPLPXOL_HqBo,5239
|
|
107
|
-
kumoai-2.13.0.
|
|
108
|
-
kumoai-2.13.0.
|
|
109
|
-
kumoai-2.13.0.
|
|
110
|
-
kumoai-2.13.0.
|
|
111
|
-
kumoai-2.13.0.
|
|
108
|
+
kumoai-2.13.0.dev202512041731.dist-info/licenses/LICENSE,sha256=ZUilBDp--4vbhsEr6f_Upw9rnIx09zQ3K9fXQ0rfd6w,1111
|
|
109
|
+
kumoai-2.13.0.dev202512041731.dist-info/METADATA,sha256=H4PwggDYmXKPTArJoXK3Lxg4__QTOIUb0nZRR2heOpM,2580
|
|
110
|
+
kumoai-2.13.0.dev202512041731.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
|
|
111
|
+
kumoai-2.13.0.dev202512041731.dist-info/top_level.txt,sha256=YjU6UcmomoDx30vEXLsOU784ED7VztQOsFApk1SFwvs,7
|
|
112
|
+
kumoai-2.13.0.dev202512041731.dist-info/RECORD,,
|
|
File without changes
|
{kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{kumoai-2.13.0.dev202512040252.dist-info → kumoai-2.13.0.dev202512041731.dist-info}/top_level.txt
RENAMED
|
File without changes
|