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.
Files changed (183) hide show
  1. singlestoredb/__init__.py +75 -0
  2. singlestoredb/ai/__init__.py +2 -0
  3. singlestoredb/ai/chat.py +139 -0
  4. singlestoredb/ai/embeddings.py +128 -0
  5. singlestoredb/alchemy/__init__.py +90 -0
  6. singlestoredb/apps/__init__.py +3 -0
  7. singlestoredb/apps/_cloud_functions.py +90 -0
  8. singlestoredb/apps/_config.py +72 -0
  9. singlestoredb/apps/_connection_info.py +18 -0
  10. singlestoredb/apps/_dashboards.py +47 -0
  11. singlestoredb/apps/_process.py +32 -0
  12. singlestoredb/apps/_python_udfs.py +100 -0
  13. singlestoredb/apps/_stdout_supress.py +30 -0
  14. singlestoredb/apps/_uvicorn_util.py +36 -0
  15. singlestoredb/auth.py +245 -0
  16. singlestoredb/config.py +484 -0
  17. singlestoredb/connection.py +1487 -0
  18. singlestoredb/converters.py +950 -0
  19. singlestoredb/docstring/__init__.py +33 -0
  20. singlestoredb/docstring/attrdoc.py +126 -0
  21. singlestoredb/docstring/common.py +230 -0
  22. singlestoredb/docstring/epydoc.py +267 -0
  23. singlestoredb/docstring/google.py +412 -0
  24. singlestoredb/docstring/numpydoc.py +562 -0
  25. singlestoredb/docstring/parser.py +100 -0
  26. singlestoredb/docstring/py.typed +1 -0
  27. singlestoredb/docstring/rest.py +256 -0
  28. singlestoredb/docstring/tests/__init__.py +1 -0
  29. singlestoredb/docstring/tests/_pydoctor.py +21 -0
  30. singlestoredb/docstring/tests/test_epydoc.py +729 -0
  31. singlestoredb/docstring/tests/test_google.py +1007 -0
  32. singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
  33. singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
  34. singlestoredb/docstring/tests/test_parser.py +248 -0
  35. singlestoredb/docstring/tests/test_rest.py +547 -0
  36. singlestoredb/docstring/tests/test_util.py +70 -0
  37. singlestoredb/docstring/util.py +141 -0
  38. singlestoredb/exceptions.py +120 -0
  39. singlestoredb/functions/__init__.py +16 -0
  40. singlestoredb/functions/decorator.py +201 -0
  41. singlestoredb/functions/dtypes.py +1793 -0
  42. singlestoredb/functions/ext/__init__.py +1 -0
  43. singlestoredb/functions/ext/arrow.py +375 -0
  44. singlestoredb/functions/ext/asgi.py +2133 -0
  45. singlestoredb/functions/ext/json.py +420 -0
  46. singlestoredb/functions/ext/mmap.py +413 -0
  47. singlestoredb/functions/ext/rowdat_1.py +724 -0
  48. singlestoredb/functions/ext/timer.py +89 -0
  49. singlestoredb/functions/ext/utils.py +218 -0
  50. singlestoredb/functions/signature.py +1578 -0
  51. singlestoredb/functions/typing/__init__.py +41 -0
  52. singlestoredb/functions/typing/numpy.py +20 -0
  53. singlestoredb/functions/typing/pandas.py +2 -0
  54. singlestoredb/functions/typing/polars.py +2 -0
  55. singlestoredb/functions/typing/pyarrow.py +2 -0
  56. singlestoredb/functions/utils.py +421 -0
  57. singlestoredb/fusion/__init__.py +11 -0
  58. singlestoredb/fusion/graphql.py +213 -0
  59. singlestoredb/fusion/handler.py +916 -0
  60. singlestoredb/fusion/handlers/__init__.py +0 -0
  61. singlestoredb/fusion/handlers/export.py +525 -0
  62. singlestoredb/fusion/handlers/files.py +690 -0
  63. singlestoredb/fusion/handlers/job.py +660 -0
  64. singlestoredb/fusion/handlers/models.py +250 -0
  65. singlestoredb/fusion/handlers/stage.py +502 -0
  66. singlestoredb/fusion/handlers/utils.py +324 -0
  67. singlestoredb/fusion/handlers/workspace.py +956 -0
  68. singlestoredb/fusion/registry.py +249 -0
  69. singlestoredb/fusion/result.py +399 -0
  70. singlestoredb/http/__init__.py +27 -0
  71. singlestoredb/http/connection.py +1267 -0
  72. singlestoredb/magics/__init__.py +34 -0
  73. singlestoredb/magics/run_personal.py +137 -0
  74. singlestoredb/magics/run_shared.py +134 -0
  75. singlestoredb/management/__init__.py +9 -0
  76. singlestoredb/management/billing_usage.py +148 -0
  77. singlestoredb/management/cluster.py +462 -0
  78. singlestoredb/management/export.py +295 -0
  79. singlestoredb/management/files.py +1102 -0
  80. singlestoredb/management/inference_api.py +105 -0
  81. singlestoredb/management/job.py +887 -0
  82. singlestoredb/management/manager.py +373 -0
  83. singlestoredb/management/organization.py +226 -0
  84. singlestoredb/management/region.py +169 -0
  85. singlestoredb/management/utils.py +423 -0
  86. singlestoredb/management/workspace.py +1927 -0
  87. singlestoredb/mysql/__init__.py +177 -0
  88. singlestoredb/mysql/_auth.py +298 -0
  89. singlestoredb/mysql/charset.py +214 -0
  90. singlestoredb/mysql/connection.py +2032 -0
  91. singlestoredb/mysql/constants/CLIENT.py +38 -0
  92. singlestoredb/mysql/constants/COMMAND.py +32 -0
  93. singlestoredb/mysql/constants/CR.py +78 -0
  94. singlestoredb/mysql/constants/ER.py +474 -0
  95. singlestoredb/mysql/constants/EXTENDED_TYPE.py +3 -0
  96. singlestoredb/mysql/constants/FIELD_TYPE.py +48 -0
  97. singlestoredb/mysql/constants/FLAG.py +15 -0
  98. singlestoredb/mysql/constants/SERVER_STATUS.py +10 -0
  99. singlestoredb/mysql/constants/VECTOR_TYPE.py +6 -0
  100. singlestoredb/mysql/constants/__init__.py +0 -0
  101. singlestoredb/mysql/converters.py +271 -0
  102. singlestoredb/mysql/cursors.py +896 -0
  103. singlestoredb/mysql/err.py +92 -0
  104. singlestoredb/mysql/optionfile.py +20 -0
  105. singlestoredb/mysql/protocol.py +450 -0
  106. singlestoredb/mysql/tests/__init__.py +19 -0
  107. singlestoredb/mysql/tests/base.py +126 -0
  108. singlestoredb/mysql/tests/conftest.py +37 -0
  109. singlestoredb/mysql/tests/test_DictCursor.py +132 -0
  110. singlestoredb/mysql/tests/test_SSCursor.py +141 -0
  111. singlestoredb/mysql/tests/test_basic.py +452 -0
  112. singlestoredb/mysql/tests/test_connection.py +851 -0
  113. singlestoredb/mysql/tests/test_converters.py +58 -0
  114. singlestoredb/mysql/tests/test_cursor.py +141 -0
  115. singlestoredb/mysql/tests/test_err.py +16 -0
  116. singlestoredb/mysql/tests/test_issues.py +514 -0
  117. singlestoredb/mysql/tests/test_load_local.py +75 -0
  118. singlestoredb/mysql/tests/test_nextset.py +88 -0
  119. singlestoredb/mysql/tests/test_optionfile.py +27 -0
  120. singlestoredb/mysql/tests/thirdparty/__init__.py +6 -0
  121. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +9 -0
  122. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +323 -0
  123. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +865 -0
  124. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +110 -0
  125. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +224 -0
  126. singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +101 -0
  127. singlestoredb/mysql/times.py +23 -0
  128. singlestoredb/notebook/__init__.py +16 -0
  129. singlestoredb/notebook/_objects.py +213 -0
  130. singlestoredb/notebook/_portal.py +352 -0
  131. singlestoredb/py.typed +0 -0
  132. singlestoredb/pytest.py +352 -0
  133. singlestoredb/server/__init__.py +0 -0
  134. singlestoredb/server/docker.py +452 -0
  135. singlestoredb/server/free_tier.py +267 -0
  136. singlestoredb/tests/__init__.py +0 -0
  137. singlestoredb/tests/alltypes.sql +307 -0
  138. singlestoredb/tests/alltypes_no_nulls.sql +208 -0
  139. singlestoredb/tests/empty.sql +0 -0
  140. singlestoredb/tests/ext_funcs/__init__.py +702 -0
  141. singlestoredb/tests/local_infile.csv +3 -0
  142. singlestoredb/tests/test.ipynb +18 -0
  143. singlestoredb/tests/test.sql +680 -0
  144. singlestoredb/tests/test2.ipynb +18 -0
  145. singlestoredb/tests/test2.sql +1 -0
  146. singlestoredb/tests/test_basics.py +1332 -0
  147. singlestoredb/tests/test_config.py +318 -0
  148. singlestoredb/tests/test_connection.py +3103 -0
  149. singlestoredb/tests/test_dbapi.py +27 -0
  150. singlestoredb/tests/test_exceptions.py +45 -0
  151. singlestoredb/tests/test_ext_func.py +1472 -0
  152. singlestoredb/tests/test_ext_func_data.py +1101 -0
  153. singlestoredb/tests/test_fusion.py +1527 -0
  154. singlestoredb/tests/test_http.py +288 -0
  155. singlestoredb/tests/test_management.py +1599 -0
  156. singlestoredb/tests/test_plugin.py +33 -0
  157. singlestoredb/tests/test_results.py +171 -0
  158. singlestoredb/tests/test_types.py +132 -0
  159. singlestoredb/tests/test_udf.py +737 -0
  160. singlestoredb/tests/test_udf_returns.py +459 -0
  161. singlestoredb/tests/test_vectorstore.py +51 -0
  162. singlestoredb/tests/test_xdict.py +333 -0
  163. singlestoredb/tests/utils.py +141 -0
  164. singlestoredb/types.py +373 -0
  165. singlestoredb/utils/__init__.py +0 -0
  166. singlestoredb/utils/config.py +950 -0
  167. singlestoredb/utils/convert_rows.py +69 -0
  168. singlestoredb/utils/debug.py +13 -0
  169. singlestoredb/utils/dtypes.py +205 -0
  170. singlestoredb/utils/events.py +65 -0
  171. singlestoredb/utils/mogrify.py +151 -0
  172. singlestoredb/utils/results.py +585 -0
  173. singlestoredb/utils/xdict.py +425 -0
  174. singlestoredb/vectorstore.py +192 -0
  175. singlestoredb/warnings.py +5 -0
  176. singlestoredb-1.16.1.dist-info/METADATA +165 -0
  177. singlestoredb-1.16.1.dist-info/RECORD +183 -0
  178. singlestoredb-1.16.1.dist-info/WHEEL +5 -0
  179. singlestoredb-1.16.1.dist-info/entry_points.txt +2 -0
  180. singlestoredb-1.16.1.dist-info/licenses/LICENSE +201 -0
  181. singlestoredb-1.16.1.dist-info/top_level.txt +3 -0
  182. sqlx/__init__.py +4 -0
  183. 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
+ )