singlestoredb 1.16.1__py3-none-any.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.
- singlestoredb/__init__.py +75 -0
- singlestoredb/ai/__init__.py +2 -0
- singlestoredb/ai/chat.py +139 -0
- singlestoredb/ai/embeddings.py +128 -0
- singlestoredb/alchemy/__init__.py +90 -0
- singlestoredb/apps/__init__.py +3 -0
- singlestoredb/apps/_cloud_functions.py +90 -0
- singlestoredb/apps/_config.py +72 -0
- singlestoredb/apps/_connection_info.py +18 -0
- singlestoredb/apps/_dashboards.py +47 -0
- singlestoredb/apps/_process.py +32 -0
- singlestoredb/apps/_python_udfs.py +100 -0
- singlestoredb/apps/_stdout_supress.py +30 -0
- singlestoredb/apps/_uvicorn_util.py +36 -0
- singlestoredb/auth.py +245 -0
- singlestoredb/config.py +484 -0
- singlestoredb/connection.py +1487 -0
- singlestoredb/converters.py +950 -0
- singlestoredb/docstring/__init__.py +33 -0
- singlestoredb/docstring/attrdoc.py +126 -0
- singlestoredb/docstring/common.py +230 -0
- singlestoredb/docstring/epydoc.py +267 -0
- singlestoredb/docstring/google.py +412 -0
- singlestoredb/docstring/numpydoc.py +562 -0
- singlestoredb/docstring/parser.py +100 -0
- singlestoredb/docstring/py.typed +1 -0
- singlestoredb/docstring/rest.py +256 -0
- singlestoredb/docstring/tests/__init__.py +1 -0
- singlestoredb/docstring/tests/_pydoctor.py +21 -0
- singlestoredb/docstring/tests/test_epydoc.py +729 -0
- singlestoredb/docstring/tests/test_google.py +1007 -0
- singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
- singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
- singlestoredb/docstring/tests/test_parser.py +248 -0
- singlestoredb/docstring/tests/test_rest.py +547 -0
- singlestoredb/docstring/tests/test_util.py +70 -0
- singlestoredb/docstring/util.py +141 -0
- singlestoredb/exceptions.py +120 -0
- singlestoredb/functions/__init__.py +16 -0
- singlestoredb/functions/decorator.py +201 -0
- singlestoredb/functions/dtypes.py +1793 -0
- singlestoredb/functions/ext/__init__.py +1 -0
- singlestoredb/functions/ext/arrow.py +375 -0
- singlestoredb/functions/ext/asgi.py +2133 -0
- singlestoredb/functions/ext/json.py +420 -0
- singlestoredb/functions/ext/mmap.py +413 -0
- singlestoredb/functions/ext/rowdat_1.py +724 -0
- singlestoredb/functions/ext/timer.py +89 -0
- singlestoredb/functions/ext/utils.py +218 -0
- singlestoredb/functions/signature.py +1578 -0
- singlestoredb/functions/typing/__init__.py +41 -0
- singlestoredb/functions/typing/numpy.py +20 -0
- singlestoredb/functions/typing/pandas.py +2 -0
- singlestoredb/functions/typing/polars.py +2 -0
- singlestoredb/functions/typing/pyarrow.py +2 -0
- singlestoredb/functions/utils.py +421 -0
- singlestoredb/fusion/__init__.py +11 -0
- singlestoredb/fusion/graphql.py +213 -0
- singlestoredb/fusion/handler.py +916 -0
- singlestoredb/fusion/handlers/__init__.py +0 -0
- singlestoredb/fusion/handlers/export.py +525 -0
- singlestoredb/fusion/handlers/files.py +690 -0
- singlestoredb/fusion/handlers/job.py +660 -0
- singlestoredb/fusion/handlers/models.py +250 -0
- singlestoredb/fusion/handlers/stage.py +502 -0
- singlestoredb/fusion/handlers/utils.py +324 -0
- singlestoredb/fusion/handlers/workspace.py +956 -0
- singlestoredb/fusion/registry.py +249 -0
- singlestoredb/fusion/result.py +399 -0
- singlestoredb/http/__init__.py +27 -0
- singlestoredb/http/connection.py +1267 -0
- singlestoredb/magics/__init__.py +34 -0
- singlestoredb/magics/run_personal.py +137 -0
- singlestoredb/magics/run_shared.py +134 -0
- singlestoredb/management/__init__.py +9 -0
- singlestoredb/management/billing_usage.py +148 -0
- singlestoredb/management/cluster.py +462 -0
- singlestoredb/management/export.py +295 -0
- singlestoredb/management/files.py +1102 -0
- singlestoredb/management/inference_api.py +105 -0
- singlestoredb/management/job.py +887 -0
- singlestoredb/management/manager.py +373 -0
- singlestoredb/management/organization.py +226 -0
- singlestoredb/management/region.py +169 -0
- singlestoredb/management/utils.py +423 -0
- singlestoredb/management/workspace.py +1927 -0
- singlestoredb/mysql/__init__.py +177 -0
- singlestoredb/mysql/_auth.py +298 -0
- singlestoredb/mysql/charset.py +214 -0
- singlestoredb/mysql/connection.py +2032 -0
- singlestoredb/mysql/constants/CLIENT.py +38 -0
- singlestoredb/mysql/constants/COMMAND.py +32 -0
- singlestoredb/mysql/constants/CR.py +78 -0
- singlestoredb/mysql/constants/ER.py +474 -0
- singlestoredb/mysql/constants/EXTENDED_TYPE.py +3 -0
- singlestoredb/mysql/constants/FIELD_TYPE.py +48 -0
- singlestoredb/mysql/constants/FLAG.py +15 -0
- singlestoredb/mysql/constants/SERVER_STATUS.py +10 -0
- singlestoredb/mysql/constants/VECTOR_TYPE.py +6 -0
- singlestoredb/mysql/constants/__init__.py +0 -0
- singlestoredb/mysql/converters.py +271 -0
- singlestoredb/mysql/cursors.py +896 -0
- singlestoredb/mysql/err.py +92 -0
- singlestoredb/mysql/optionfile.py +20 -0
- singlestoredb/mysql/protocol.py +450 -0
- singlestoredb/mysql/tests/__init__.py +19 -0
- singlestoredb/mysql/tests/base.py +126 -0
- singlestoredb/mysql/tests/conftest.py +37 -0
- singlestoredb/mysql/tests/test_DictCursor.py +132 -0
- singlestoredb/mysql/tests/test_SSCursor.py +141 -0
- singlestoredb/mysql/tests/test_basic.py +452 -0
- singlestoredb/mysql/tests/test_connection.py +851 -0
- singlestoredb/mysql/tests/test_converters.py +58 -0
- singlestoredb/mysql/tests/test_cursor.py +141 -0
- singlestoredb/mysql/tests/test_err.py +16 -0
- singlestoredb/mysql/tests/test_issues.py +514 -0
- singlestoredb/mysql/tests/test_load_local.py +75 -0
- singlestoredb/mysql/tests/test_nextset.py +88 -0
- singlestoredb/mysql/tests/test_optionfile.py +27 -0
- singlestoredb/mysql/tests/thirdparty/__init__.py +6 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +9 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +323 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +865 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +110 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +224 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +101 -0
- singlestoredb/mysql/times.py +23 -0
- singlestoredb/notebook/__init__.py +16 -0
- singlestoredb/notebook/_objects.py +213 -0
- singlestoredb/notebook/_portal.py +352 -0
- singlestoredb/py.typed +0 -0
- singlestoredb/pytest.py +352 -0
- singlestoredb/server/__init__.py +0 -0
- singlestoredb/server/docker.py +452 -0
- singlestoredb/server/free_tier.py +267 -0
- singlestoredb/tests/__init__.py +0 -0
- singlestoredb/tests/alltypes.sql +307 -0
- singlestoredb/tests/alltypes_no_nulls.sql +208 -0
- singlestoredb/tests/empty.sql +0 -0
- singlestoredb/tests/ext_funcs/__init__.py +702 -0
- singlestoredb/tests/local_infile.csv +3 -0
- singlestoredb/tests/test.ipynb +18 -0
- singlestoredb/tests/test.sql +680 -0
- singlestoredb/tests/test2.ipynb +18 -0
- singlestoredb/tests/test2.sql +1 -0
- singlestoredb/tests/test_basics.py +1332 -0
- singlestoredb/tests/test_config.py +318 -0
- singlestoredb/tests/test_connection.py +3103 -0
- singlestoredb/tests/test_dbapi.py +27 -0
- singlestoredb/tests/test_exceptions.py +45 -0
- singlestoredb/tests/test_ext_func.py +1472 -0
- singlestoredb/tests/test_ext_func_data.py +1101 -0
- singlestoredb/tests/test_fusion.py +1527 -0
- singlestoredb/tests/test_http.py +288 -0
- singlestoredb/tests/test_management.py +1599 -0
- singlestoredb/tests/test_plugin.py +33 -0
- singlestoredb/tests/test_results.py +171 -0
- singlestoredb/tests/test_types.py +132 -0
- singlestoredb/tests/test_udf.py +737 -0
- singlestoredb/tests/test_udf_returns.py +459 -0
- singlestoredb/tests/test_vectorstore.py +51 -0
- singlestoredb/tests/test_xdict.py +333 -0
- singlestoredb/tests/utils.py +141 -0
- singlestoredb/types.py +373 -0
- singlestoredb/utils/__init__.py +0 -0
- singlestoredb/utils/config.py +950 -0
- singlestoredb/utils/convert_rows.py +69 -0
- singlestoredb/utils/debug.py +13 -0
- singlestoredb/utils/dtypes.py +205 -0
- singlestoredb/utils/events.py +65 -0
- singlestoredb/utils/mogrify.py +151 -0
- singlestoredb/utils/results.py +585 -0
- singlestoredb/utils/xdict.py +425 -0
- singlestoredb/vectorstore.py +192 -0
- singlestoredb/warnings.py +5 -0
- singlestoredb-1.16.1.dist-info/METADATA +165 -0
- singlestoredb-1.16.1.dist-info/RECORD +183 -0
- singlestoredb-1.16.1.dist-info/WHEEL +5 -0
- singlestoredb-1.16.1.dist-info/entry_points.txt +2 -0
- singlestoredb-1.16.1.dist-info/licenses/LICENSE +201 -0
- singlestoredb-1.16.1.dist-info/top_level.txt +3 -0
- sqlx/__init__.py +4 -0
- sqlx/magic.py +113 -0
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import base64
|
|
3
|
+
import json
|
|
4
|
+
from typing import Any
|
|
5
|
+
from typing import List
|
|
6
|
+
from typing import Tuple
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
8
|
+
|
|
9
|
+
from ..dtypes import DEFAULT_VALUES
|
|
10
|
+
from ..dtypes import NUMPY_TYPE_MAP
|
|
11
|
+
from ..dtypes import PANDAS_TYPE_MAP
|
|
12
|
+
from ..dtypes import POLARS_TYPE_MAP
|
|
13
|
+
from ..dtypes import PYARROW_TYPE_MAP
|
|
14
|
+
from ..dtypes import PYTHON_CONVERTERS
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
try:
|
|
18
|
+
import numpy as np
|
|
19
|
+
except ImportError:
|
|
20
|
+
pass
|
|
21
|
+
try:
|
|
22
|
+
import pandas as pd
|
|
23
|
+
except ImportError:
|
|
24
|
+
pass
|
|
25
|
+
try:
|
|
26
|
+
import polars as pl
|
|
27
|
+
except ImportError:
|
|
28
|
+
pass
|
|
29
|
+
try:
|
|
30
|
+
import pyarrow as pa
|
|
31
|
+
except ImportError:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class JSONEncoder(json.JSONEncoder):
|
|
36
|
+
|
|
37
|
+
def default(self, obj: Any) -> Any:
|
|
38
|
+
if isinstance(obj, bytes):
|
|
39
|
+
return base64.b64encode(obj).decode('utf-8')
|
|
40
|
+
return json.JSONEncoder.default(self, obj)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def decode_row(coltypes: List[int], row: List[Any]) -> List[Any]:
|
|
44
|
+
out = []
|
|
45
|
+
for dtype, item in zip(coltypes, row):
|
|
46
|
+
out.append(PYTHON_CONVERTERS[dtype](item)) # type: ignore
|
|
47
|
+
return out
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def decode_value(coltype: int, data: Any) -> Any:
|
|
51
|
+
return PYTHON_CONVERTERS[coltype](data) # type: ignore
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def load(
|
|
55
|
+
colspec: List[Tuple[str, int]],
|
|
56
|
+
data: bytes,
|
|
57
|
+
) -> Tuple[List[int], List[Any]]:
|
|
58
|
+
'''
|
|
59
|
+
Convert bytes in JSON format into rows of data.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
colspec : Iterable[Tuple[str, int]]
|
|
64
|
+
An Iterable of column data types
|
|
65
|
+
data : bytes
|
|
66
|
+
The data in JSON format
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
Tuple[List[int], List[Any]]
|
|
71
|
+
|
|
72
|
+
'''
|
|
73
|
+
row_ids = []
|
|
74
|
+
rows = []
|
|
75
|
+
for row_id, *row in json.loads(data.decode('utf-8'))['data']:
|
|
76
|
+
row_ids.append(row_id)
|
|
77
|
+
rows.append(decode_row([x[1] for x in colspec], row))
|
|
78
|
+
return row_ids, rows
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _load_vectors(
|
|
82
|
+
colspec: List[Tuple[str, int]],
|
|
83
|
+
data: bytes,
|
|
84
|
+
) -> Tuple[List[int], List[Any]]:
|
|
85
|
+
'''
|
|
86
|
+
Convert bytes in JSON format into rows of data.
|
|
87
|
+
|
|
88
|
+
Parameters
|
|
89
|
+
----------
|
|
90
|
+
colspec : Iterable[Tuple[str, int]]
|
|
91
|
+
An Iterable of column data types
|
|
92
|
+
data : bytes
|
|
93
|
+
The data in JSON format
|
|
94
|
+
|
|
95
|
+
Returns
|
|
96
|
+
-------
|
|
97
|
+
Tuple[List[int] List[List[Any]]]
|
|
98
|
+
|
|
99
|
+
'''
|
|
100
|
+
row_ids = []
|
|
101
|
+
cols: List[Tuple[Any, Any]] = []
|
|
102
|
+
defaults: List[Any] = []
|
|
103
|
+
for row_id, *row in json.loads(data.decode('utf-8'))['data']:
|
|
104
|
+
row_ids.append(row_id)
|
|
105
|
+
if not defaults:
|
|
106
|
+
defaults = [DEFAULT_VALUES[colspec[i][1]] for i, _ in enumerate(row)]
|
|
107
|
+
if not cols:
|
|
108
|
+
cols = [([], []) for _ in row]
|
|
109
|
+
for i, (spec, x) in enumerate(zip(colspec, row)):
|
|
110
|
+
cols[i][0].append(decode_value(spec[1], x) if x is not None else defaults[i])
|
|
111
|
+
cols[i][1].append(False if x is not None else True)
|
|
112
|
+
return row_ids, cols
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def load_pandas(
|
|
116
|
+
colspec: List[Tuple[str, int]],
|
|
117
|
+
data: bytes,
|
|
118
|
+
) -> Tuple[List[int], List[Any]]:
|
|
119
|
+
'''
|
|
120
|
+
Convert bytes in JSON format into pd.Series
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
colspec : Iterable[Tuple[str, int]]
|
|
125
|
+
An Iterable of column data types
|
|
126
|
+
data : bytes
|
|
127
|
+
The data in JSON format
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
Tuple[pd.Series[int], List[pd.Series[Any]]
|
|
132
|
+
|
|
133
|
+
'''
|
|
134
|
+
import numpy as np
|
|
135
|
+
import pandas as pd
|
|
136
|
+
row_ids, cols = _load_vectors(colspec, data)
|
|
137
|
+
index = pd.Series(row_ids, dtype=np.longlong)
|
|
138
|
+
return index, \
|
|
139
|
+
[
|
|
140
|
+
(
|
|
141
|
+
pd.Series(
|
|
142
|
+
data, index=index, name=spec[0],
|
|
143
|
+
dtype=PANDAS_TYPE_MAP[spec[1]],
|
|
144
|
+
),
|
|
145
|
+
pd.Series(mask, index=index, dtype=np.longlong),
|
|
146
|
+
)
|
|
147
|
+
for (data, mask), spec in zip(cols, colspec)
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def load_polars(
|
|
152
|
+
colspec: List[Tuple[str, int]],
|
|
153
|
+
data: bytes,
|
|
154
|
+
) -> Tuple[List[int], List[Any]]:
|
|
155
|
+
'''
|
|
156
|
+
Convert bytes in JSON format into polars.Series
|
|
157
|
+
|
|
158
|
+
Parameters
|
|
159
|
+
----------
|
|
160
|
+
colspec : Iterable[Tuple[str, int]]
|
|
161
|
+
An Iterable of column data types
|
|
162
|
+
data : bytes
|
|
163
|
+
The data in JSON format
|
|
164
|
+
|
|
165
|
+
Returns
|
|
166
|
+
-------
|
|
167
|
+
Tuple[polars.Series[int], List[polars.Series[Any]]
|
|
168
|
+
|
|
169
|
+
'''
|
|
170
|
+
import polars as pl
|
|
171
|
+
row_ids, cols = _load_vectors(colspec, data)
|
|
172
|
+
return pl.Series(None, row_ids, dtype=pl.Int64), \
|
|
173
|
+
[
|
|
174
|
+
(
|
|
175
|
+
pl.Series(spec[0], data, dtype=POLARS_TYPE_MAP[spec[1]]),
|
|
176
|
+
pl.Series(None, mask, dtype=pl.Boolean),
|
|
177
|
+
)
|
|
178
|
+
for (data, mask), spec in zip(cols, colspec)
|
|
179
|
+
]
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def load_numpy(
|
|
183
|
+
colspec: List[Tuple[str, int]],
|
|
184
|
+
data: bytes,
|
|
185
|
+
) -> Tuple[Any, List[Any]]:
|
|
186
|
+
'''
|
|
187
|
+
Convert bytes in JSON format into np.ndarrays
|
|
188
|
+
|
|
189
|
+
Parameters
|
|
190
|
+
----------
|
|
191
|
+
colspec : Iterable[Tuple[str, int]]
|
|
192
|
+
An Iterable of column data types
|
|
193
|
+
data : bytes
|
|
194
|
+
The data in JSON format
|
|
195
|
+
|
|
196
|
+
Returns
|
|
197
|
+
-------
|
|
198
|
+
Tuple[np.ndarray[int], List[np.ndarray[Any]]
|
|
199
|
+
|
|
200
|
+
'''
|
|
201
|
+
import numpy as np
|
|
202
|
+
row_ids, cols = _load_vectors(colspec, data)
|
|
203
|
+
return np.asarray(row_ids, dtype=np.longlong), \
|
|
204
|
+
[
|
|
205
|
+
(
|
|
206
|
+
np.asarray(data, dtype=NUMPY_TYPE_MAP[spec[1]]), # type: ignore
|
|
207
|
+
np.asarray(mask, dtype=np.bool_), # type: ignore
|
|
208
|
+
)
|
|
209
|
+
for (data, mask), spec in zip(cols, colspec)
|
|
210
|
+
]
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def load_arrow(
|
|
214
|
+
colspec: List[Tuple[str, int]],
|
|
215
|
+
data: bytes,
|
|
216
|
+
) -> Tuple[Any, List[Any]]:
|
|
217
|
+
'''
|
|
218
|
+
Convert bytes in JSON format into pyarrow.Arrays
|
|
219
|
+
|
|
220
|
+
Parameters
|
|
221
|
+
----------
|
|
222
|
+
colspec : Iterable[Tuple[str, int]]
|
|
223
|
+
An Iterable of column data types
|
|
224
|
+
data : bytes
|
|
225
|
+
The data in JSON format
|
|
226
|
+
|
|
227
|
+
Returns
|
|
228
|
+
-------
|
|
229
|
+
Tuple[pyarrow.Array[int], List[pyarrow.Array[Any]]
|
|
230
|
+
|
|
231
|
+
'''
|
|
232
|
+
import pyarrow as pa
|
|
233
|
+
row_ids, cols = _load_vectors(colspec, data)
|
|
234
|
+
return pa.array(row_ids, type=pa.int64()), \
|
|
235
|
+
[
|
|
236
|
+
(
|
|
237
|
+
pa.array(
|
|
238
|
+
data, type=PYARROW_TYPE_MAP[dtype],
|
|
239
|
+
mask=pa.array(mask, type=pa.bool_()),
|
|
240
|
+
),
|
|
241
|
+
pa.array(mask, type=pa.bool_()),
|
|
242
|
+
)
|
|
243
|
+
for (data, mask), (name, dtype) in zip(cols, colspec)
|
|
244
|
+
]
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def dump(
|
|
248
|
+
returns: List[int],
|
|
249
|
+
row_ids: List[int],
|
|
250
|
+
rows: List[List[Any]],
|
|
251
|
+
) -> bytes:
|
|
252
|
+
'''
|
|
253
|
+
Convert a list of lists of data into JSON format.
|
|
254
|
+
|
|
255
|
+
Parameters
|
|
256
|
+
----------
|
|
257
|
+
returns : List[int]
|
|
258
|
+
The returned data type
|
|
259
|
+
row_ids : List[int]
|
|
260
|
+
Row IDs
|
|
261
|
+
rows : List[List[Any]]
|
|
262
|
+
The rows of data to serialize
|
|
263
|
+
|
|
264
|
+
Returns
|
|
265
|
+
-------
|
|
266
|
+
bytes
|
|
267
|
+
|
|
268
|
+
'''
|
|
269
|
+
data = list(zip(row_ids, *list(zip(*rows))))
|
|
270
|
+
return json.dumps(dict(data=data), cls=JSONEncoder).encode('utf-8')
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def _dump_vectors(
|
|
274
|
+
returns: List[int],
|
|
275
|
+
row_ids: List[int],
|
|
276
|
+
cols: List[Tuple[Any, Any]],
|
|
277
|
+
) -> bytes:
|
|
278
|
+
'''
|
|
279
|
+
Convert a list of lists of data into JSON format.
|
|
280
|
+
|
|
281
|
+
Parameters
|
|
282
|
+
----------
|
|
283
|
+
returns : List[int]
|
|
284
|
+
The returned data type
|
|
285
|
+
row_ids : List[int]
|
|
286
|
+
Row IDs
|
|
287
|
+
cols : List[Tuple[Any, Any]]
|
|
288
|
+
The rows of data to serialize
|
|
289
|
+
|
|
290
|
+
Returns
|
|
291
|
+
-------
|
|
292
|
+
bytes
|
|
293
|
+
|
|
294
|
+
'''
|
|
295
|
+
masked_cols = []
|
|
296
|
+
for i, (data, mask) in enumerate(cols):
|
|
297
|
+
if mask is not None:
|
|
298
|
+
masked_cols.append([d if m is not None else None for d, m in zip(data, mask)])
|
|
299
|
+
else:
|
|
300
|
+
masked_cols.append(cols[i][0])
|
|
301
|
+
data = list(zip(row_ids, *masked_cols))
|
|
302
|
+
return json.dumps(dict(data=data), cls=JSONEncoder).encode('utf-8')
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
load_list = _load_vectors
|
|
306
|
+
dump_list = _dump_vectors
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def dump_pandas(
|
|
310
|
+
returns: List[int],
|
|
311
|
+
row_ids: 'pd.Series[int]',
|
|
312
|
+
cols: List[Tuple['pd.Series[int]', 'pd.Series[bool]']],
|
|
313
|
+
) -> bytes:
|
|
314
|
+
'''
|
|
315
|
+
Convert a list of pd.Series of data into JSON format.
|
|
316
|
+
|
|
317
|
+
Parameters
|
|
318
|
+
----------
|
|
319
|
+
returns : List[int]
|
|
320
|
+
The returned data type
|
|
321
|
+
row_ids : pd.Series[int]
|
|
322
|
+
Row IDs
|
|
323
|
+
cols : List[Tuple[pd.Series[Any], pd.Series[bool]]]
|
|
324
|
+
The rows of data to serialize
|
|
325
|
+
|
|
326
|
+
Returns
|
|
327
|
+
-------
|
|
328
|
+
bytes
|
|
329
|
+
|
|
330
|
+
'''
|
|
331
|
+
import pandas as pd
|
|
332
|
+
row_ids.index = row_ids
|
|
333
|
+
df = pd.concat([row_ids] + [x[0] for x in cols], axis=1)
|
|
334
|
+
return ('{"data": %s}' % df.to_json(orient='values')).encode('utf-8')
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def dump_polars(
|
|
338
|
+
returns: List[int],
|
|
339
|
+
row_ids: 'pl.Series[int]',
|
|
340
|
+
cols: List[Tuple['pl.Series[Any]', 'pl.Series[int]']],
|
|
341
|
+
) -> bytes:
|
|
342
|
+
'''
|
|
343
|
+
Convert a list of polars.Series of data into JSON format.
|
|
344
|
+
|
|
345
|
+
Parameters
|
|
346
|
+
----------
|
|
347
|
+
returns : List[int]
|
|
348
|
+
The returned data type
|
|
349
|
+
row_ids : List[int]
|
|
350
|
+
cols : List[Tuple[polars.Series[Any], polars.Series[bool]]
|
|
351
|
+
The rows of data to serialize
|
|
352
|
+
|
|
353
|
+
Returns
|
|
354
|
+
-------
|
|
355
|
+
bytes
|
|
356
|
+
|
|
357
|
+
'''
|
|
358
|
+
return _dump_vectors(
|
|
359
|
+
returns,
|
|
360
|
+
row_ids.to_list(),
|
|
361
|
+
[(x[0].to_list(), x[1].to_list() if x[1] is not None else None) for x in cols],
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def dump_numpy(
|
|
366
|
+
returns: List[int],
|
|
367
|
+
row_ids: 'np.typing.NDArray[np.int64]',
|
|
368
|
+
cols: List[Tuple['np.typing.NDArray[Any]', 'np.typing.NDArray[np.bool_]']],
|
|
369
|
+
) -> bytes:
|
|
370
|
+
'''
|
|
371
|
+
Convert a list of np.ndarrays of data into JSON format.
|
|
372
|
+
|
|
373
|
+
Parameters
|
|
374
|
+
----------
|
|
375
|
+
returns : List[int]
|
|
376
|
+
The returned data type
|
|
377
|
+
row_ids : List[int]
|
|
378
|
+
Row IDs
|
|
379
|
+
cols : List[Tuple[np.ndarray[Any], np.ndarray[bool]]]
|
|
380
|
+
The rows of data to serialize
|
|
381
|
+
|
|
382
|
+
Returns
|
|
383
|
+
-------
|
|
384
|
+
bytes
|
|
385
|
+
|
|
386
|
+
'''
|
|
387
|
+
return _dump_vectors(
|
|
388
|
+
returns,
|
|
389
|
+
row_ids.tolist(),
|
|
390
|
+
[(x[0].tolist(), x[1].tolist() if x[1] is not None else None) for x in cols],
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
def dump_arrow(
|
|
395
|
+
returns: List[int],
|
|
396
|
+
row_ids: 'pa.Array[int]',
|
|
397
|
+
cols: List[Tuple['pa.Array[int]', 'pa.Array[bool]']],
|
|
398
|
+
) -> bytes:
|
|
399
|
+
'''
|
|
400
|
+
Convert a list of pyarrow.Arrays of data into JSON format.
|
|
401
|
+
|
|
402
|
+
Parameters
|
|
403
|
+
----------
|
|
404
|
+
returns : List[int]
|
|
405
|
+
The returned data type
|
|
406
|
+
row_ids : pyarrow.Array[int]
|
|
407
|
+
Row IDs
|
|
408
|
+
cols : List[Tuple[pyarrow.Array[Any], pyarrow.Array[Any]]]
|
|
409
|
+
The rows of data to serialize
|
|
410
|
+
|
|
411
|
+
Returns
|
|
412
|
+
-------
|
|
413
|
+
bytes
|
|
414
|
+
|
|
415
|
+
'''
|
|
416
|
+
return _dump_vectors(
|
|
417
|
+
returns,
|
|
418
|
+
row_ids.tolist(),
|
|
419
|
+
[(x[0].tolist(), x[1].tolist() if x[1] is not None else None) for x in cols],
|
|
420
|
+
)
|