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 @@
1
+ #!/usr/bin/env python3
@@ -0,0 +1,375 @@
1
+ #!/usr/bin/env python3
2
+ from io import BytesIO
3
+ from typing import Any
4
+ from typing import List
5
+ from typing import Optional
6
+ from typing import Tuple
7
+
8
+ try:
9
+ import numpy as np
10
+ has_numpy = True
11
+ except ImportError:
12
+ has_numpy = False
13
+
14
+ try:
15
+ import polars as pl
16
+ has_polars = True
17
+ except ImportError:
18
+ has_polars = False
19
+
20
+ try:
21
+ import pandas as pd
22
+ has_pandas = True
23
+ except ImportError:
24
+ has_pandas = False
25
+
26
+ try:
27
+ import pyarrow as pa
28
+ import pyarrow.feather
29
+ has_pyarrow = True
30
+ except ImportError:
31
+ has_pyarrow = False
32
+
33
+
34
+ def load(
35
+ colspec: List[Tuple[str, int]],
36
+ data: bytes,
37
+ ) -> Tuple[List[int], List[Any]]:
38
+ '''
39
+ Convert bytes in rowdat_1 format into rows of data.
40
+
41
+ Parameters
42
+ ----------
43
+ colspec : List[str]
44
+ An List of column data types
45
+ data : bytes
46
+ The data in Apache Feather format
47
+
48
+ Returns
49
+ -------
50
+ Tuple[List[int], List[Any]]
51
+
52
+ '''
53
+ if not has_pyarrow:
54
+ raise RuntimeError('pyarrow must be installed for this operation')
55
+
56
+ table = pa.feather.read_table(BytesIO(data))
57
+ row_ids = table.column(0).to_pylist()
58
+ rows = []
59
+ for row in table.to_pylist():
60
+ rows.append([row[c] for c in table.column_names[1:]])
61
+ return row_ids, rows
62
+
63
+
64
+ def _load_vectors(
65
+ colspec: List[Tuple[str, int]],
66
+ data: bytes,
67
+ ) -> Tuple[
68
+ 'pa.Array[pa.int64]',
69
+ List[Tuple['pa.Array[Any]', 'pa.Array[pa.bool_]']],
70
+ ]:
71
+ '''
72
+ Convert bytes in rowdat_1 format into columns of data.
73
+
74
+ Parameters
75
+ ----------
76
+ colspec : List[str]
77
+ An List of column data types
78
+ data : bytes
79
+ The data in Apache Feather format
80
+
81
+ Returns
82
+ -------
83
+ Tuple[List[int], List[Tuple[Any, Any]]]
84
+
85
+ '''
86
+ if not has_pyarrow:
87
+ raise RuntimeError('pyarrow must be installed for this operation')
88
+
89
+ table = pa.feather.read_table(BytesIO(data))
90
+ row_ids = table.column(0)
91
+ out = []
92
+ for i, col in enumerate(table.columns[1:]):
93
+ out.append((col, col.is_null()))
94
+ return row_ids, out
95
+
96
+
97
+ def load_pandas(
98
+ colspec: List[Tuple[str, int]],
99
+ data: bytes,
100
+ ) -> Tuple[
101
+ 'pd.Series[np.int64]',
102
+ List[Tuple['pd.Series[Any]', 'pd.Series[np.bool_]']],
103
+ ]:
104
+ '''
105
+ Convert bytes in rowdat_1 format into rows of data.
106
+
107
+ Parameters
108
+ ----------
109
+ colspec : List[str]
110
+ An List of column data types
111
+ data : bytes
112
+ The data in Apache Feather format
113
+
114
+ Returns
115
+ -------
116
+ Tuple[pd.Series[int], List[Tuple[pd.Series[Any], pd.Series[bool]]]]
117
+
118
+ '''
119
+ if not has_pandas or not has_numpy:
120
+ raise RuntimeError('pandas must be installed for this operation')
121
+
122
+ row_ids, cols = _load_vectors(colspec, data)
123
+ index = row_ids.to_pandas()
124
+
125
+ return index, \
126
+ [
127
+ (
128
+ data.to_pandas().reindex(index),
129
+ mask.to_pandas().reindex(index),
130
+ )
131
+ for (data, mask), (name, dtype) in zip(cols, colspec)
132
+ ]
133
+
134
+
135
+ def load_polars(
136
+ colspec: List[Tuple[str, int]],
137
+ data: bytes,
138
+ ) -> Tuple[
139
+ 'pl.Series[pl.Int64]',
140
+ List[Tuple['pl.Series[Any]', 'pl.Series[pl.Boolean]']],
141
+ ]:
142
+ '''
143
+ Convert bytes in Apache Feather format into rows of data.
144
+
145
+ Parameters
146
+ ----------
147
+ colspec : List[str]
148
+ An List of column data types
149
+ data : bytes
150
+ The data in Apache Feather format
151
+
152
+ Returns
153
+ -------
154
+ Tuple[polars.Series[int], List[polars.Series[Any]]]
155
+
156
+ '''
157
+ if not has_polars:
158
+ raise RuntimeError('polars must be installed for this operation')
159
+
160
+ row_ids, cols = _load_vectors(colspec, data)
161
+
162
+ return (
163
+ pl.from_arrow(row_ids), # type: ignore
164
+ [
165
+ (
166
+ pl.from_arrow(data), # type: ignore
167
+ pl.from_arrow(mask), # type: ignore
168
+ )
169
+ for (data, mask), (name, dtype) in zip(cols, colspec)
170
+ ],
171
+ )
172
+
173
+
174
+ def load_numpy(
175
+ colspec: List[Tuple[str, int]],
176
+ data: bytes,
177
+ ) -> Tuple[
178
+ 'np.typing.NDArray[np.int64]',
179
+ List[Tuple['np.typing.NDArray[Any]', 'np.typing.NDArray[np.bool_]']],
180
+ ]:
181
+ '''
182
+ Convert bytes in Apache Feather format into rows of data.
183
+
184
+ Parameters
185
+ ----------
186
+ colspec : List[str]
187
+ An List of column data types
188
+ data : bytes
189
+ The data in Apache Feather format
190
+
191
+ Returns
192
+ -------
193
+ Tuple[np.ndarray[int], List[np.ndarray[Any]]]
194
+
195
+ '''
196
+ if not has_numpy:
197
+ raise RuntimeError('numpy must be installed for this operation')
198
+
199
+ row_ids, cols = _load_vectors(colspec, data)
200
+
201
+ return row_ids.to_numpy(), \
202
+ [
203
+ (
204
+ data.to_numpy(),
205
+ mask.to_numpy(),
206
+ )
207
+ for (data, mask), (name, dtype) in zip(cols, colspec)
208
+ ]
209
+
210
+
211
+ def load_arrow(
212
+ colspec: List[Tuple[str, int]],
213
+ data: bytes,
214
+ ) -> Tuple[
215
+ 'pa.Array[pa.int64()]',
216
+ List[Tuple['pa.Array[Any]', 'pa.Array[pa.bool_()]']],
217
+ ]:
218
+ '''
219
+ Convert bytes in Apache Feather format into rows of data.
220
+
221
+ Parameters
222
+ ----------
223
+ colspec : List[str]
224
+ An List of column data types
225
+ data : bytes
226
+ The data in Apache Feather format
227
+
228
+ Returns
229
+ -------
230
+ Tuple[pyarrow.Array[int], List[pyarrow.Array[Any]]]
231
+
232
+ '''
233
+ if not has_pyarrow:
234
+ raise RuntimeError('pyarrow must be installed for this operation')
235
+
236
+ return _load_vectors(colspec, data)
237
+
238
+
239
+ def dump(
240
+ returns: List[int],
241
+ row_ids: List[int],
242
+ rows: List[List[Any]],
243
+ ) -> bytes:
244
+ '''
245
+ Convert a list of lists of data into Apache Feather format.
246
+
247
+ Parameters
248
+ ----------
249
+ returns : List[int]
250
+ The returned data type
251
+ row_ids : List[int]
252
+ The row IDs
253
+ rows : List[List[Any]]
254
+ The rows of data and masks to serialize
255
+
256
+ Returns
257
+ -------
258
+ bytes
259
+
260
+ '''
261
+ if not has_pyarrow:
262
+ raise RuntimeError('pyarrow must be installed for this operation')
263
+
264
+ if len(rows) == 0 or len(row_ids) == 0:
265
+ return BytesIO().getbuffer()
266
+
267
+ colnames = ['col{}'.format(x) for x in range(len(rows[0]))]
268
+
269
+ tbl = pa.Table.from_pylist([dict(list(zip(colnames, row))) for row in rows])
270
+ tbl = tbl.add_column(0, '__index__', pa.array(row_ids))
271
+
272
+ sink = pa.BufferOutputStream()
273
+ batches = tbl.to_batches()
274
+ with pa.ipc.new_file(sink, batches[0].schema) as writer:
275
+ for batch in batches:
276
+ writer.write_batch(batch)
277
+ return sink.getvalue()
278
+
279
+
280
+ def _dump_vectors(
281
+ returns: List[int],
282
+ row_ids: 'pa.Array[pa.int64]',
283
+ cols: List[Tuple['pa.Array[Any]', Optional['pa.Array[pa.bool_]']]],
284
+ ) -> bytes:
285
+ '''
286
+ Convert a list of columns of data into Apache Feather format.
287
+
288
+ Parameters
289
+ ----------
290
+ returns : List[int]
291
+ The returned data type
292
+ row_ids : List[int]
293
+ The row IDs
294
+ cols : List[Tuple[Any, Any]]
295
+ The rows of data and masks to serialize
296
+
297
+ Returns
298
+ -------
299
+ bytes
300
+
301
+ '''
302
+ if not has_pyarrow:
303
+ raise RuntimeError('pyarrow must be installed for this operation')
304
+
305
+ if len(cols) == 0 or len(row_ids) == 0:
306
+ return BytesIO().getbuffer()
307
+
308
+ tbl = pa.Table.from_arrays(
309
+ [pa.array(data, mask=mask) for data, mask in cols],
310
+ names=['col{}'.format(x) for x in range(len(cols))],
311
+ )
312
+ tbl = tbl.add_column(0, '__index__', row_ids)
313
+
314
+ sink = pa.BufferOutputStream()
315
+ batches = tbl.to_batches()
316
+ with pa.ipc.new_file(sink, batches[0].schema) as writer:
317
+ for batch in batches:
318
+ writer.write_batch(batch)
319
+ return sink.getvalue()
320
+
321
+
322
+ def dump_arrow(
323
+ returns: List[int],
324
+ row_ids: 'pa.Array[int]',
325
+ cols: List[Tuple['pa.Array[Any]', 'pa.Array[bool]']],
326
+ ) -> bytes:
327
+ if not has_pyarrow:
328
+ raise RuntimeError('pyarrow must be installed for this operation')
329
+
330
+ return _dump_vectors(returns, row_ids, cols)
331
+
332
+
333
+ def dump_numpy(
334
+ returns: List[int],
335
+ row_ids: 'np.typing.NDArray[np.int64]',
336
+ cols: List[Tuple['np.typing.NDArray[Any]', 'np.typing.NDArray[np.bool_]']],
337
+ ) -> bytes:
338
+ if not has_numpy:
339
+ raise RuntimeError('numpy must be installed for this operation')
340
+
341
+ return _dump_vectors(
342
+ returns,
343
+ pa.array(row_ids),
344
+ [(pa.array(x), pa.array(y) if y is not None else None) for x, y in cols],
345
+ )
346
+
347
+
348
+ def dump_pandas(
349
+ returns: List[int],
350
+ row_ids: 'pd.Series[np.int64]',
351
+ cols: List[Tuple['pd.Series[Any]', 'pd.Series[np.bool_]']],
352
+ ) -> bytes:
353
+ if not has_pandas or not has_numpy:
354
+ raise RuntimeError('pandas must be installed for this operation')
355
+
356
+ return _dump_vectors(
357
+ returns,
358
+ pa.array(row_ids),
359
+ [(pa.array(x), pa.array(y) if y is not None else None) for x, y in cols],
360
+ )
361
+
362
+
363
+ def dump_polars(
364
+ returns: List[int],
365
+ row_ids: 'pl.Series[pl.Int64]',
366
+ cols: List[Tuple['pl.Series[Any]', 'pl.Series[pl.Boolean]']],
367
+ ) -> bytes:
368
+ if not has_polars:
369
+ raise RuntimeError('polars must be installed for this operation')
370
+
371
+ return _dump_vectors(
372
+ returns,
373
+ row_ids.to_arrow(),
374
+ [(x.to_arrow(), y.to_arrow() if y is not None else None) for x, y in cols],
375
+ )