fugue 0.8.7.dev5__py3-none-any.whl → 0.8.7.dev7__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.
- fugue/__init__.py +0 -1
- fugue/_utils/io.py +84 -89
- fugue/api.py +1 -0
- fugue/dataframe/api.py +19 -2
- fugue/dataframe/arrow_dataframe.py +48 -11
- fugue/dataframe/dataframe.py +20 -2
- fugue/dataframe/function_wrapper.py +1 -1
- fugue/dataframe/iterable_dataframe.py +3 -0
- fugue/dataframe/pandas_dataframe.py +73 -0
- fugue/dataframe/utils.py +78 -25
- fugue/execution/execution_engine.py +1 -8
- fugue/execution/native_execution_engine.py +5 -11
- fugue/plugins.py +1 -0
- fugue/workflow/_checkpoint.py +9 -9
- {fugue-0.8.7.dev5.dist-info → fugue-0.8.7.dev7.dist-info}/METADATA +4 -4
- {fugue-0.8.7.dev5.dist-info → fugue-0.8.7.dev7.dist-info}/RECORD +40 -38
- {fugue-0.8.7.dev5.dist-info → fugue-0.8.7.dev7.dist-info}/WHEEL +1 -1
- {fugue-0.8.7.dev5.dist-info → fugue-0.8.7.dev7.dist-info}/entry_points.txt +3 -2
- fugue_dask/_io.py +22 -29
- fugue_dask/_utils.py +15 -2
- fugue_dask/dataframe.py +105 -18
- fugue_dask/execution_engine.py +5 -12
- fugue_duckdb/_io.py +21 -37
- fugue_duckdb/dataframe.py +87 -29
- fugue_duckdb/execution_engine.py +2 -7
- fugue_ibis/dataframe.py +13 -0
- fugue_ibis/execution_engine.py +1 -5
- fugue_polars/polars_dataframe.py +53 -16
- fugue_ray/_utils/io.py +15 -17
- fugue_ray/dataframe.py +71 -19
- fugue_spark/_utils/io.py +3 -5
- fugue_spark/dataframe.py +69 -13
- fugue_spark/execution_engine.py +2 -7
- fugue_test/builtin_suite.py +12 -12
- fugue_test/dataframe_suite.py +14 -0
- fugue_test/execution_suite.py +13 -18
- fugue_test/plugins/misc/__init__.py +2 -0
- fugue_test/plugins/misc/fixtures.py +18 -0
- {fugue-0.8.7.dev5.dist-info → fugue-0.8.7.dev7.dist-info}/LICENSE +0 -0
- {fugue-0.8.7.dev5.dist-info → fugue-0.8.7.dev7.dist-info}/top_level.txt +0 -0
fugue/dataframe/utils.py
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import pickle
|
|
3
|
-
from typing import Any, Iterable, Optional, Tuple
|
|
2
|
+
from typing import Any, Dict, Iterable, List, Optional, Tuple
|
|
4
3
|
|
|
5
4
|
import pandas as pd
|
|
6
5
|
import pyarrow as pa
|
|
7
|
-
from
|
|
8
|
-
from triad import
|
|
6
|
+
from fsspec import AbstractFileSystem
|
|
7
|
+
from triad import Schema, assert_or_throw
|
|
9
8
|
from triad.collections.schema import SchemaError
|
|
10
9
|
from triad.exceptions import InvalidOperationError
|
|
11
10
|
from triad.utils.assertion import assert_arg_not_none
|
|
12
11
|
from triad.utils.assertion import assert_or_throw as aot
|
|
12
|
+
from triad.utils.io import url_to_fs
|
|
13
|
+
from triad.utils.pyarrow import pa_batch_to_dicts
|
|
13
14
|
|
|
14
15
|
from .api import as_fugue_df, get_column_names, normalize_column_names, rename
|
|
15
16
|
from .dataframe import DataFrame, LocalBoundedDataFrame
|
|
@@ -111,7 +112,6 @@ def serialize_df(
|
|
|
111
112
|
df: Optional[DataFrame],
|
|
112
113
|
threshold: int = -1,
|
|
113
114
|
file_path: Optional[str] = None,
|
|
114
|
-
fs: Optional[FileSystem] = None,
|
|
115
115
|
) -> Optional[bytes]:
|
|
116
116
|
"""Serialize input dataframe to base64 string or to file
|
|
117
117
|
if it's larger than threshold
|
|
@@ -120,15 +120,8 @@ def serialize_df(
|
|
|
120
120
|
:param threshold: file byte size threshold, defaults to -1
|
|
121
121
|
:param file_path: file path to store the data (used only if the serialized data
|
|
122
122
|
is larger than ``threshold``), defaults to None
|
|
123
|
-
:param fs: :class:`~triad:triad.collections.fs.FileSystem`, defaults to None
|
|
124
123
|
:raises InvalidOperationError: if file is large but ``file_path`` is not provided
|
|
125
124
|
:return: a pickled blob either containing the data or the file path
|
|
126
|
-
|
|
127
|
-
.. note::
|
|
128
|
-
|
|
129
|
-
If fs is not provided but it needs to write to disk, then it will use
|
|
130
|
-
:meth:`~fs:fs.opener.registry.Registry.open_fs` to try to open the file to
|
|
131
|
-
write.
|
|
132
125
|
"""
|
|
133
126
|
if df is None:
|
|
134
127
|
return None
|
|
@@ -139,24 +132,20 @@ def serialize_df(
|
|
|
139
132
|
else:
|
|
140
133
|
if file_path is None:
|
|
141
134
|
raise InvalidOperationError("file_path is not provided")
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
) as _fs:
|
|
146
|
-
_fs.writebytes(os.path.basename(file_path), data)
|
|
147
|
-
else:
|
|
148
|
-
fs.writebytes(file_path, data)
|
|
135
|
+
fs, path = url_to_fs(file_path)
|
|
136
|
+
with fs.open(path, "wb") as f:
|
|
137
|
+
f.write(data)
|
|
149
138
|
return pickle.dumps(file_path)
|
|
150
139
|
|
|
151
140
|
|
|
152
141
|
def deserialize_df(
|
|
153
|
-
data: Optional[bytes], fs: Optional[
|
|
142
|
+
data: Optional[bytes], fs: Optional[AbstractFileSystem] = None
|
|
154
143
|
) -> Optional[LocalBoundedDataFrame]:
|
|
155
144
|
"""Deserialize json string to
|
|
156
145
|
:class:`~fugue.dataframe.dataframe.LocalBoundedDataFrame`
|
|
157
146
|
|
|
158
147
|
:param json_str: json string containing the base64 data or a file path
|
|
159
|
-
:param fs:
|
|
148
|
+
:param fs: the file system to use, defaults to None
|
|
160
149
|
:raises ValueError: if the json string is invalid, not generated from
|
|
161
150
|
:func:`~.serialize_df`
|
|
162
151
|
:return: :class:`~fugue.dataframe.dataframe.LocalBoundedDataFrame` if ``json_str``
|
|
@@ -168,10 +157,9 @@ def deserialize_df(
|
|
|
168
157
|
if isinstance(obj, LocalBoundedDataFrame):
|
|
169
158
|
return obj
|
|
170
159
|
elif isinstance(obj, str):
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return pickle.loads(fs.readbytes(obj))
|
|
160
|
+
fs, path = url_to_fs(obj)
|
|
161
|
+
with fs.open(path, "rb") as f:
|
|
162
|
+
return pickle.load(f)
|
|
175
163
|
raise ValueError("data is invalid")
|
|
176
164
|
|
|
177
165
|
|
|
@@ -250,3 +238,68 @@ def get_join_schemas(
|
|
|
250
238
|
else:
|
|
251
239
|
aot(len(on) > 0, SchemaError("join on columns must be specified"))
|
|
252
240
|
return cm, (df1.schema.union(schema2))
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def pa_table_as_array_iterable(
|
|
244
|
+
df: pa.Table, columns: Optional[List[str]] = None
|
|
245
|
+
) -> Iterable[List[List[Any]]]:
|
|
246
|
+
"""Convert a pyarrow table to an iterable of list
|
|
247
|
+
|
|
248
|
+
:param df: pyarrow table
|
|
249
|
+
:param columns: if not None, only these columns will be returned, defaults to None
|
|
250
|
+
:return: an iterable of list
|
|
251
|
+
"""
|
|
252
|
+
assert_or_throw(columns is None or len(columns) > 0, ValueError("empty columns"))
|
|
253
|
+
_df = df if columns is None or len(columns) == 0 else df.select(columns)
|
|
254
|
+
for batch in _df.to_batches():
|
|
255
|
+
for x in zip(*batch.to_pydict().values()):
|
|
256
|
+
yield list(x)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def pa_table_as_array(
|
|
260
|
+
df: pa.Table, columns: Optional[List[str]] = None
|
|
261
|
+
) -> List[List[List[Any]]]:
|
|
262
|
+
"""Convert a pyarrow table to a list of list
|
|
263
|
+
|
|
264
|
+
:param df: pyarrow table
|
|
265
|
+
:param columns: if not None, only these columns will be returned, defaults to None
|
|
266
|
+
:return: a list of list
|
|
267
|
+
"""
|
|
268
|
+
return list(pa_table_as_array_iterable(df, columns=columns))
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
def pa_table_as_dict_iterable(
|
|
272
|
+
df: pa.Table, columns: Optional[List[str]] = None
|
|
273
|
+
) -> Iterable[Dict[str, Any]]:
|
|
274
|
+
"""Convert a pyarrow table to an iterable of dict
|
|
275
|
+
|
|
276
|
+
:param df: pyarrow table
|
|
277
|
+
:param columns: if not None, only these columns will be returned, defaults to None
|
|
278
|
+
:return: an iterable of dict
|
|
279
|
+
"""
|
|
280
|
+
for ck in _pa_table_as_dicts_chunks(df, columns=columns):
|
|
281
|
+
yield from ck
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def pa_table_as_dicts(
|
|
285
|
+
df: pa.Table, columns: Optional[List[str]] = None
|
|
286
|
+
) -> List[Dict[str, Any]]:
|
|
287
|
+
"""Convert a pyarrow table to a list of dict
|
|
288
|
+
|
|
289
|
+
:param df: pyarrow table
|
|
290
|
+
:param columns: if not None, only these columns will be returned, defaults to None
|
|
291
|
+
:return: a list of dict
|
|
292
|
+
"""
|
|
293
|
+
res: List[Dict[str, Any]] = []
|
|
294
|
+
for ck in _pa_table_as_dicts_chunks(df, columns=columns):
|
|
295
|
+
res += ck
|
|
296
|
+
return res
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _pa_table_as_dicts_chunks(
|
|
300
|
+
df: pa.Table, columns: Optional[List[str]] = None
|
|
301
|
+
) -> Iterable[List[Dict[str, Any]]]:
|
|
302
|
+
assert_or_throw(columns is None or len(columns) > 0, ValueError("empty columns"))
|
|
303
|
+
_df = df if columns is None or len(columns) == 0 else df.select(columns)
|
|
304
|
+
for batch in _df.to_batches():
|
|
305
|
+
yield pa_batch_to_dicts(batch)
|
|
@@ -18,7 +18,6 @@ from typing import (
|
|
|
18
18
|
from uuid import uuid4
|
|
19
19
|
|
|
20
20
|
from triad import ParamDict, Schema, SerializableRLock, assert_or_throw, to_uuid
|
|
21
|
-
from triad.collections.fs import FileSystem
|
|
22
21
|
from triad.collections.function_wrapper import AnnotatedParam
|
|
23
22
|
from triad.exceptions import InvalidOperationError
|
|
24
23
|
from triad.utils.convert import to_size
|
|
@@ -471,12 +470,6 @@ class ExecutionEngine(FugueEngineBase):
|
|
|
471
470
|
"""
|
|
472
471
|
self._sql_engine = engine
|
|
473
472
|
|
|
474
|
-
@property
|
|
475
|
-
@abstractmethod
|
|
476
|
-
def fs(self) -> FileSystem: # pragma: no cover
|
|
477
|
-
"""File system of this engine instance"""
|
|
478
|
-
raise NotImplementedError
|
|
479
|
-
|
|
480
473
|
@abstractmethod
|
|
481
474
|
def create_default_map_engine(self) -> MapEngine: # pragma: no cover
|
|
482
475
|
"""Default MapEngine if user doesn't specify"""
|
|
@@ -1323,7 +1316,7 @@ class _Comap:
|
|
|
1323
1316
|
self._on_init(partition_no, empty_dfs)
|
|
1324
1317
|
|
|
1325
1318
|
def run(self, cursor: PartitionCursor, df: LocalDataFrame) -> LocalDataFrame:
|
|
1326
|
-
data =
|
|
1319
|
+
data = df.as_dicts()
|
|
1327
1320
|
if self.how == "inner":
|
|
1328
1321
|
if len(data) < self.dfs_count:
|
|
1329
1322
|
return ArrayDataFrame([], self.output_schema)
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
from typing import Any, Callable, Dict, List, Optional, Type, Union
|
|
4
|
+
|
|
4
5
|
import numpy as np
|
|
5
6
|
import pandas as pd
|
|
6
7
|
from triad import Schema
|
|
7
8
|
from triad.collections.dict import IndexedOrderedDict
|
|
8
|
-
from triad.collections.fs import FileSystem
|
|
9
9
|
from triad.utils.assertion import assert_or_throw
|
|
10
|
+
from triad.utils.io import makedirs
|
|
10
11
|
from triad.utils.pandas_like import PandasUtils
|
|
11
12
|
|
|
12
13
|
from fugue._utils.io import load_df, save_df
|
|
@@ -179,7 +180,6 @@ class NativeExecutionEngine(ExecutionEngine):
|
|
|
179
180
|
|
|
180
181
|
def __init__(self, conf: Any = None):
|
|
181
182
|
super().__init__(conf)
|
|
182
|
-
self._fs = FileSystem()
|
|
183
183
|
self._log = logging.getLogger()
|
|
184
184
|
|
|
185
185
|
def __repr__(self) -> str:
|
|
@@ -189,10 +189,6 @@ class NativeExecutionEngine(ExecutionEngine):
|
|
|
189
189
|
def log(self) -> logging.Logger:
|
|
190
190
|
return self._log
|
|
191
191
|
|
|
192
|
-
@property
|
|
193
|
-
def fs(self) -> FileSystem:
|
|
194
|
-
return self._fs
|
|
195
|
-
|
|
196
192
|
@property
|
|
197
193
|
def is_distributed(self) -> bool:
|
|
198
194
|
return False
|
|
@@ -395,9 +391,7 @@ class NativeExecutionEngine(ExecutionEngine):
|
|
|
395
391
|
**kwargs: Any,
|
|
396
392
|
) -> LocalBoundedDataFrame:
|
|
397
393
|
return self.to_df(
|
|
398
|
-
load_df(
|
|
399
|
-
path, format_hint=format_hint, columns=columns, fs=self.fs, **kwargs
|
|
400
|
-
)
|
|
394
|
+
load_df(path, format_hint=format_hint, columns=columns, **kwargs)
|
|
401
395
|
)
|
|
402
396
|
|
|
403
397
|
def save_df(
|
|
@@ -413,9 +407,9 @@ class NativeExecutionEngine(ExecutionEngine):
|
|
|
413
407
|
partition_spec = partition_spec or PartitionSpec()
|
|
414
408
|
if not force_single and not partition_spec.empty:
|
|
415
409
|
kwargs["partition_cols"] = partition_spec.partition_by
|
|
416
|
-
|
|
410
|
+
makedirs(os.path.dirname(path), exist_ok=True)
|
|
417
411
|
df = self.to_df(df)
|
|
418
|
-
save_df(df, path, format_hint=format_hint, mode=mode,
|
|
412
|
+
save_df(df, path, format_hint=format_hint, mode=mode, **kwargs)
|
|
419
413
|
|
|
420
414
|
|
|
421
415
|
@fugue_annotated_param(NativeExecutionEngine)
|
fugue/plugins.py
CHANGED
fugue/workflow/_checkpoint.py
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from triad.utils.assertion import assert_or_throw
|
|
4
|
+
from triad.utils.hash import to_uuid
|
|
5
|
+
from triad.utils.io import exists, join, makedirs, rm
|
|
6
|
+
|
|
4
7
|
from fugue.collections.partition import PartitionSpec
|
|
5
8
|
from fugue.collections.yielded import PhysicalYielded
|
|
6
9
|
from fugue.constants import FUGUE_CONF_WORKFLOW_CHECKPOINT_PATH
|
|
7
10
|
from fugue.dataframe import DataFrame
|
|
8
11
|
from fugue.exceptions import FugueWorkflowCompileError, FugueWorkflowRuntimeError
|
|
9
12
|
from fugue.execution.execution_engine import ExecutionEngine
|
|
10
|
-
from triad.utils.assertion import assert_or_throw
|
|
11
|
-
from triad.utils.hash import to_uuid
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class Checkpoint(object):
|
|
@@ -130,7 +131,6 @@ class WeakCheckpoint(Checkpoint):
|
|
|
130
131
|
class CheckpointPath(object):
|
|
131
132
|
def __init__(self, engine: ExecutionEngine):
|
|
132
133
|
self._engine = engine
|
|
133
|
-
self._fs = engine.fs
|
|
134
134
|
self._log = engine.log
|
|
135
135
|
self._path = engine.conf.get(FUGUE_CONF_WORKFLOW_CHECKPOINT_PATH, "").strip()
|
|
136
136
|
self._temp_path = ""
|
|
@@ -143,14 +143,14 @@ class CheckpointPath(object):
|
|
|
143
143
|
if self._path == "":
|
|
144
144
|
self._temp_path = ""
|
|
145
145
|
return ""
|
|
146
|
-
self._temp_path =
|
|
147
|
-
|
|
146
|
+
self._temp_path = join(self._path, execution_id)
|
|
147
|
+
makedirs(self._temp_path, exist_ok=True)
|
|
148
148
|
return self._temp_path
|
|
149
149
|
|
|
150
150
|
def remove_temp_path(self):
|
|
151
151
|
if self._temp_path != "":
|
|
152
152
|
try:
|
|
153
|
-
|
|
153
|
+
rm(self._temp_path, recursive=True)
|
|
154
154
|
except Exception as e: # pragma: no cover
|
|
155
155
|
self._log.info("Unable to remove " + self._temp_path, e)
|
|
156
156
|
|
|
@@ -162,7 +162,7 @@ class CheckpointPath(object):
|
|
|
162
162
|
f"{FUGUE_CONF_WORKFLOW_CHECKPOINT_PATH} is not set"
|
|
163
163
|
),
|
|
164
164
|
)
|
|
165
|
-
return
|
|
165
|
+
return join(path, obj_id + ".parquet")
|
|
166
166
|
|
|
167
167
|
def get_table_name(self, obj_id: str, permanent: bool) -> str:
|
|
168
168
|
path = self._path if permanent else self._temp_path
|
|
@@ -170,6 +170,6 @@ class CheckpointPath(object):
|
|
|
170
170
|
|
|
171
171
|
def temp_file_exists(self, path: str) -> bool:
|
|
172
172
|
try:
|
|
173
|
-
return
|
|
173
|
+
return exists(path)
|
|
174
174
|
except Exception: # pragma: no cover
|
|
175
175
|
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fugue
|
|
3
|
-
Version: 0.8.7.
|
|
3
|
+
Version: 0.8.7.dev7
|
|
4
4
|
Summary: An abstraction layer for distributed computation
|
|
5
5
|
Home-page: http://github.com/fugue-project/fugue
|
|
6
6
|
Author: The Fugue Development Team
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
20
20
|
Requires-Python: >=3.8
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
|
-
Requires-Dist: triad ==0.9.2.
|
|
22
|
+
Requires-Dist: triad ==0.9.2.dev8
|
|
23
23
|
Requires-Dist: adagio >=0.2.4
|
|
24
24
|
Requires-Dist: qpd >=0.4.4
|
|
25
25
|
Requires-Dist: fugue-sql-antlr >=0.1.6
|
|
@@ -32,7 +32,7 @@ Requires-Dist: fugue-sql-antlr[cpp] >=0.1.6 ; extra == 'all'
|
|
|
32
32
|
Requires-Dist: pyspark >=3.1.1 ; extra == 'all'
|
|
33
33
|
Requires-Dist: dask[dataframe,distributed] >=2023.5.0 ; extra == 'all'
|
|
34
34
|
Requires-Dist: dask-sql ; extra == 'all'
|
|
35
|
-
Requires-Dist: ray[data] >=2.
|
|
35
|
+
Requires-Dist: ray[data] >=2.4.0 ; extra == 'all'
|
|
36
36
|
Requires-Dist: notebook ; extra == 'all'
|
|
37
37
|
Requires-Dist: jupyterlab ; extra == 'all'
|
|
38
38
|
Requires-Dist: ipython >=7.10.0 ; extra == 'all'
|
|
@@ -59,7 +59,7 @@ Requires-Dist: ipython >=7.10.0 ; extra == 'notebook'
|
|
|
59
59
|
Provides-Extra: polars
|
|
60
60
|
Requires-Dist: polars ; extra == 'polars'
|
|
61
61
|
Provides-Extra: ray
|
|
62
|
-
Requires-Dist: ray[data] >=2.
|
|
62
|
+
Requires-Dist: ray[data] >=2.4.0 ; extra == 'ray'
|
|
63
63
|
Requires-Dist: duckdb >=0.5.0 ; extra == 'ray'
|
|
64
64
|
Requires-Dist: pyarrow >=6.0.1 ; extra == 'ray'
|
|
65
65
|
Provides-Extra: spark
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
fugue/__init__.py,sha256=
|
|
2
|
-
fugue/api.py,sha256=
|
|
1
|
+
fugue/__init__.py,sha256=LKkBEPEAMLG-Yuzqt0IgoIDEfNf9a1zUffNKb83D_l8,2705
|
|
2
|
+
fugue/api.py,sha256=dLUrigFhDMB5x7cvlWSK8EyaY2o0AmhgPr0VRtfzSz0,1254
|
|
3
3
|
fugue/constants.py,sha256=crd0VqX8WtBcjSUNwZDi2LDIEkhUMWOlSn73H8JI9ds,3385
|
|
4
4
|
fugue/dev.py,sha256=GQCkezBBl4V0lVDWhGtUQKqomiCxgR9dMhfqj9C8cS8,1369
|
|
5
5
|
fugue/exceptions.py,sha256=ylP8gkZL8ao_ZLinNYKv16FPyO_n7c29dN-4QChUxi0,1544
|
|
6
|
-
fugue/plugins.py,sha256=
|
|
6
|
+
fugue/plugins.py,sha256=kao-H5z-cRbujBKW1QC9IHUOBKxXMhpVQ6saIE7cXm8,1012
|
|
7
7
|
fugue/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
fugue/registry.py,sha256=SNULGv08f37fRO-cIxFDmnVcod7ref2fNLSK6G7nVnI,868
|
|
9
9
|
fugue/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
fugue/_utils/display.py,sha256=JV8oDA7efHm1wceZulCBOY5dMvjbWHvIm6ASisKfoWY,3164
|
|
11
11
|
fugue/_utils/exception.py,sha256=SFIjwjV4CIEovp3P9k7ePNOFB12A5D8hDdhtfFUeM5Y,2247
|
|
12
12
|
fugue/_utils/interfaceless.py,sha256=wI0H6L4W_1uQjh9tpjgT9HzN-fbrrtXXHC1x6Q_rrPg,2203
|
|
13
|
-
fugue/_utils/io.py,sha256=
|
|
13
|
+
fugue/_utils/io.py,sha256=adrtj6Dq0ti426DNlkliApbTkp8b3bfBysAiE5MVQVc,9265
|
|
14
14
|
fugue/_utils/misc.py,sha256=_huy0eylmRTEFoReGR2M4rbAI8m79hFcfY5bDceVEXU,887
|
|
15
15
|
fugue/_utils/registry.py,sha256=lrbzTdUEVnW6paBGDj-Yb-aTIbP5mjCqrXuRU9_N6os,316
|
|
16
16
|
fugue/bag/__init__.py,sha256=0Q0_rnrEThrTx2U-1xGNyAg95idp_xcnywymIcW4Xck,46
|
|
@@ -25,24 +25,24 @@ fugue/column/expressions.py,sha256=fdGX9oPCqJBuROFZqrOYVcwkjghdXT9ngaSTG5tW_i8,2
|
|
|
25
25
|
fugue/column/functions.py,sha256=ygLyn2gp5lTdGbYqJXeGeMmRNhbm4-vfJvAY_Zt0pb0,9774
|
|
26
26
|
fugue/column/sql.py,sha256=s_qTtHgnvRFqjhCWr7s595PTrHM-Pr9zHUQfU5xcTVA,17391
|
|
27
27
|
fugue/dataframe/__init__.py,sha256=zm7TbsaJLIvfm7zymWm2LGcuJd3nxfGsFnQiyrSnenM,678
|
|
28
|
-
fugue/dataframe/api.py,sha256=
|
|
28
|
+
fugue/dataframe/api.py,sha256=aWBvMaiSUxOvdQMfe79zHShWuPfLcgiWggC9HvVxvSE,11017
|
|
29
29
|
fugue/dataframe/array_dataframe.py,sha256=4scWnmQ6sjy1A6o7IYdRc0VVutBEfcJrA1f9wkph4Kg,4440
|
|
30
|
-
fugue/dataframe/arrow_dataframe.py,sha256=
|
|
31
|
-
fugue/dataframe/dataframe.py,sha256=
|
|
30
|
+
fugue/dataframe/arrow_dataframe.py,sha256=r5zcZBX_N6XO5dmixBkTCPgLcMmgDF022piZvrwRp_c,11485
|
|
31
|
+
fugue/dataframe/dataframe.py,sha256=xmyG85i14A6LDRkNmPt29oYq7PJsq668s1QvFHK8PV4,16964
|
|
32
32
|
fugue/dataframe/dataframe_iterable_dataframe.py,sha256=lx71KfaI4lsVKI-79buc-idaeT20JEMBOq21SQcAiY8,7259
|
|
33
33
|
fugue/dataframe/dataframes.py,sha256=tBSpHsENgbcdOJ0Jgst6PTKbjG7_uoFJch96oTlaQIs,4160
|
|
34
|
-
fugue/dataframe/function_wrapper.py,sha256=
|
|
35
|
-
fugue/dataframe/iterable_dataframe.py,sha256=
|
|
36
|
-
fugue/dataframe/pandas_dataframe.py,sha256=
|
|
37
|
-
fugue/dataframe/utils.py,sha256=
|
|
34
|
+
fugue/dataframe/function_wrapper.py,sha256=V1eQMOn27UroEYT7_YiwoEF0RjZYIM0zkD3vfaMAQFs,14813
|
|
35
|
+
fugue/dataframe/iterable_dataframe.py,sha256=TcOoNKa4jNbHbvAZ0XAhtMmGcioygIHPxI9budDtenQ,4758
|
|
36
|
+
fugue/dataframe/pandas_dataframe.py,sha256=0L0wYCGhD2BpQbruoT07Ox9iQM5YLHLNrcgzudc-yKs,11633
|
|
37
|
+
fugue/dataframe/utils.py,sha256=shN1eHYTnPhb38BHEpLlCdLSzX_qpoQ3-fsDgu1hCzQ,10840
|
|
38
38
|
fugue/dataset/__init__.py,sha256=5f2CAJ4xst6Z2o9Q2e2twfDOGUw8ZJoE2ild4JEU2pg,112
|
|
39
39
|
fugue/dataset/api.py,sha256=DacI4L2w5NJ-eZ6nFxNMqmReEnb0WUXswbjVp7BeErk,2794
|
|
40
40
|
fugue/dataset/dataset.py,sha256=jWXZqy3msMPFFkhas2PYJEX55ZAI3gk3Txq5f4-Qya4,4759
|
|
41
41
|
fugue/execution/__init__.py,sha256=iZGxAznZz9piM3k4gp0tln97MDIBxdliLyNbD-0Zc48,427
|
|
42
42
|
fugue/execution/api.py,sha256=KsFOLGdWQMlXmlQ5JRgRsbUeB64qzTVHxSEaunjiojo,39818
|
|
43
|
-
fugue/execution/execution_engine.py,sha256=
|
|
43
|
+
fugue/execution/execution_engine.py,sha256=5lIlebgPK7q-Gf4bWt1t_Anq3MjPaJBpGWN9bbry1B4,47506
|
|
44
44
|
fugue/execution/factory.py,sha256=5ICzfNh2QqqABuVyYLijY5-7LZgfRqczlaZN32p78bE,21003
|
|
45
|
-
fugue/execution/native_execution_engine.py,sha256=
|
|
45
|
+
fugue/execution/native_execution_engine.py,sha256=lbKd3uGh00cSTkIM8l-u8jmsMxFzV2PSUeJgudayxKs,14236
|
|
46
46
|
fugue/extensions/__init__.py,sha256=y-uLKd6mZ8sZ_8-OdW6ELoBO_9IfC0gDmEbE_rMCvOA,599
|
|
47
47
|
fugue/extensions/_utils.py,sha256=Bi3pYKy2Z6fG6_5BpwIWldxetassXpB4Zp8QamWB-wg,5173
|
|
48
48
|
fugue/extensions/context.py,sha256=c_y2UttzzIFoQTOCV42VCdj2nqah33xYuBjbKNIOpx8,4262
|
|
@@ -72,7 +72,7 @@ fugue/sql/_visitors.py,sha256=2pc0J-AHJAiIexsKgNjcgrCGOyhC3_7rzonSgtjy--k,33844
|
|
|
72
72
|
fugue/sql/api.py,sha256=l2I9CAy_W2oFFTct9fDPLyXF0LiDxQhMx5O8jBHTAxU,10050
|
|
73
73
|
fugue/sql/workflow.py,sha256=S1pOhp0b0t6johFAJWmj6xUB7Ti5LQgNABpAzmLGjrQ,3010
|
|
74
74
|
fugue/workflow/__init__.py,sha256=tXM_KYO8Q358W6qAVlwhIQIaYNRDgZtTubrIEX4QMgM,229
|
|
75
|
-
fugue/workflow/_checkpoint.py,sha256=
|
|
75
|
+
fugue/workflow/_checkpoint.py,sha256=tt5Iv7c5ZStC0MD1inItksQ0GuK0ViniA3nvrgym-5c,5681
|
|
76
76
|
fugue/workflow/_tasks.py,sha256=Zq_jXJO_VaF8DrWUuBiwO2Y3OVuhsiOQdzP4VBsp7Fo,11826
|
|
77
77
|
fugue/workflow/_workflow_context.py,sha256=Wmp6n0lSrh2Gpslb5EaSX6BQNniKsvKn6SlhVkQ6ui0,2504
|
|
78
78
|
fugue/workflow/api.py,sha256=uQoxPSCZ91-ST4vwuPWG7qioRGW4eo-Sgi3DdwtSL4k,12495
|
|
@@ -86,25 +86,25 @@ fugue_contrib/viz/__init__.py,sha256=osgZx63Br-yMZImyEfYf9MVzJNM2Cqqke_-WsuDmG5M
|
|
|
86
86
|
fugue_contrib/viz/_ext.py,sha256=Lu_DlS5DcmrFz27fHcKTCkhKyknVWcfS5kzZVVuO9xM,1345
|
|
87
87
|
fugue_dask/__init__.py,sha256=2CcJ0AsN-k_f7dZ-yAyYpaICfUMPfH3l0FvUJSBzTr0,161
|
|
88
88
|
fugue_dask/_constants.py,sha256=35UmTVITk21GhRyRlbJOwPPdQsytM_p_2NytOXEay18,510
|
|
89
|
-
fugue_dask/_io.py,sha256=
|
|
90
|
-
fugue_dask/_utils.py,sha256=
|
|
91
|
-
fugue_dask/dataframe.py,sha256=
|
|
92
|
-
fugue_dask/execution_engine.py,sha256=
|
|
89
|
+
fugue_dask/_io.py,sha256=HmL3Q2lRSptX1-GwiB3MN2VpjTRfmVKD8TDZkhS4x5c,5818
|
|
90
|
+
fugue_dask/_utils.py,sha256=n70N3wPPMz13Jh0GWJM3Je-TCYpU36yGP_YCwIHqUrc,8908
|
|
91
|
+
fugue_dask/dataframe.py,sha256=MuG9TqCND7qI66lPvxzuomfE7yA4sW7DjrvbyvE6XEU,13471
|
|
92
|
+
fugue_dask/execution_engine.py,sha256=PAClUP9lCdn2Aajt2AsoFOsgO-95WcdRDKkjNSbVbzA,20980
|
|
93
93
|
fugue_dask/ibis_engine.py,sha256=kQdaG_KlZZ2AjtYETNCdTJOgtwI_eH0aGzLaAiIBbRI,2120
|
|
94
94
|
fugue_dask/registry.py,sha256=7UTg_eie7zKlHYKMCyOo0TNn5y2TiIjE8kiS2PruHFc,2200
|
|
95
95
|
fugue_duckdb/__init__.py,sha256=nSNv-fxBAKD6W23EbMeV4dVRIaSTqr9DzQUWuVOES8s,379
|
|
96
|
-
fugue_duckdb/_io.py,sha256=
|
|
96
|
+
fugue_duckdb/_io.py,sha256=E35_GoD1uGuuAMOY4H8E2j-UazdAgTmLp4lLWqJrNsE,8437
|
|
97
97
|
fugue_duckdb/_utils.py,sha256=ElKbHUyn5fWSPGXsK57iqMzcqKtCf0c8pBVBYGe5Ql4,5020
|
|
98
98
|
fugue_duckdb/dask.py,sha256=agoLzeB7Swxj2kVWfmXFbWD1NS2lbbTlnrjSkR8kKWY,5014
|
|
99
|
-
fugue_duckdb/dataframe.py,sha256=
|
|
100
|
-
fugue_duckdb/execution_engine.py,sha256=
|
|
99
|
+
fugue_duckdb/dataframe.py,sha256=LRfTv7Y46wMM_IDYSP1R-5OXuHuBg8GHjPGFFt8u7l0,8444
|
|
100
|
+
fugue_duckdb/execution_engine.py,sha256=IZDmSAtOMJGvulTStxjTmsqJyI5QRNyxBgSMlFMSrBI,20389
|
|
101
101
|
fugue_duckdb/ibis_engine.py,sha256=MrypeABozqwetKOpqtrmWvCJX2QPfBXhbSEhvK9vqmI,1990
|
|
102
102
|
fugue_duckdb/registry.py,sha256=Dj0Tng1cXVT6Q7t-KxOky2k1dD9xSBjYGQmI26UgZPo,3095
|
|
103
103
|
fugue_ibis/__init__.py,sha256=PcUt66KlLyGGicad7asq5j2U567_fhR0HzvWQBhV1VM,362
|
|
104
104
|
fugue_ibis/_compat.py,sha256=zKdTaTfuC02eUIzZPkcd7oObnVBi_X5mQjQf7SDme3Y,246
|
|
105
105
|
fugue_ibis/_utils.py,sha256=BUL5swA5FE4eQu0t5Z17hZVu9a2MFfxlFH6Ymy9xifg,6607
|
|
106
|
-
fugue_ibis/dataframe.py,sha256=
|
|
107
|
-
fugue_ibis/execution_engine.py,sha256=
|
|
106
|
+
fugue_ibis/dataframe.py,sha256=0Fb1vJjwEeffgoUCDfDGIMuSFaPgUJqcB-JqJOAALfs,7789
|
|
107
|
+
fugue_ibis/execution_engine.py,sha256=0GIjjMmitCKhjasAKFiFUCCUBNdxAiU0b61RsmFyhIk,18355
|
|
108
108
|
fugue_ibis/extensions.py,sha256=H8l-SPfoqLuUoILtOuL2nccOpoL83zHeSoIhoqjtWQM,6905
|
|
109
109
|
fugue_ibis/execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
110
|
fugue_ibis/execution/ibis_engine.py,sha256=-HdPnIFWD83n5WITdzJiu4attH7GOcO041wkT5Y5ChA,1499
|
|
@@ -117,47 +117,49 @@ fugue_notebook/nbextension/description.yaml,sha256=CsXgx9CSLbAlO4Z1kvX9ejYA_TImP
|
|
|
117
117
|
fugue_notebook/nbextension/main.js,sha256=Px2tQuBCNGEZOEBKsnfVruFEg-AxK7Tj0dY84ktub_U,3709
|
|
118
118
|
fugue_polars/__init__.py,sha256=NDkjlbLhHPTjUaCAw6mAwIqeK3HSeh-z88s9dqmwheQ,61
|
|
119
119
|
fugue_polars/_utils.py,sha256=7rGGWgB1-VqFwh4PcBLYk_5VNjd8FNOS4TDFyDVz2sg,159
|
|
120
|
-
fugue_polars/polars_dataframe.py,sha256=
|
|
120
|
+
fugue_polars/polars_dataframe.py,sha256=8LQ0IB-JFFdjW2ltDzq8DfIbUC_jjjDr1YM29usJag0,8831
|
|
121
121
|
fugue_polars/registry.py,sha256=gd6qQ-OxYtTAQFyvYbLDPXmSvCR-LW6n5K5ylgMY_7A,2950
|
|
122
122
|
fugue_ray/__init__.py,sha256=HzEHfG2mpc0ugf3nf1Pdy15Bhg35K6maZpYejn1aoyI,119
|
|
123
123
|
fugue_ray/_constants.py,sha256=vu5l1w-Wi-2V_nm0HLXKOYhh5HdWRCc5yQktO2XzhOg,569
|
|
124
|
-
fugue_ray/dataframe.py,sha256=
|
|
124
|
+
fugue_ray/dataframe.py,sha256=7asw2qf9vm6vLBSzqghm9pUcNAppJOz5CkT7XyR0S5g,12514
|
|
125
125
|
fugue_ray/execution_engine.py,sha256=NT_mnacijp1zskFbtganUwA3JNRPU-FNNvJswA6U_Yg,12607
|
|
126
126
|
fugue_ray/registry.py,sha256=xJRAhbwNrg695EwghQDnVtTKi4YkqZ0_61BD4OAblSA,1685
|
|
127
127
|
fugue_ray/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
128
|
fugue_ray/_utils/cluster.py,sha256=3T3Gyra6lAHlzktta-Ro35j6YZQfH6fNrj2hC5ATF9k,621
|
|
129
129
|
fugue_ray/_utils/dataframe.py,sha256=_EadzS4rPom1A_cF0pqoPlwrNYZTfTwcyyu86_fFsqU,4400
|
|
130
|
-
fugue_ray/_utils/io.py,sha256=
|
|
130
|
+
fugue_ray/_utils/io.py,sha256=4FfPS2DMeIHvbzGoJ_iPvwwVr7lZHXRoJZxceNZ4EHQ,8647
|
|
131
131
|
fugue_spark/__init__.py,sha256=rvrMpFs9socMgyH_58gLbnAqmirBf5oidXoO4cekW6U,165
|
|
132
132
|
fugue_spark/_constants.py,sha256=K2uLQfjvMxXk75K-7_Wn47Alpwq5rW57BtECAUrOeqA,177
|
|
133
|
-
fugue_spark/dataframe.py,sha256=
|
|
134
|
-
fugue_spark/execution_engine.py,sha256=
|
|
133
|
+
fugue_spark/dataframe.py,sha256=lYa8FizM3p_lsKYFR49FazkVZMJKyi2LABKTpP5YBLo,12006
|
|
134
|
+
fugue_spark/execution_engine.py,sha256=KPmBtH4zioXdWsvnPow4fOPQh8Yj0cn6yCJyKdbT544,33023
|
|
135
135
|
fugue_spark/ibis_engine.py,sha256=Yl5xxwROo1idcD2hFaylaI1IpmBUgbvOZRWtcrE0Zjo,1697
|
|
136
136
|
fugue_spark/registry.py,sha256=kyIMk6dAiKRSKCHawQKyXu9DhZ24T6j3gL57TiOAZ8c,4162
|
|
137
137
|
fugue_spark/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
138
138
|
fugue_spark/_utils/convert.py,sha256=eRWkDYA4UO-FQu-2y4O80WEdawx7X_rIrWg55AlOiRc,10007
|
|
139
|
-
fugue_spark/_utils/io.py,sha256=
|
|
139
|
+
fugue_spark/_utils/io.py,sha256=OdUezKpB29Lx9aUS2k9x0xUAGZrmgMZyQYGPEeHk7rQ,5574
|
|
140
140
|
fugue_spark/_utils/misc.py,sha256=o8dZmXOHnA7D_ps37vgGXTPTiSEG9LQzPKq7l-MG-qM,860
|
|
141
141
|
fugue_spark/_utils/partition.py,sha256=iaesyO5f4uXhj1W-p91cD5ecPiGlu0bzh8gl2ce2Uvg,3618
|
|
142
142
|
fugue_sql/__init__.py,sha256=Cmr7w0Efr7PzoXdQzdJfc4Dgqd69qKqcHZZodENq7EU,287
|
|
143
143
|
fugue_sql/exceptions.py,sha256=ltS0MC8gMnVVrJbQiOZ0kRUWvVQ2LTx33dCW3ugqtb0,260
|
|
144
144
|
fugue_test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
145
145
|
fugue_test/bag_suite.py,sha256=WbDCFjuAHYoJh4GXSPiSJxOoOwE1VMtYpJ3lQrsUK-Y,2483
|
|
146
|
-
fugue_test/builtin_suite.py,sha256=
|
|
147
|
-
fugue_test/dataframe_suite.py,sha256=
|
|
148
|
-
fugue_test/execution_suite.py,sha256=
|
|
146
|
+
fugue_test/builtin_suite.py,sha256=3uSY484Jl2985UoJravD4C-SlKBH0WwTWFobp4Pqgzg,78399
|
|
147
|
+
fugue_test/dataframe_suite.py,sha256=LgB931CkASbGOrRQ9j92DGk9wPb__FoNusOk-HeqU9E,19165
|
|
148
|
+
fugue_test/execution_suite.py,sha256=ClZUYt2R560LN4DZM_OP9cA5jaHmz3-u_BC3A0C24fQ,47472
|
|
149
149
|
fugue_test/ibis_suite.py,sha256=Dk4AHVD00RcFsNm9VvJ4_4LOyFdGX30OnAtpO2SPruE,3529
|
|
150
150
|
fugue_test/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
151
151
|
fugue_test/plugins/dask/__init__.py,sha256=LQVyNgGRvZrKUrNNV1z1X1GyIL3qJoxvNjFfpFzNVCc,55
|
|
152
152
|
fugue_test/plugins/dask/fixtures.py,sha256=uf5gkO30L5-LvxpEpBjG4_bNUrpkemHvyVPxDHgMSGM,354
|
|
153
153
|
fugue_test/plugins/duckdb/__init__.py,sha256=WXtNYQpbO0JScPpIA3QREv8cwOZP2GDOgGOtJKgpTVM,61
|
|
154
154
|
fugue_test/plugins/duckdb/fixtures.py,sha256=UxQbIMRbSrTZ3pgCmKZgd5wd1YvnVrqLSUPaO8UYrSE,165
|
|
155
|
+
fugue_test/plugins/misc/__init__.py,sha256=0SZvyo0xlw5NDbJly4yjaNDqL9M4D2Jsg33HCWE40q8,49
|
|
156
|
+
fugue_test/plugins/misc/fixtures.py,sha256=GrD9WTTtcIDCWLHn-ToVv8pUiUCGCSczgs9bodWKo7c,353
|
|
155
157
|
fugue_test/plugins/ray/__init__.py,sha256=nyKGW6xgTXtMhSs7yjgFNKO7mVboCNg63Bvdf39fO_I,55
|
|
156
158
|
fugue_test/plugins/ray/fixtures.py,sha256=hZkvuo0AcD63XJl5JUroc9tm2LWHUPszg2zzY6FCSao,141
|
|
157
159
|
fugue_version/__init__.py,sha256=vTwvdJOZi8jZb9U-Em7-d50qNDNPS2z51IXqRoojeNM,22
|
|
158
|
-
fugue-0.8.7.
|
|
159
|
-
fugue-0.8.7.
|
|
160
|
-
fugue-0.8.7.
|
|
161
|
-
fugue-0.8.7.
|
|
162
|
-
fugue-0.8.7.
|
|
163
|
-
fugue-0.8.7.
|
|
160
|
+
fugue-0.8.7.dev7.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
161
|
+
fugue-0.8.7.dev7.dist-info/METADATA,sha256=nSp1i8apniEEe6U09_5RA8K89P40c7M5Gn9l6ofLTHQ,17860
|
|
162
|
+
fugue-0.8.7.dev7.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
|
|
163
|
+
fugue-0.8.7.dev7.dist-info/entry_points.txt,sha256=Xrl3ISyVKAFIPn1klqeGsL9DinzoYqfqBkOT4qAVBNA,578
|
|
164
|
+
fugue-0.8.7.dev7.dist-info/top_level.txt,sha256=y1eCfzGdQ1_RkgcShcfbvXs-bopD3DwJcIOxP9EFXno,140
|
|
165
|
+
fugue-0.8.7.dev7.dist-info/RECORD,,
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
dask = fugue_dask.registry [dask]
|
|
3
3
|
dask_ibis = fugue_dask.ibis_engine [dask,ibis]
|
|
4
4
|
duckdb = fugue_duckdb.registry [duckdb]
|
|
5
|
-
duckdb_ibis = fugue_duckdb.ibis_engine [duckdb
|
|
5
|
+
duckdb_ibis = fugue_duckdb.ibis_engine [ibis,duckdb]
|
|
6
6
|
ibis = fugue_ibis [ibis]
|
|
7
7
|
polars = fugue_polars.registry [polars]
|
|
8
8
|
ray = fugue_ray.registry [ray]
|
|
9
9
|
spark = fugue_spark.registry [spark]
|
|
10
|
-
spark_ibis = fugue_spark.ibis_engine [ibis
|
|
10
|
+
spark_ibis = fugue_spark.ibis_engine [spark,ibis]
|
|
11
11
|
|
|
12
12
|
[pytest11]
|
|
13
13
|
fugue_test_dask = fugue_test.plugins.dask [dask]
|
|
14
14
|
fugue_test_duckdb = fugue_test.plugins.duckdb [duckdb]
|
|
15
|
+
fugue_test_misc = fugue_test.plugins.misc
|
|
15
16
|
fugue_test_ray = fugue_test.plugins.ray [ray]
|
|
16
17
|
|