From d16f41d2d9da1e4553cbddfbc33947fc3ea1191b Mon Sep 17 00:00:00 2001 From: Pierre Marcenac Date: Fri, 18 Oct 2024 05:50:54 -0700 Subject: [PATCH] Add a test testing that there is no VERSION < max(RELEASE_NOTE_VERSION). PiperOrigin-RevId: 687272185 --- tensorflow_datasets/core/registered_test.py | 4 +- .../datasets/asqa/asqa_dataset_builder.py | 2 +- .../duke_ultrasound_dataset_builder.py | 2 +- .../imagenet_v2_dataset_builder.py | 2 +- .../svhn_cropped_dataset_builder.py | 2 +- tensorflow_datasets/testing/version_test.py | 67 +++++++++++++++++++ .../dolphin_number_word.py | 2 +- 7 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 tensorflow_datasets/testing/version_test.py diff --git a/tensorflow_datasets/core/registered_test.py b/tensorflow_datasets/core/registered_test.py index 1ffe61407d7..f9600dc07c6 100644 --- a/tensorflow_datasets/core/registered_test.py +++ b/tensorflow_datasets/core/registered_test.py @@ -337,7 +337,9 @@ class SkipDataset(registered.RegisteredDataset, skip_registration=True): def test_custom_name(): """Tests that builder can have custom names.""" - class SomeCustomNameBuilder(registered.RegisteredDataset): + class SomeCustomNameBuilder( + registered.RegisteredDataset, skip_registration=True + ): name = "custom_name" assert "custom_name" == SomeCustomNameBuilder.name diff --git a/tensorflow_datasets/datasets/asqa/asqa_dataset_builder.py b/tensorflow_datasets/datasets/asqa/asqa_dataset_builder.py index e363a7ef68d..ecfe29f0b8f 100644 --- a/tensorflow_datasets/datasets/asqa/asqa_dataset_builder.py +++ b/tensorflow_datasets/datasets/asqa/asqa_dataset_builder.py @@ -80,7 +80,7 @@ def _features(): class Builder(tfds.core.GeneratorBasedBuilder): """DatasetBuilder for asqa dataset.""" - VERSION = tfds.core.Version('1.0.0') + VERSION = tfds.core.Version('2.0.0') RELEASE_NOTES = { '2.0.0': 'Sample ID goes from int32 (overflowing) to int64.', '1.0.0': 'Initial release.', diff --git a/tensorflow_datasets/datasets/duke_ultrasound/duke_ultrasound_dataset_builder.py b/tensorflow_datasets/datasets/duke_ultrasound/duke_ultrasound_dataset_builder.py index 9db0f64851f..8b9fc003957 100644 --- a/tensorflow_datasets/datasets/duke_ultrasound/duke_ultrasound_dataset_builder.py +++ b/tensorflow_datasets/datasets/duke_ultrasound/duke_ultrasound_dataset_builder.py @@ -42,7 +42,7 @@ class Builder(tfds.core.GeneratorBasedBuilder): """DAS beamformed phantom images and paired post-processed images.""" - VERSION = tfds.core.Version('1.0.1') + VERSION = tfds.core.Version('2.0.0') RELEASE_NOTES = { '2.0.0': r'Fix timestamp_id from %Y%m%d%H%M%S to posix timestamp.', '1.0.1': 'Fixes parsing of boolean field `harmonic`.', diff --git a/tensorflow_datasets/datasets/imagenet_v2/imagenet_v2_dataset_builder.py b/tensorflow_datasets/datasets/imagenet_v2/imagenet_v2_dataset_builder.py index cbc3ed0098a..aa9286debed 100644 --- a/tensorflow_datasets/datasets/imagenet_v2/imagenet_v2_dataset_builder.py +++ b/tensorflow_datasets/datasets/imagenet_v2/imagenet_v2_dataset_builder.py @@ -69,7 +69,7 @@ def _create_builder_configs(): class Builder(tfds.core.GeneratorBasedBuilder): """An ImageNet test set recollected by following the original protocol.""" - VERSION = tfds.core.Version('3.0.0') + VERSION = tfds.core.Version('3.1.0') SUPPORTED_VERSIONS = [ tfds.core.Version('2.0.0'), ] diff --git a/tensorflow_datasets/datasets/svhn_cropped/svhn_cropped_dataset_builder.py b/tensorflow_datasets/datasets/svhn_cropped/svhn_cropped_dataset_builder.py index 06ebc857bc0..e298a1d3df6 100644 --- a/tensorflow_datasets/datasets/svhn_cropped/svhn_cropped_dataset_builder.py +++ b/tensorflow_datasets/datasets/svhn_cropped/svhn_cropped_dataset_builder.py @@ -26,7 +26,7 @@ class Builder(tfds.core.GeneratorBasedBuilder): """Street View House Numbers (SVHN) Dataset, cropped version.""" - VERSION = tfds.core.Version("3.0.0") + VERSION = tfds.core.Version("3.1.0") SUPPORTED_VERSIONS = [ tfds.core.Version("3.1.0"), ] diff --git a/tensorflow_datasets/testing/version_test.py b/tensorflow_datasets/testing/version_test.py new file mode 100644 index 00000000000..609c532c615 --- /dev/null +++ b/tensorflow_datasets/testing/version_test.py @@ -0,0 +1,67 @@ +# coding=utf-8 +# Copyright 2024 The TensorFlow Datasets Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import dataclasses +import inspect + +import tensorflow_datasets as tfds + + +@dataclasses.dataclass(frozen=True, kw_only=True) +class _BuilderWithVersionMismatch: + name: str + file: str + version: str + max_version_in_release_notes: str + + +def test_internal_datasets_have_versions_on_line_with_the_release_notes(): + builders = tfds.list_builders(with_community_datasets=False) + assert builders + builders_with_version_mismatch: list[_BuilderWithVersionMismatch] = [] + for builder in builders: + builder_cls = tfds.core.registered.imported_builder_cls(builder) + if builder_cls.VERSION and builder_cls.RELEASE_NOTES: + max_version_in_release_notes = max( + [tfds.core.Version(version) for version in builder_cls.RELEASE_NOTES] + ) + version = tfds.core.Version(builder_cls.VERSION) + if version < max_version_in_release_notes: + # This means the builder is as follow: + # ``` + # RELEASE_NOTES = { + # '1.0.1': 'Bug fix.', + # '1.0.0': 'Initial release.', + # } + # VERSION = '1.0.0' # <- Someone forgot to increment this version. + # ``` + file = inspect.getfile(builder_cls).split('tensorflow_datasets/')[-1] + builders_with_version_mismatch.append( + _BuilderWithVersionMismatch( + name=builder_cls.name, + file=file, + version=version, + max_version_in_release_notes=max_version_in_release_notes, + ) + ) + if builders_with_version_mismatch: + error = 'The following datasets have a version mismatch:' + for builder_cls in builders_with_version_mismatch: + error += ( + f'\n - Dataset {builder_cls.name} ({builder_cls.file}) has VERSION=' + f'"{builder_cls.version}" but RELEASE_NOTES contains version' + f' "{builder_cls.max_version_in_release_notes}".' + ) + raise ValueError(error) diff --git a/tensorflow_datasets/text/dolphin_number_word/dolphin_number_word.py b/tensorflow_datasets/text/dolphin_number_word/dolphin_number_word.py index c2cafb22a12..d6140da9fd8 100644 --- a/tensorflow_datasets/text/dolphin_number_word/dolphin_number_word.py +++ b/tensorflow_datasets/text/dolphin_number_word/dolphin_number_word.py @@ -45,7 +45,7 @@ class DolphinNumberWord(tfds.core.GeneratorBasedBuilder): __count__ = 0 - VERSION = tfds.core.Version('0.0.2') + VERSION = tfds.core.Version('0.0.3') RELEASE_NOTES = { '0.0.1': 'Initial release.', '0.0.2': (