Skip to content

Commit 0ca4911

Browse files
tomvdwThe TensorFlow Datasets Authors
authored and
The TensorFlow Datasets Authors
committed
Fix a bug in LazyMetadataDict where the metadata is not copyable when using **.
PiperOrigin-RevId: 696856102
1 parent 6bcafe4 commit 0ca4911

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

tensorflow_datasets/core/dataset_info.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,8 @@ def alternative_file_formats(self) -> list[file_adapters.FileFormat]:
457457

458458
@property
459459
def metadata(self) -> Metadata | None:
460+
if isinstance(self._metadata, LazyMetadataDict):
461+
self._metadata.load_metadata_if_needed()
460462
return self._metadata
461463

462464
@property
@@ -1414,26 +1416,30 @@ def __init__(self, data_dir: epath.PathLike) -> None:
14141416
self._data_is_loaded = False
14151417
super().__init__()
14161418

1417-
def _load_metadata(self):
1419+
def load_metadata_if_needed(self):
14181420
if not self._data_is_loaded:
14191421
if _metadata_filepath(self._data_dir).exists():
14201422
self.load_metadata(self._data_dir)
14211423
self._data_is_loaded = True
14221424

14231425
def __getitem__(self, key, /):
1424-
self._load_metadata()
1426+
self.load_metadata_if_needed()
14251427
return super().__getitem__(key)
14261428

14271429
def __eq__(self, value, /):
1428-
self._load_metadata()
1430+
self.load_metadata_if_needed()
14291431
return super().__eq__(value)
14301432

14311433
def keys(self):
1432-
self._load_metadata()
1434+
self.load_metadata_if_needed()
14331435
return super().keys()
14341436

1437+
def values(self):
1438+
self.load_metadata_if_needed()
1439+
return super().values()
1440+
14351441
def items(self):
1436-
self._load_metadata()
1442+
self.load_metadata_if_needed()
14371443
return super().items()
14381444

14391445
def copy(self):

tensorflow_datasets/core/dataset_info_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,14 @@ def test_metadata(self):
318318
)
319319
self.assertEqual(builder3.info.metadata, {"some_key": 123})
320320

321+
# Test whether the metadata is copyable.
322+
builder = RandomShapedImageGenerator(data_dir=tmp_dir)
323+
self.assertIsInstance(
324+
builder.info.metadata, dataset_info.LazyMetadataDict
325+
)
326+
metadata_copy = {**builder.info.metadata}
327+
self.assertEqual(metadata_copy, {"some_key": 123})
328+
321329
def test_redistribution_info(self):
322330
info = dataset_info.DatasetInfo(
323331
builder=self._builder, license="some license"

0 commit comments

Comments
 (0)