datasets 4.8.2__tar.gz → 4.8.3__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.
Files changed (185) hide show
  1. {datasets-4.8.2/src/datasets.egg-info → datasets-4.8.3}/PKG-INFO +1 -1
  2. {datasets-4.8.2 → datasets-4.8.3}/setup.py +1 -1
  3. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/__init__.py +1 -1
  4. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/features.py +2 -2
  5. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/iterable_dataset.py +69 -53
  6. {datasets-4.8.2 → datasets-4.8.3/src/datasets.egg-info}/PKG-INFO +1 -1
  7. {datasets-4.8.2 → datasets-4.8.3}/tests/test_iterable_dataset.py +69 -9
  8. {datasets-4.8.2 → datasets-4.8.3}/AUTHORS +0 -0
  9. {datasets-4.8.2 → datasets-4.8.3}/LICENSE +0 -0
  10. {datasets-4.8.2 → datasets-4.8.3}/README.md +0 -0
  11. {datasets-4.8.2 → datasets-4.8.3}/pyproject.toml +0 -0
  12. {datasets-4.8.2 → datasets-4.8.3}/setup.cfg +0 -0
  13. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/arrow_dataset.py +0 -0
  14. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/arrow_reader.py +0 -0
  15. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/arrow_writer.py +0 -0
  16. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/builder.py +0 -0
  17. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/combine.py +0 -0
  18. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/commands/__init__.py +0 -0
  19. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/commands/datasets_cli.py +0 -0
  20. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/commands/delete_from_hub.py +0 -0
  21. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/commands/env.py +0 -0
  22. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/commands/test.py +0 -0
  23. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/config.py +0 -0
  24. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/data_files.py +0 -0
  25. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/dataset_dict.py +0 -0
  26. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/distributed.py +0 -0
  27. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/download/__init__.py +0 -0
  28. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/download/download_config.py +0 -0
  29. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/download/download_manager.py +0 -0
  30. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/download/streaming_download_manager.py +0 -0
  31. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/exceptions.py +0 -0
  32. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/__init__.py +0 -0
  33. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/_torchcodec.py +0 -0
  34. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/audio.py +0 -0
  35. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/image.py +0 -0
  36. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/nifti.py +0 -0
  37. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/pdf.py +0 -0
  38. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/translation.py +0 -0
  39. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/features/video.py +0 -0
  40. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/filesystems/__init__.py +0 -0
  41. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/filesystems/compression.py +0 -0
  42. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/fingerprint.py +0 -0
  43. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/__init__.py +0 -0
  44. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/formatting.py +0 -0
  45. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/jax_formatter.py +0 -0
  46. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/np_formatter.py +0 -0
  47. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/polars_formatter.py +0 -0
  48. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/tf_formatter.py +0 -0
  49. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/formatting/torch_formatter.py +0 -0
  50. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/hub.py +0 -0
  51. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/info.py +0 -0
  52. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/inspect.py +0 -0
  53. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/__init__.py +0 -0
  54. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/abc.py +0 -0
  55. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/csv.py +0 -0
  56. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/generator.py +0 -0
  57. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/json.py +0 -0
  58. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/parquet.py +0 -0
  59. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/spark.py +0 -0
  60. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/sql.py +0 -0
  61. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/io/text.py +0 -0
  62. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/load.py +0 -0
  63. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/naming.py +0 -0
  64. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/__init__.py +0 -0
  65. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/arrow/__init__.py +0 -0
  66. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/arrow/arrow.py +0 -0
  67. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/audiofolder/__init__.py +0 -0
  68. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/audiofolder/audiofolder.py +0 -0
  69. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/cache/__init__.py +0 -0
  70. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/cache/cache.py +0 -0
  71. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/csv/__init__.py +0 -0
  72. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/csv/csv.py +0 -0
  73. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/eval/__init__.py +0 -0
  74. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/eval/eval.py +0 -0
  75. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/folder_based_builder/__init__.py +0 -0
  76. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/folder_based_builder/folder_based_builder.py +0 -0
  77. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/generator/__init__.py +0 -0
  78. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/generator/generator.py +0 -0
  79. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/hdf5/__init__.py +0 -0
  80. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/hdf5/hdf5.py +0 -0
  81. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/imagefolder/__init__.py +0 -0
  82. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/imagefolder/imagefolder.py +0 -0
  83. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/json/__init__.py +0 -0
  84. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/json/json.py +0 -0
  85. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/lance/__init__.py +0 -0
  86. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/lance/lance.py +0 -0
  87. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/niftifolder/__init__.py +0 -0
  88. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/niftifolder/niftifolder.py +0 -0
  89. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/pandas/__init__.py +0 -0
  90. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/pandas/pandas.py +0 -0
  91. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/parquet/__init__.py +0 -0
  92. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/parquet/parquet.py +0 -0
  93. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/pdffolder/__init__.py +0 -0
  94. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/pdffolder/pdffolder.py +0 -0
  95. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/spark/__init__.py +0 -0
  96. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/spark/spark.py +0 -0
  97. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/sql/__init__.py +0 -0
  98. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/sql/sql.py +0 -0
  99. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/text/__init__.py +0 -0
  100. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/text/text.py +0 -0
  101. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/videofolder/__init__.py +0 -0
  102. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/videofolder/videofolder.py +0 -0
  103. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/webdataset/__init__.py +0 -0
  104. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/webdataset/_tenbin.py +0 -0
  105. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/webdataset/webdataset.py +0 -0
  106. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/xml/__init__.py +0 -0
  107. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/packaged_modules/xml/xml.py +0 -0
  108. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/parallel/__init__.py +0 -0
  109. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/parallel/parallel.py +0 -0
  110. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/search.py +0 -0
  111. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/splits.py +0 -0
  112. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/streaming.py +0 -0
  113. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/table.py +0 -0
  114. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/__init__.py +0 -0
  115. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/_dataset_viewer.py +0 -0
  116. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/_dill.py +0 -0
  117. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/_filelock.py +0 -0
  118. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/deprecation_utils.py +0 -0
  119. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/doc_utils.py +0 -0
  120. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/experimental.py +0 -0
  121. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/extract.py +0 -0
  122. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/file_utils.py +0 -0
  123. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/filelock.py +0 -0
  124. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/hub.py +0 -0
  125. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/info_utils.py +0 -0
  126. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/json.py +0 -0
  127. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/logging.py +0 -0
  128. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/metadata.py +0 -0
  129. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/patching.py +0 -0
  130. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/py_utils.py +0 -0
  131. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/resources/__init__.py +0 -0
  132. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/resources/creators.json +0 -0
  133. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/resources/languages.json +0 -0
  134. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/resources/multilingualities.json +0 -0
  135. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/resources/readme_structure.yaml +0 -0
  136. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/resources/size_categories.json +0 -0
  137. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/sharding.py +0 -0
  138. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/stratify.py +0 -0
  139. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/tf_utils.py +0 -0
  140. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/tqdm.py +0 -0
  141. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/track.py +0 -0
  142. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/typing.py +0 -0
  143. {datasets-4.8.2 → datasets-4.8.3}/src/datasets/utils/version.py +0 -0
  144. {datasets-4.8.2 → datasets-4.8.3}/src/datasets.egg-info/SOURCES.txt +0 -0
  145. {datasets-4.8.2 → datasets-4.8.3}/src/datasets.egg-info/dependency_links.txt +0 -0
  146. {datasets-4.8.2 → datasets-4.8.3}/src/datasets.egg-info/entry_points.txt +0 -0
  147. {datasets-4.8.2 → datasets-4.8.3}/src/datasets.egg-info/not-zip-safe +0 -0
  148. {datasets-4.8.2 → datasets-4.8.3}/src/datasets.egg-info/requires.txt +0 -0
  149. {datasets-4.8.2 → datasets-4.8.3}/src/datasets.egg-info/top_level.txt +0 -0
  150. {datasets-4.8.2 → datasets-4.8.3}/tests/test_arrow_dataset.py +0 -0
  151. {datasets-4.8.2 → datasets-4.8.3}/tests/test_arrow_reader.py +0 -0
  152. {datasets-4.8.2 → datasets-4.8.3}/tests/test_arrow_writer.py +0 -0
  153. {datasets-4.8.2 → datasets-4.8.3}/tests/test_builder.py +0 -0
  154. {datasets-4.8.2 → datasets-4.8.3}/tests/test_data_files.py +0 -0
  155. {datasets-4.8.2 → datasets-4.8.3}/tests/test_dataset_dict.py +0 -0
  156. {datasets-4.8.2 → datasets-4.8.3}/tests/test_dataset_list.py +0 -0
  157. {datasets-4.8.2 → datasets-4.8.3}/tests/test_distributed.py +0 -0
  158. {datasets-4.8.2 → datasets-4.8.3}/tests/test_download_manager.py +0 -0
  159. {datasets-4.8.2 → datasets-4.8.3}/tests/test_exceptions.py +0 -0
  160. {datasets-4.8.2 → datasets-4.8.3}/tests/test_experimental.py +0 -0
  161. {datasets-4.8.2 → datasets-4.8.3}/tests/test_extract.py +0 -0
  162. {datasets-4.8.2 → datasets-4.8.3}/tests/test_file_utils.py +0 -0
  163. {datasets-4.8.2 → datasets-4.8.3}/tests/test_filelock.py +0 -0
  164. {datasets-4.8.2 → datasets-4.8.3}/tests/test_filesystem.py +0 -0
  165. {datasets-4.8.2 → datasets-4.8.3}/tests/test_fingerprint.py +0 -0
  166. {datasets-4.8.2 → datasets-4.8.3}/tests/test_fingerprint_tokenizer_stability.py +0 -0
  167. {datasets-4.8.2 → datasets-4.8.3}/tests/test_formatting.py +0 -0
  168. {datasets-4.8.2 → datasets-4.8.3}/tests/test_hub.py +0 -0
  169. {datasets-4.8.2 → datasets-4.8.3}/tests/test_info.py +0 -0
  170. {datasets-4.8.2 → datasets-4.8.3}/tests/test_info_utils.py +0 -0
  171. {datasets-4.8.2 → datasets-4.8.3}/tests/test_inspect.py +0 -0
  172. {datasets-4.8.2 → datasets-4.8.3}/tests/test_load.py +0 -0
  173. {datasets-4.8.2 → datasets-4.8.3}/tests/test_metadata_util.py +0 -0
  174. {datasets-4.8.2 → datasets-4.8.3}/tests/test_offline_util.py +0 -0
  175. {datasets-4.8.2 → datasets-4.8.3}/tests/test_parallel.py +0 -0
  176. {datasets-4.8.2 → datasets-4.8.3}/tests/test_patching.py +0 -0
  177. {datasets-4.8.2 → datasets-4.8.3}/tests/test_py_utils.py +0 -0
  178. {datasets-4.8.2 → datasets-4.8.3}/tests/test_search.py +0 -0
  179. {datasets-4.8.2 → datasets-4.8.3}/tests/test_sharding_utils.py +0 -0
  180. {datasets-4.8.2 → datasets-4.8.3}/tests/test_splits.py +0 -0
  181. {datasets-4.8.2 → datasets-4.8.3}/tests/test_streaming_download_manager.py +0 -0
  182. {datasets-4.8.2 → datasets-4.8.3}/tests/test_table.py +0 -0
  183. {datasets-4.8.2 → datasets-4.8.3}/tests/test_tqdm.py +0 -0
  184. {datasets-4.8.2 → datasets-4.8.3}/tests/test_upstream_hub.py +0 -0
  185. {datasets-4.8.2 → datasets-4.8.3}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: datasets
3
- Version: 4.8.2
3
+ Version: 4.8.3
4
4
  Summary: HuggingFace community-driven open-source library of datasets
5
5
  Home-page: https://github.com/huggingface/datasets
6
6
  Download-URL: https://github.com/huggingface/datasets/tags
@@ -233,7 +233,7 @@ EXTRAS_REQUIRE = {
233
233
 
234
234
  setup(
235
235
  name="datasets",
236
- version="4.8.2", # expected format is one of x.y.z.dev0, or x.y.z.rc1 or x.y.z (no to dashes, yes to dots)
236
+ version="4.8.3", # 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",
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- __version__ = "4.8.2"
15
+ __version__ = "4.8.3"
16
16
 
17
17
  from .arrow_dataset import Column, Dataset
18
18
  from .arrow_reader import ReadInstruction
@@ -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.Int64Array:
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.Int64Array`: Array in the `ClassLabel` arrow storage type.
1250
+ `pa.JsonArray`: Array in the `Json` arrow storage type.
1251
1251
  """
1252
1252
  if isinstance(storage, pa.JsonArray):
1253
1253
  return storage
@@ -424,15 +424,22 @@ class ArrowExamplesIterable(_BaseExamplesIterable):
424
424
 
425
425
 
426
426
  class RebatchedArrowExamplesIterable(_BaseExamplesIterable):
427
- def __init__(self, ex_iterable: _BaseExamplesIterable, batch_size: Optional[int], drop_last_batch: bool = False):
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
- else:
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), self.batch_size, self.drop_last_batch
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 = self.ex_iterable._init_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
- pa_table = pa_table.take(pa.array(range(self.offset, len(pa_table), self.step), type=pa.int64()))
652
- yield key, pa_table
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 (not self.formatting or self.formatting.is_table):
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
- if ex_iterable.iter_arrow:
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
- if (
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
- if ex_iterable.iter_arrow:
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
- if ex_iterable.iter_arrow:
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, batch_size=batch_size if batched else 1, drop_last_batch=drop_last_batch
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: datasets
3
- Version: 4.8.2
3
+ Version: 4.8.3
4
4
  Summary: HuggingFace community-driven open-source library of datasets
5
5
  Home-page: https://github.com/huggingface/datasets
6
6
  Download-URL: https://github.com/huggingface/datasets/tags
@@ -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(base_ex_iterable, batch_size=batch_size if batched else 1)
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(base_ex_iterable, batch_size=batch_size if batched else 1)
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(base_ex_iterable, batch_size=batch_size if batched else 1)
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(base_ex_iterable, batch_size=batch_size if batched else 1)
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(base_ex_iterable, batch_size=batch_size if batched else 1)
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(base_ex_iterable, batch_size=batch_size if batched else 1)
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(ExamplesIterable(generate_examples_fn, {}), batch_size=1),
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(ExamplesIterable(generate_examples_fn, {}), batch_size=1),
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(ArrowExamplesIterable(generate_tables_fn, {}), batch_size=1),
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