datasets 4.8.2__tar.gz → 4.8.4__tar.gz
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.
- {datasets-4.8.2/src/datasets.egg-info → datasets-4.8.4}/PKG-INFO +1 -1
- {datasets-4.8.2 → datasets-4.8.4}/setup.py +1 -1
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/__init__.py +1 -1
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/features.py +2 -2
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/jax_formatter.py +6 -3
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/np_formatter.py +6 -3
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/tf_formatter.py +6 -3
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/torch_formatter.py +6 -3
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/iterable_dataset.py +70 -54
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/json/json.py +7 -2
- {datasets-4.8.2 → datasets-4.8.4/src/datasets.egg-info}/PKG-INFO +1 -1
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_iterable_dataset.py +69 -9
- {datasets-4.8.2 → datasets-4.8.4}/AUTHORS +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/LICENSE +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/README.md +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/pyproject.toml +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/setup.cfg +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/arrow_dataset.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/arrow_reader.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/arrow_writer.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/builder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/combine.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/commands/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/commands/datasets_cli.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/commands/delete_from_hub.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/commands/env.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/commands/test.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/config.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/data_files.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/dataset_dict.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/distributed.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/download/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/download/download_config.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/download/download_manager.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/download/streaming_download_manager.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/exceptions.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/_torchcodec.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/audio.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/image.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/nifti.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/pdf.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/translation.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/features/video.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/filesystems/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/filesystems/compression.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/fingerprint.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/formatting.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/formatting/polars_formatter.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/hub.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/info.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/inspect.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/abc.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/csv.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/generator.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/json.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/parquet.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/spark.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/sql.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/io/text.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/load.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/naming.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/arrow/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/arrow/arrow.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/audiofolder/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/audiofolder/audiofolder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/cache/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/cache/cache.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/csv/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/csv/csv.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/eval/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/eval/eval.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/folder_based_builder/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/folder_based_builder/folder_based_builder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/generator/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/generator/generator.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/hdf5/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/hdf5/hdf5.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/imagefolder/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/imagefolder/imagefolder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/json/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/lance/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/lance/lance.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/niftifolder/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/niftifolder/niftifolder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/pandas/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/pandas/pandas.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/parquet/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/parquet/parquet.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/pdffolder/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/pdffolder/pdffolder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/spark/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/spark/spark.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/sql/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/sql/sql.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/text/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/text/text.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/videofolder/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/videofolder/videofolder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/webdataset/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/webdataset/_tenbin.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/webdataset/webdataset.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/xml/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/packaged_modules/xml/xml.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/parallel/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/parallel/parallel.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/search.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/splits.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/streaming.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/table.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/_dataset_viewer.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/_dill.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/_filelock.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/deprecation_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/doc_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/experimental.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/extract.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/file_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/filelock.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/hub.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/info_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/json.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/logging.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/metadata.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/patching.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/py_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/resources/__init__.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/resources/creators.json +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/resources/languages.json +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/resources/multilingualities.json +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/resources/readme_structure.yaml +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/resources/size_categories.json +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/sharding.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/stratify.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/tf_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/tqdm.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/track.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/typing.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets/utils/version.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets.egg-info/SOURCES.txt +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets.egg-info/dependency_links.txt +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets.egg-info/entry_points.txt +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets.egg-info/not-zip-safe +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets.egg-info/requires.txt +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/src/datasets.egg-info/top_level.txt +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_arrow_dataset.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_arrow_reader.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_arrow_writer.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_builder.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_data_files.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_dataset_dict.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_dataset_list.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_distributed.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_download_manager.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_exceptions.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_experimental.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_extract.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_file_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_filelock.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_filesystem.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_fingerprint.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_fingerprint_tokenizer_stability.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_formatting.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_hub.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_info.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_info_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_inspect.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_load.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_metadata_util.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_offline_util.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_parallel.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_patching.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_py_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_search.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_sharding_utils.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_splits.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_streaming_download_manager.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_table.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_tqdm.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_upstream_hub.py +0 -0
- {datasets-4.8.2 → datasets-4.8.4}/tests/test_version.py +0 -0
|
@@ -233,7 +233,7 @@ EXTRAS_REQUIRE = {
|
|
|
233
233
|
|
|
234
234
|
setup(
|
|
235
235
|
name="datasets",
|
|
236
|
-
version="4.8.
|
|
236
|
+
version="4.8.4", # expected format is one of x.y.z.dev0, or x.y.z.rc1 or x.y.z (no to dashes, yes to dots)
|
|
237
237
|
description="HuggingFace community-driven open-source library of datasets",
|
|
238
238
|
long_description=open("README.md", encoding="utf-8").read(),
|
|
239
239
|
long_description_content_type="text/markdown",
|
|
@@ -1239,7 +1239,7 @@ class Json:
|
|
|
1239
1239
|
raise RuntimeError("Decoding is disabled for this feature. Please use Json(decode=True) instead.")
|
|
1240
1240
|
return ujson_loads(example_data)
|
|
1241
1241
|
|
|
1242
|
-
def cast_storage(self, storage: Union[pa.Array]) -> pa.
|
|
1242
|
+
def cast_storage(self, storage: Union[pa.Array]) -> pa.JsonArray:
|
|
1243
1243
|
"""Cast an Arrow array to the `Json` arrow storage type.
|
|
1244
1244
|
|
|
1245
1245
|
Args:
|
|
@@ -1247,7 +1247,7 @@ class Json:
|
|
|
1247
1247
|
PyArrow array to cast.
|
|
1248
1248
|
|
|
1249
1249
|
Returns:
|
|
1250
|
-
`pa.
|
|
1250
|
+
`pa.JsonArray`: Array in the `Json` arrow storage type.
|
|
1251
1251
|
"""
|
|
1252
1252
|
if isinstance(storage, pa.JsonArray):
|
|
1253
1253
|
return storage
|
|
@@ -107,10 +107,13 @@ class JaxFormatter(TensorFormatter[Mapping, "jax.Array", Mapping]):
|
|
|
107
107
|
if isinstance(value, PIL.Image.Image):
|
|
108
108
|
value = np.asarray(value)
|
|
109
109
|
if config.TORCHVISION_AVAILABLE and "torchvision" in sys.modules:
|
|
110
|
-
|
|
110
|
+
try:
|
|
111
|
+
from torchvision.io import VideoReader
|
|
111
112
|
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
if isinstance(value, VideoReader):
|
|
114
|
+
return value # TODO(QL): set output to jax arrays ?
|
|
115
|
+
except ImportError:
|
|
116
|
+
pass
|
|
114
117
|
if config.TORCHCODEC_AVAILABLE and "torchcodec" in sys.modules:
|
|
115
118
|
from torchcodec.decoders import AudioDecoder, VideoDecoder
|
|
116
119
|
|
|
@@ -64,10 +64,13 @@ class NumpyFormatter(TensorFormatter[Mapping, np.ndarray, Mapping]):
|
|
|
64
64
|
if isinstance(value, PIL.Image.Image):
|
|
65
65
|
return np.asarray(value, **self.np_array_kwargs)
|
|
66
66
|
if config.TORCHVISION_AVAILABLE and "torchvision" in sys.modules:
|
|
67
|
-
|
|
67
|
+
try:
|
|
68
|
+
from torchvision.io import VideoReader
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
if isinstance(value, VideoReader):
|
|
71
|
+
return value # TODO(QL): set output to np arrays ?
|
|
72
|
+
except ImportError:
|
|
73
|
+
pass
|
|
71
74
|
if config.TORCHCODEC_AVAILABLE and "torchcodec" in sys.modules:
|
|
72
75
|
from torchcodec.decoders import AudioDecoder, VideoDecoder
|
|
73
76
|
|
|
@@ -71,10 +71,13 @@ class TFFormatter(TensorFormatter[Mapping, "tf.Tensor", Mapping]):
|
|
|
71
71
|
if isinstance(value, PIL.Image.Image):
|
|
72
72
|
value = np.asarray(value)
|
|
73
73
|
if config.TORCHVISION_AVAILABLE and "torchvision" in sys.modules:
|
|
74
|
-
|
|
74
|
+
try:
|
|
75
|
+
from torchvision.io import VideoReader
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
if isinstance(value, VideoReader):
|
|
78
|
+
return value # TODO(QL): set output to tf tensors ?
|
|
79
|
+
except ImportError:
|
|
80
|
+
pass
|
|
78
81
|
if config.TORCHCODEC_AVAILABLE and "torchcodec" in sys.modules:
|
|
79
82
|
from torchcodec.decoders import AudioDecoder, VideoDecoder
|
|
80
83
|
|
|
@@ -77,10 +77,13 @@ class TorchFormatter(TensorFormatter[Mapping, "torch.Tensor", Mapping]):
|
|
|
77
77
|
|
|
78
78
|
value = value.transpose((2, 0, 1))
|
|
79
79
|
if config.TORCHVISION_AVAILABLE and "torchvision" in sys.modules:
|
|
80
|
-
|
|
80
|
+
try:
|
|
81
|
+
from torchvision.io import VideoReader
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
if isinstance(value, VideoReader):
|
|
84
|
+
return value # TODO(QL): set output to torch tensors ?
|
|
85
|
+
except ImportError:
|
|
86
|
+
pass
|
|
84
87
|
if config.TORCHCODEC_AVAILABLE and "torchcodec" in sys.modules:
|
|
85
88
|
from torchcodec.decoders import AudioDecoder, VideoDecoder
|
|
86
89
|
|
|
@@ -424,15 +424,22 @@ class ArrowExamplesIterable(_BaseExamplesIterable):
|
|
|
424
424
|
|
|
425
425
|
|
|
426
426
|
class RebatchedArrowExamplesIterable(_BaseExamplesIterable):
|
|
427
|
-
def __init__(
|
|
427
|
+
def __init__(
|
|
428
|
+
self,
|
|
429
|
+
ex_iterable: _BaseExamplesIterable,
|
|
430
|
+
batch_size: Optional[int],
|
|
431
|
+
drop_last_batch: bool = False,
|
|
432
|
+
force_convert_to_arrow: bool = False,
|
|
433
|
+
):
|
|
428
434
|
super().__init__()
|
|
429
435
|
self.ex_iterable = ex_iterable
|
|
430
436
|
self.batch_size = batch_size
|
|
431
437
|
self.drop_last_batch = drop_last_batch
|
|
438
|
+
self.force_convert_to_arrow = force_convert_to_arrow
|
|
432
439
|
|
|
433
440
|
@property
|
|
434
441
|
def iter_arrow(self):
|
|
435
|
-
return self._iter_arrow
|
|
442
|
+
return self._iter_arrow if self.ex_iterable.iter_arrow or self.force_convert_to_arrow else None
|
|
436
443
|
|
|
437
444
|
@property
|
|
438
445
|
def is_typed(self):
|
|
@@ -462,8 +469,12 @@ class RebatchedArrowExamplesIterable(_BaseExamplesIterable):
|
|
|
462
469
|
self.ex_iterable.load_state_dict(self._state_dict["previous_state"])
|
|
463
470
|
if self.ex_iterable.iter_arrow:
|
|
464
471
|
iterator = self.ex_iterable.iter_arrow()
|
|
465
|
-
|
|
472
|
+
elif self.force_convert_to_arrow:
|
|
466
473
|
iterator = _convert_to_arrow(self.ex_iterable, batch_size=1)
|
|
474
|
+
else:
|
|
475
|
+
raise RuntimeError(
|
|
476
|
+
"_iter_arrow is not available in RebatchedArrowExamplesIterable, use an examples iterable that implements _iter_arrow() or pass force_convert_to_arrow=True"
|
|
477
|
+
)
|
|
467
478
|
if self.batch_size is None or self.batch_size <= 0:
|
|
468
479
|
if self._state_dict and self._state_dict["batch_idx"] > 0:
|
|
469
480
|
return
|
|
@@ -544,7 +555,10 @@ class RebatchedArrowExamplesIterable(_BaseExamplesIterable):
|
|
|
544
555
|
|
|
545
556
|
def shuffle_data_sources(self, generator: np.random.Generator) -> "RebatchedArrowExamplesIterable":
|
|
546
557
|
return RebatchedArrowExamplesIterable(
|
|
547
|
-
self.ex_iterable.shuffle_data_sources(generator),
|
|
558
|
+
self.ex_iterable.shuffle_data_sources(generator),
|
|
559
|
+
self.batch_size,
|
|
560
|
+
self.drop_last_batch,
|
|
561
|
+
self.force_convert_to_arrow,
|
|
548
562
|
)
|
|
549
563
|
|
|
550
564
|
def shard_data_sources(self, num_shards: int, index: int, contiguous=True) -> "RebatchedArrowExamplesIterable":
|
|
@@ -552,13 +566,12 @@ class RebatchedArrowExamplesIterable(_BaseExamplesIterable):
|
|
|
552
566
|
self.ex_iterable.shard_data_sources(num_shards, index, contiguous=contiguous),
|
|
553
567
|
self.batch_size,
|
|
554
568
|
self.drop_last_batch,
|
|
569
|
+
self.force_convert_to_arrow,
|
|
555
570
|
)
|
|
556
571
|
|
|
557
572
|
def reshard_data_sources(self) -> "RebatchedArrowExamplesIterable":
|
|
558
573
|
return RebatchedArrowExamplesIterable(
|
|
559
|
-
self.ex_iterable.reshard_data_sources(),
|
|
560
|
-
self.batch_size,
|
|
561
|
-
self.drop_last_batch,
|
|
574
|
+
self.ex_iterable.reshard_data_sources(), self.batch_size, self.drop_last_batch, self.force_convert_to_arrow
|
|
562
575
|
)
|
|
563
576
|
|
|
564
577
|
@property
|
|
@@ -634,7 +647,11 @@ class StepExamplesIterable(_BaseExamplesIterable):
|
|
|
634
647
|
return self.ex_iterable.features
|
|
635
648
|
|
|
636
649
|
def _init_state_dict(self) -> dict:
|
|
637
|
-
self._state_dict =
|
|
650
|
+
self._state_dict = {
|
|
651
|
+
"examples_iterable": self.ex_iterable._init_state_dict(),
|
|
652
|
+
"stepped": 0,
|
|
653
|
+
"type": self.__class__.__name__,
|
|
654
|
+
}
|
|
638
655
|
return self._state_dict
|
|
639
656
|
|
|
640
657
|
def __iter__(self):
|
|
@@ -647,9 +664,15 @@ class StepExamplesIterable(_BaseExamplesIterable):
|
|
|
647
664
|
break
|
|
648
665
|
|
|
649
666
|
def _iter_arrow(self):
|
|
667
|
+
stepped = self._state_dict["stepped"] if self._state_dict else 0
|
|
650
668
|
for key, pa_table in self.ex_iterable.iter_arrow():
|
|
651
|
-
|
|
652
|
-
|
|
669
|
+
stepped_pa_table = pa_table.take(
|
|
670
|
+
pa.array(range((self.offset - stepped) % self.step, len(pa_table), self.step), type=pa.int64())
|
|
671
|
+
)
|
|
672
|
+
stepped = (stepped + len(pa_table)) % self.step
|
|
673
|
+
if self._state_dict:
|
|
674
|
+
self._state_dict["stepped"] = stepped
|
|
675
|
+
yield key, stepped_pa_table
|
|
653
676
|
|
|
654
677
|
def shuffle_data_sources(self, generator: np.random.Generator) -> "StepExamplesIterable":
|
|
655
678
|
return StepExamplesIterable(
|
|
@@ -1249,12 +1272,18 @@ class MappedExamplesIterable(_BaseExamplesIterable):
|
|
|
1249
1272
|
# batch_size should match for iter_arrow
|
|
1250
1273
|
if not isinstance(ex_iterable, RebatchedArrowExamplesIterable):
|
|
1251
1274
|
raise ValueError(
|
|
1252
|
-
f"The {formatting.format_type.capitalize()}-formatted {type(self).__name__} has underlying iterable"
|
|
1275
|
+
f"The {formatting.format_type.capitalize()}-formatted {type(self).__name__} has underlying iterable "
|
|
1253
1276
|
f"that is a {type(ex_iterable).__name__} instead of a RebatchedArrowExamplesIterable."
|
|
1254
1277
|
)
|
|
1278
|
+
elif not ex_iterable.iter_arrow:
|
|
1279
|
+
raise ValueError(
|
|
1280
|
+
f"The {formatting.format_type.capitalize()}-formatted {type(self).__name__} has underlying iterable "
|
|
1281
|
+
f"that is a {type(ex_iterable).__name__} but doesnt' implement iter_arrow(), a possible fix could be "
|
|
1282
|
+
"to use RebatchedArrowExamplesIterable(..., force_convert_to_arrow=True)."
|
|
1283
|
+
)
|
|
1255
1284
|
elif ex_iterable.batch_size != (batch_size if batched else 1):
|
|
1256
1285
|
raise ValueError(
|
|
1257
|
-
f"The {formatting.format_type.capitalize()}-formatted {type(self).__name__} has batch_size={batch_size if batched else 1} which is"
|
|
1286
|
+
f"The {formatting.format_type.capitalize()}-formatted {type(self).__name__} has batch_size={batch_size if batched else 1} which is "
|
|
1258
1287
|
f"different from {ex_iterable.batch_size=} from its underlying iterable."
|
|
1259
1288
|
)
|
|
1260
1289
|
# to enable graceful ends
|
|
@@ -2131,22 +2160,6 @@ def _apply_feature_types_on_example(
|
|
|
2131
2160
|
return decoded_example
|
|
2132
2161
|
|
|
2133
2162
|
|
|
2134
|
-
def _apply_feature_types_on_batch(
|
|
2135
|
-
batch: dict, features: Features, token_per_repo_id: dict[str, Union[str, bool, None]]
|
|
2136
|
-
) -> dict:
|
|
2137
|
-
batch = dict(batch)
|
|
2138
|
-
# add missing columns
|
|
2139
|
-
n_examples = len(batch[next(iter(batch))])
|
|
2140
|
-
for column_name in features:
|
|
2141
|
-
if column_name not in batch:
|
|
2142
|
-
batch[column_name] = [None] * n_examples
|
|
2143
|
-
# we encode the batch for ClassLabel feature types for example
|
|
2144
|
-
encoded_batch = features.encode_batch(batch)
|
|
2145
|
-
# Decode batch for Audio feature, e.g.
|
|
2146
|
-
decoded_batch = features.decode_batch(encoded_batch, token_per_repo_id=token_per_repo_id)
|
|
2147
|
-
return decoded_batch
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
2163
|
@dataclass
|
|
2151
2164
|
class FormattingConfig:
|
|
2152
2165
|
format_type: Optional[str]
|
|
@@ -2167,16 +2180,18 @@ class FormattedExamplesIterable(_BaseExamplesIterable):
|
|
|
2167
2180
|
formatting: Optional[FormattingConfig],
|
|
2168
2181
|
features: Optional[Features],
|
|
2169
2182
|
token_per_repo_id: dict[str, Union[str, bool, None]],
|
|
2183
|
+
force_convert_to_python: bool = False,
|
|
2170
2184
|
):
|
|
2171
2185
|
super().__init__()
|
|
2172
2186
|
self.ex_iterable = ex_iterable
|
|
2173
2187
|
self._features = features
|
|
2174
2188
|
self.formatting = formatting
|
|
2175
2189
|
self.token_per_repo_id = token_per_repo_id
|
|
2190
|
+
self.force_convert_to_python = force_convert_to_python
|
|
2176
2191
|
|
|
2177
2192
|
@property
|
|
2178
2193
|
def iter_arrow(self):
|
|
2179
|
-
if self.ex_iterable.iter_arrow and
|
|
2194
|
+
if self.ex_iterable.iter_arrow and not self.force_convert_to_python:
|
|
2180
2195
|
return self._iter_arrow
|
|
2181
2196
|
|
|
2182
2197
|
@property
|
|
@@ -2203,6 +2218,10 @@ class FormattedExamplesIterable(_BaseExamplesIterable):
|
|
|
2203
2218
|
features=self._features if not self.ex_iterable.is_typed else None,
|
|
2204
2219
|
token_per_repo_id=self.token_per_repo_id,
|
|
2205
2220
|
)
|
|
2221
|
+
|
|
2222
|
+
# It's ok to use _iter_arrow here without fancy state_dict logic since it's
|
|
2223
|
+
# used with RebatchedArrowExamplesIterable with the right batch_size to
|
|
2224
|
+
# never lose examples
|
|
2206
2225
|
if self.ex_iterable.iter_arrow:
|
|
2207
2226
|
# feature casting (inc column addition) handled within self._iter_arrow()
|
|
2208
2227
|
for key, pa_table in self._iter_arrow():
|
|
@@ -2248,6 +2267,7 @@ class FormattedExamplesIterable(_BaseExamplesIterable):
|
|
|
2248
2267
|
features=self.features,
|
|
2249
2268
|
token_per_repo_id=self.token_per_repo_id,
|
|
2250
2269
|
formatting=self.formatting,
|
|
2270
|
+
force_convert_to_python=self.force_convert_to_python,
|
|
2251
2271
|
)
|
|
2252
2272
|
|
|
2253
2273
|
def shard_data_sources(self, num_shards: int, index: int, contiguous=True) -> "FormattedExamplesIterable":
|
|
@@ -2257,6 +2277,7 @@ class FormattedExamplesIterable(_BaseExamplesIterable):
|
|
|
2257
2277
|
features=self.features,
|
|
2258
2278
|
token_per_repo_id=self.token_per_repo_id,
|
|
2259
2279
|
formatting=self.formatting,
|
|
2280
|
+
force_convert_to_python=self.force_convert_to_python,
|
|
2260
2281
|
)
|
|
2261
2282
|
|
|
2262
2283
|
def reshard_data_sources(self) -> "FormattedExamplesIterable":
|
|
@@ -2265,6 +2286,7 @@ class FormattedExamplesIterable(_BaseExamplesIterable):
|
|
|
2265
2286
|
features=self.features,
|
|
2266
2287
|
token_per_repo_id=self.token_per_repo_id,
|
|
2267
2288
|
formatting=self.formatting,
|
|
2289
|
+
force_convert_to_python=self.force_convert_to_python,
|
|
2268
2290
|
)
|
|
2269
2291
|
|
|
2270
2292
|
@property
|
|
@@ -2565,11 +2587,7 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
2565
2587
|
|
|
2566
2588
|
if self._formatting and (ex_iterable.iter_arrow or self._formatting.is_table):
|
|
2567
2589
|
formatter = get_formatter(self._formatting.format_type, features=self.features)
|
|
2568
|
-
|
|
2569
|
-
iterator = ex_iterable.iter_arrow()
|
|
2570
|
-
else:
|
|
2571
|
-
iterator = _convert_to_arrow(ex_iterable, batch_size=1)
|
|
2572
|
-
for key, pa_table in iterator:
|
|
2590
|
+
for key, pa_table in ex_iterable.iter_arrow():
|
|
2573
2591
|
yield formatter.format_row(pa_table)
|
|
2574
2592
|
return
|
|
2575
2593
|
else:
|
|
@@ -2599,14 +2617,7 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
2599
2617
|
self, batch_size: int = 1, drop_last_batch: bool = False
|
|
2600
2618
|
) -> _BaseExamplesIterable:
|
|
2601
2619
|
ex_iterable = self._ex_iterable
|
|
2602
|
-
|
|
2603
|
-
self._formatting
|
|
2604
|
-
and (ex_iterable.iter_arrow or self._formatting.is_table)
|
|
2605
|
-
or (self.features and ex_iterable.features != self.features)
|
|
2606
|
-
):
|
|
2607
|
-
ex_iterable = RebatchedArrowExamplesIterable(
|
|
2608
|
-
ex_iterable, batch_size=batch_size, drop_last_batch=drop_last_batch
|
|
2609
|
-
)
|
|
2620
|
+
|
|
2610
2621
|
if self.epoch:
|
|
2611
2622
|
ex_iterable = ex_iterable.shuffle_data_sources(np.random.default_rng(self.epoch))
|
|
2612
2623
|
ex_iterable = shift_ex_examples_rngs(ex_iterable, self.epoch)
|
|
@@ -2634,6 +2645,15 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
2634
2645
|
)
|
|
2635
2646
|
ex_iterable = StepExamplesIterable(ex_iterable, step=world_size, offset=rank)
|
|
2636
2647
|
|
|
2648
|
+
if ex_iterable.iter_arrow:
|
|
2649
|
+
ex_iterable = RebatchedArrowExamplesIterable(
|
|
2650
|
+
ex_iterable, batch_size=batch_size, drop_last_batch=drop_last_batch
|
|
2651
|
+
)
|
|
2652
|
+
elif self._formatting and self._formatting.is_table:
|
|
2653
|
+
ex_iterable = RebatchedArrowExamplesIterable(
|
|
2654
|
+
ex_iterable, batch_size=batch_size, drop_last_batch=drop_last_batch, force_convert_to_arrow=True
|
|
2655
|
+
)
|
|
2656
|
+
|
|
2637
2657
|
if self._formatting or (self.features and ex_iterable.features != self.features):
|
|
2638
2658
|
ex_iterable = FormattedExamplesIterable(
|
|
2639
2659
|
ex_iterable,
|
|
@@ -2663,11 +2683,7 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
2663
2683
|
ex_iterable = self._prepare_ex_iterable_for_iteration()
|
|
2664
2684
|
if self._formatting and (ex_iterable.iter_arrow or self._formatting.is_table):
|
|
2665
2685
|
formatter = get_formatter(self._formatting.format_type, features=self.features)
|
|
2666
|
-
|
|
2667
|
-
iterator = ex_iterable.iter_arrow()
|
|
2668
|
-
else:
|
|
2669
|
-
iterator = _convert_to_arrow(ex_iterable, batch_size=1)
|
|
2670
|
-
for key, pa_table in iterator:
|
|
2686
|
+
for key, pa_table in ex_iterable.iter_arrow():
|
|
2671
2687
|
yield formatter.format_row(pa_table)
|
|
2672
2688
|
return
|
|
2673
2689
|
|
|
@@ -2692,11 +2708,7 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
2692
2708
|
|
|
2693
2709
|
ex_iterable = self._prepare_ex_iterable_for_iteration(batch_size=batch_size, drop_last_batch=drop_last_batch)
|
|
2694
2710
|
if self._formatting and (ex_iterable.iter_arrow or self._formatting.is_table):
|
|
2695
|
-
|
|
2696
|
-
iterator = ex_iterable.iter_arrow()
|
|
2697
|
-
else:
|
|
2698
|
-
iterator = _convert_to_arrow(ex_iterable, batch_size=batch_size, drop_last_batch=drop_last_batch)
|
|
2699
|
-
for key, pa_table in iterator:
|
|
2711
|
+
for key, pa_table in ex_iterable.iter_arrow():
|
|
2700
2712
|
yield formatter.format_batch(pa_table)
|
|
2701
2713
|
return
|
|
2702
2714
|
|
|
@@ -3410,7 +3422,10 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
3410
3422
|
token_per_repo_id=self._token_per_repo_id,
|
|
3411
3423
|
)
|
|
3412
3424
|
ex_iterable = RebatchedArrowExamplesIterable(
|
|
3413
|
-
ex_iterable,
|
|
3425
|
+
ex_iterable,
|
|
3426
|
+
batch_size=batch_size if batched else 1,
|
|
3427
|
+
drop_last_batch=drop_last_batch,
|
|
3428
|
+
force_convert_to_arrow=True,
|
|
3414
3429
|
)
|
|
3415
3430
|
else:
|
|
3416
3431
|
if self._formatting and self._ex_iterable.iter_arrow:
|
|
@@ -3424,6 +3439,7 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
3424
3439
|
formatting=copy.deepcopy(self._formatting),
|
|
3425
3440
|
features=input_features,
|
|
3426
3441
|
token_per_repo_id=self._token_per_repo_id,
|
|
3442
|
+
force_convert_to_python=True,
|
|
3427
3443
|
)
|
|
3428
3444
|
|
|
3429
3445
|
ex_iterable = MappedExamplesIterable(
|
|
@@ -4074,7 +4090,7 @@ class IterableDataset(DatasetInfoMixin):
|
|
|
4074
4090
|
|
|
4075
4091
|
* audio -> dict of "array" and "sampling_rate" and "path"
|
|
4076
4092
|
* image -> PIL.Image
|
|
4077
|
-
* video ->
|
|
4093
|
+
* video -> torchcodec.decoders.VideoDecoder
|
|
4078
4094
|
|
|
4079
4095
|
You can enable multithreading using `num_threads`. This is especially useful to speed up remote
|
|
4080
4096
|
data streaming. However it can be slower than `num_threads=0` for local data on fast disks.
|
|
@@ -190,8 +190,13 @@ class Json(datasets.ArrowBasedBuilder):
|
|
|
190
190
|
and self.info.features is None
|
|
191
191
|
and self.config.on_mixed_types == "use_json"
|
|
192
192
|
):
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
try:
|
|
194
|
+
examples = [ujson_loads(line) for line in batch.splitlines()]
|
|
195
|
+
except ValueError:
|
|
196
|
+
# the file is likely not JSON Lines and may contain one single multi-line JSON object
|
|
197
|
+
pass
|
|
198
|
+
else:
|
|
199
|
+
json_field_paths += find_mixed_struct_types_field_paths(examples)
|
|
195
200
|
# Re-encode JSON fields
|
|
196
201
|
original_batch = batch
|
|
197
202
|
if json_field_paths:
|
|
@@ -752,7 +752,9 @@ def test_mapped_examples_iterable_input_columns(n, func, batched, batch_size, in
|
|
|
752
752
|
)
|
|
753
753
|
def test_mapped_examples_iterable_arrow_format(n, func, batched, batch_size):
|
|
754
754
|
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": n})
|
|
755
|
-
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
755
|
+
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
756
|
+
base_ex_iterable, batch_size=batch_size if batched else 1, force_convert_to_arrow=True
|
|
757
|
+
)
|
|
756
758
|
ex_iterable = MappedExamplesIterable(
|
|
757
759
|
base_ex_iterable,
|
|
758
760
|
func,
|
|
@@ -832,7 +834,9 @@ def test_mapped_examples_iterable_arrow_format_from_arrow_examples_iterable(n, f
|
|
|
832
834
|
)
|
|
833
835
|
def test_mapped_examples_iterable_drop_last_batch_and_arrow_format(n, func, batched, batch_size):
|
|
834
836
|
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": n})
|
|
835
|
-
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
837
|
+
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
838
|
+
base_ex_iterable, batch_size=batch_size if batched else 1, force_convert_to_arrow=True
|
|
839
|
+
)
|
|
836
840
|
ex_iterable = MappedExamplesIterable(
|
|
837
841
|
base_ex_iterable,
|
|
838
842
|
func,
|
|
@@ -895,7 +899,9 @@ def test_mapped_examples_iterable_drop_last_batch_and_arrow_format(n, func, batc
|
|
|
895
899
|
)
|
|
896
900
|
def test_mapped_examples_iterable_with_indices_and_arrow_format(n, func, batched, batch_size):
|
|
897
901
|
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": n})
|
|
898
|
-
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
902
|
+
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
903
|
+
base_ex_iterable, batch_size=batch_size if batched else 1, force_convert_to_arrow=True
|
|
904
|
+
)
|
|
899
905
|
ex_iterable = MappedExamplesIterable(
|
|
900
906
|
base_ex_iterable,
|
|
901
907
|
func,
|
|
@@ -946,7 +952,9 @@ def test_mapped_examples_iterable_with_indices_and_arrow_format(n, func, batched
|
|
|
946
952
|
)
|
|
947
953
|
def test_mapped_examples_iterable_remove_columns_arrow_format(n, func, batched, batch_size, remove_columns):
|
|
948
954
|
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": n, "extra_column": "foo"})
|
|
949
|
-
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
955
|
+
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
956
|
+
base_ex_iterable, batch_size=batch_size if batched else 1, force_convert_to_arrow=True
|
|
957
|
+
)
|
|
950
958
|
ex_iterable = MappedExamplesIterable(
|
|
951
959
|
base_ex_iterable,
|
|
952
960
|
func,
|
|
@@ -991,7 +999,9 @@ def test_mapped_examples_iterable_remove_columns_arrow_format(n, func, batched,
|
|
|
991
999
|
)
|
|
992
1000
|
def test_mapped_examples_iterable_fn_kwargs_and_arrow_format(n, func, batched, batch_size, fn_kwargs):
|
|
993
1001
|
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": n})
|
|
994
|
-
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
1002
|
+
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
1003
|
+
base_ex_iterable, batch_size=batch_size if batched else 1, force_convert_to_arrow=True
|
|
1004
|
+
)
|
|
995
1005
|
ex_iterable = MappedExamplesIterable(
|
|
996
1006
|
base_ex_iterable,
|
|
997
1007
|
func,
|
|
@@ -1031,7 +1041,9 @@ def test_mapped_examples_iterable_fn_kwargs_and_arrow_format(n, func, batched, b
|
|
|
1031
1041
|
)
|
|
1032
1042
|
def test_mapped_examples_iterable_input_columns_and_arrow_format(n, func, batched, batch_size, input_columns):
|
|
1033
1043
|
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": n})
|
|
1034
|
-
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
1044
|
+
base_ex_iterable = RebatchedArrowExamplesIterable(
|
|
1045
|
+
base_ex_iterable, batch_size=batch_size if batched else 1, force_convert_to_arrow=True
|
|
1046
|
+
)
|
|
1035
1047
|
ex_iterable = MappedExamplesIterable(
|
|
1036
1048
|
base_ex_iterable,
|
|
1037
1049
|
func,
|
|
@@ -1232,6 +1244,48 @@ def test_take_examples_iterable():
|
|
|
1232
1244
|
assert_load_state_dict_resumes_iteration(take_ex_iterable)
|
|
1233
1245
|
|
|
1234
1246
|
|
|
1247
|
+
def test_step_examples_iterable():
|
|
1248
|
+
total, step, offset = 10, 2, 1
|
|
1249
|
+
base_ex_iterable = ExamplesIterable(generate_examples_fn, {"n": total})
|
|
1250
|
+
step_ex_iterable = StepExamplesIterable(base_ex_iterable, step=step, offset=offset)
|
|
1251
|
+
expected = list(generate_examples_fn(n=total))[offset::step]
|
|
1252
|
+
assert list(step_ex_iterable) == expected
|
|
1253
|
+
assert_load_state_dict_resumes_iteration(step_ex_iterable)
|
|
1254
|
+
|
|
1255
|
+
|
|
1256
|
+
def test_skip_arrow_examples_iterable():
|
|
1257
|
+
total, count = 10, 2
|
|
1258
|
+
base_ex_iterable = ArrowExamplesIterable(generate_tables_fn, {"n": total})
|
|
1259
|
+
skip_ex_iterable = SkipExamplesIterable(base_ex_iterable, n=count)
|
|
1260
|
+
expected = [x for _, pa_table in generate_tables_fn(n=total) for x in pa_table.to_pylist()][count:]
|
|
1261
|
+
assert [example for _, example in skip_ex_iterable] == expected
|
|
1262
|
+
assert skip_ex_iterable.shuffle_data_sources(np.random.default_rng(42)) is skip_ex_iterable, (
|
|
1263
|
+
"skip examples makes the shards order fixed"
|
|
1264
|
+
)
|
|
1265
|
+
assert_load_state_dict_resumes_iteration(skip_ex_iterable)
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
def test_take_arrow_examples_iterable():
|
|
1269
|
+
total, count = 10, 2
|
|
1270
|
+
base_ex_iterable = ArrowExamplesIterable(generate_tables_fn, {"n": total})
|
|
1271
|
+
take_ex_iterable = TakeExamplesIterable(base_ex_iterable, n=count)
|
|
1272
|
+
expected = [x for _, pa_table in generate_tables_fn(n=total) for x in pa_table.to_pylist()][:count]
|
|
1273
|
+
assert [example for _, example in take_ex_iterable] == expected
|
|
1274
|
+
assert take_ex_iterable.shuffle_data_sources(np.random.default_rng(42)) is take_ex_iterable, (
|
|
1275
|
+
"skip examples makes the shards order fixed"
|
|
1276
|
+
)
|
|
1277
|
+
assert_load_state_dict_resumes_iteration(take_ex_iterable)
|
|
1278
|
+
|
|
1279
|
+
|
|
1280
|
+
def test_step_arrow_examples_iterable():
|
|
1281
|
+
total, step, offset = 10, 2, 1
|
|
1282
|
+
base_ex_iterable = ArrowExamplesIterable(generate_tables_fn, {"n": total})
|
|
1283
|
+
step_ex_iterable = StepExamplesIterable(base_ex_iterable, step=step, offset=offset)
|
|
1284
|
+
expected = [x for _, pa_table in generate_tables_fn(n=total) for x in pa_table.to_pylist()][offset::step]
|
|
1285
|
+
assert [example for _, example in step_ex_iterable] == expected
|
|
1286
|
+
assert_load_state_dict_resumes_iteration(step_ex_iterable)
|
|
1287
|
+
|
|
1288
|
+
|
|
1235
1289
|
@pytest.mark.parametrize(
|
|
1236
1290
|
"n, num_times",
|
|
1237
1291
|
[
|
|
@@ -1345,7 +1399,9 @@ def test_no_iter_arrow(ex_iterable: _BaseExamplesIterable):
|
|
|
1345
1399
|
HorizontallyConcatenatedMultiSourcesExamplesIterable([ArrowExamplesIterable(generate_tables_fn, {})]),
|
|
1346
1400
|
# RandomlyCyclingMultiSourcesExamplesIterable([ArrowExamplesIterable(generate_tables_fn, {})], np.random.default_rng(42)), # not implemented
|
|
1347
1401
|
MappedExamplesIterable(
|
|
1348
|
-
RebatchedArrowExamplesIterable(
|
|
1402
|
+
RebatchedArrowExamplesIterable(
|
|
1403
|
+
ExamplesIterable(generate_examples_fn, {}), batch_size=1, force_convert_to_arrow=True
|
|
1404
|
+
),
|
|
1349
1405
|
lambda t: t,
|
|
1350
1406
|
formatting=FormattingConfig(format_type="arrow"),
|
|
1351
1407
|
),
|
|
@@ -1355,12 +1411,16 @@ def test_no_iter_arrow(ex_iterable: _BaseExamplesIterable):
|
|
|
1355
1411
|
formatting=FormattingConfig(format_type="arrow"),
|
|
1356
1412
|
),
|
|
1357
1413
|
FilteredExamplesIterable(
|
|
1358
|
-
RebatchedArrowExamplesIterable(
|
|
1414
|
+
RebatchedArrowExamplesIterable(
|
|
1415
|
+
ExamplesIterable(generate_examples_fn, {}), batch_size=1, force_convert_to_arrow=True
|
|
1416
|
+
),
|
|
1359
1417
|
lambda t: True,
|
|
1360
1418
|
formatting=FormattingConfig(format_type="arrow"),
|
|
1361
1419
|
),
|
|
1362
1420
|
FilteredExamplesIterable(
|
|
1363
|
-
RebatchedArrowExamplesIterable(
|
|
1421
|
+
RebatchedArrowExamplesIterable(
|
|
1422
|
+
ArrowExamplesIterable(generate_tables_fn, {}), batch_size=1, force_convert_to_arrow=True
|
|
1423
|
+
),
|
|
1364
1424
|
lambda t: True,
|
|
1365
1425
|
formatting=FormattingConfig(format_type="arrow"),
|
|
1366
1426
|
),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|