From 584069e7e2056e76e70ae6f301816987856434a9 Mon Sep 17 00:00:00 2001 From: Virgile Mison Date: Fri, 28 Jan 2022 22:21:44 -0500 Subject: [PATCH 1/5] add test_yelpreviewpolarity to mock YelpReviewP.. --- test/datasets/test_yelpreviewpolarity.py | 85 ++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 test/datasets/test_yelpreviewpolarity.py diff --git a/test/datasets/test_yelpreviewpolarity.py b/test/datasets/test_yelpreviewpolarity.py new file mode 100644 index 0000000000..25429a38b1 --- /dev/null +++ b/test/datasets/test_yelpreviewpolarity.py @@ -0,0 +1,85 @@ +import os +import random +import string +import tarfile +from collections import defaultdict +from unittest.mock import patch + +from parameterized import parameterized +from torchtext.datasets.yelpreviewpolarity import YelpReviewPolarity + +from ..common.case_utils import TempDirMixin, zip_equal +from ..common.torchtext_test_case import TorchtextTestCase + + +def _get_mock_dataset(root_dir): + """ + root_dir: directory to the mocked dataset + """ + base_dir = os.path.join(root_dir, "YelpReviewPolarity") + temp_dataset_dir = os.path.join(base_dir, "yelp_review_polarity_csv") + os.makedirs(temp_dataset_dir, exist_ok=True) + + seed = 1 + mocked_data = defaultdict(list) + for file_name in ["train.csv", "test.csv"]: + csv_file = os.path.join(temp_dataset_dir, file_name) + mocked_lines = mocked_data[os.path.splitext(file_name)[0]] + with open(csv_file, "w") as f: + for i in range(5): + label = seed % 11 + rand_string = " ".join( + random.choice(string.ascii_letters) for i in range(seed) + ) + dataset_line = (label, f"{rand_string}") + f.write(f'"{label}","{rand_string}"\n') + + # append line to correct dataset split + mocked_lines.append(dataset_line) + seed += 1 + + compressed_dataset_path = os.path.join(base_dir, "yelp_review_polarity_csv.tar.gz") + # create gz file from dataset folder + with tarfile.open(compressed_dataset_path, "w:gz") as tar: + for file_name in ("train.csv", "test.csv"): + csv_file = os.path.join(temp_dataset_dir, file_name) + tar.add(csv_file) + + return mocked_data + + +class TestYelpReviewPolarity(TempDirMixin, TorchtextTestCase): + root_dir = None + samples = [] + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.root_dir = cls.get_base_temp_dir() + cls.samples = _get_mock_dataset(cls.root_dir) + cls.patcher = patch( + "torchdata.datapipes.iter.util.cacheholder._hash_check", return_value=True + ) + cls.patcher.start() + + @classmethod + def tearDownClass(cls): + cls.patcher.stop() + super().tearDownClass() + + @parameterized.expand(["train", "test"]) + def test_yelpreviewpolarity(self, split): + dataset = YelpReviewPolarity(root=self.root_dir, split=split) + + samples = list(dataset) + expected_samples = self.samples[split] + for sample, expected_sample in zip_equal(samples, expected_samples): + self.assertEqual(sample, expected_sample) + + @parameterized.expand(["train", "test"]) + def test_yelpreviewpolarity_split_argument(self, split): + dataset1 = YelpReviewPolarity(root=self.root_dir, split=split) + (dataset2,) = YelpReviewPolarity(root=self.root_dir, split=(split,)) + + for d1, d2 in zip_equal(dataset1, dataset2): + self.assertEqual(d1, d2) From eeffd63c3eb610bfebfb13c5122ab3037bbf3ca2 Mon Sep 17 00:00:00 2001 From: Virgile Mison Date: Fri, 4 Feb 2022 16:55:45 -0500 Subject: [PATCH 2/5] PR comments change --- test/datasets/test_yelpreviewpolarity.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/datasets/test_yelpreviewpolarity.py b/test/datasets/test_yelpreviewpolarity.py index 25429a38b1..08e01cd33d 100644 --- a/test/datasets/test_yelpreviewpolarity.py +++ b/test/datasets/test_yelpreviewpolarity.py @@ -17,17 +17,17 @@ def _get_mock_dataset(root_dir): root_dir: directory to the mocked dataset """ base_dir = os.path.join(root_dir, "YelpReviewPolarity") - temp_dataset_dir = os.path.join(base_dir, "yelp_review_polarity_csv") + temp_dataset_dir = os.path.join(base_dir, "temp_dataset_dir") os.makedirs(temp_dataset_dir, exist_ok=True) seed = 1 mocked_data = defaultdict(list) - for file_name in ["train.csv", "test.csv"]: + for file_name in ("train.csv", "test.csv"): csv_file = os.path.join(temp_dataset_dir, file_name) mocked_lines = mocked_data[os.path.splitext(file_name)[0]] with open(csv_file, "w") as f: for i in range(5): - label = seed % 11 + label = seed % 2 + 1 rand_string = " ".join( random.choice(string.ascii_letters) for i in range(seed) ) @@ -41,9 +41,7 @@ def _get_mock_dataset(root_dir): compressed_dataset_path = os.path.join(base_dir, "yelp_review_polarity_csv.tar.gz") # create gz file from dataset folder with tarfile.open(compressed_dataset_path, "w:gz") as tar: - for file_name in ("train.csv", "test.csv"): - csv_file = os.path.join(temp_dataset_dir, file_name) - tar.add(csv_file) + tar.add(temp_dataset_dir, arcname="yelp_review_polarity_csv") return mocked_data From 1aacba6e6203409aec03cd2ca8ccc975e2e7f7ad Mon Sep 17 00:00:00 2001 From: Virgile Mison Date: Mon, 7 Feb 2022 22:05:48 -0500 Subject: [PATCH 3/5] create one single yelpreviews mock unit tests --- ...previewpolarity.py => test_yelpreviews.py} | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) rename test/datasets/{test_yelpreviewpolarity.py => test_yelpreviews.py} (55%) diff --git a/test/datasets/test_yelpreviewpolarity.py b/test/datasets/test_yelpreviews.py similarity index 55% rename from test/datasets/test_yelpreviewpolarity.py rename to test/datasets/test_yelpreviews.py index 08e01cd33d..38ce68f374 100644 --- a/test/datasets/test_yelpreviewpolarity.py +++ b/test/datasets/test_yelpreviews.py @@ -7,16 +7,19 @@ from parameterized import parameterized from torchtext.datasets.yelpreviewpolarity import YelpReviewPolarity +from torchtext.datasets.yelpreviewfull import YelpReviewFull from ..common.case_utils import TempDirMixin, zip_equal from ..common.torchtext_test_case import TorchtextTestCase -def _get_mock_dataset(root_dir): +def _get_mock_dataset(root_dir, dataset_name): """ root_dir: directory to the mocked dataset + dataset_name: YelpReviewPolarity or YelpReviewFull """ - base_dir = os.path.join(root_dir, "YelpReviewPolarity") + assert dataset_name in ("YelpReviewPolarity", "YelpReviewFull") + base_dir = os.path.join(root_dir, dataset_name) temp_dataset_dir = os.path.join(base_dir, "temp_dataset_dir") os.makedirs(temp_dataset_dir, exist_ok=True) @@ -27,7 +30,7 @@ def _get_mock_dataset(root_dir): mocked_lines = mocked_data[os.path.splitext(file_name)[0]] with open(csv_file, "w") as f: for i in range(5): - label = seed % 2 + 1 + label = seed % 2 + 1 if dataset_name == "YelpReviewPolarity" else seed % 5 + 1 rand_string = " ".join( random.choice(string.ascii_letters) for i in range(seed) ) @@ -38,10 +41,12 @@ def _get_mock_dataset(root_dir): mocked_lines.append(dataset_line) seed += 1 - compressed_dataset_path = os.path.join(base_dir, "yelp_review_polarity_csv.tar.gz") + compressed_file = f"yelp_review_{'polarity' if dataset_name == 'YelpReviewPolarity' else 'full'}_csv" + print(compressed_file) + compressed_dataset_path = os.path.join(base_dir, compressed_file + ".tar.gz") # create gz file from dataset folder with tarfile.open(compressed_dataset_path, "w:gz") as tar: - tar.add(temp_dataset_dir, arcname="yelp_review_polarity_csv") + tar.add(temp_dataset_dir, arcname=compressed_file) return mocked_data @@ -54,7 +59,7 @@ class TestYelpReviewPolarity(TempDirMixin, TorchtextTestCase): def setUpClass(cls): super().setUpClass() cls.root_dir = cls.get_base_temp_dir() - cls.samples = _get_mock_dataset(cls.root_dir) + cls.samples = _get_mock_dataset(cls.root_dir, dataset_name="YelpReviewPolarity") cls.patcher = patch( "torchdata.datapipes.iter.util.cacheholder._hash_check", return_value=True ) @@ -81,3 +86,38 @@ def test_yelpreviewpolarity_split_argument(self, split): for d1, d2 in zip_equal(dataset1, dataset2): self.assertEqual(d1, d2) + + +class TestYelpReviewFull(TempDirMixin, TorchtextTestCase): + root_dir = None + samples = [] + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.root_dir = cls.get_base_temp_dir() + cls.samples = _get_mock_dataset(cls.root_dir, dataset_name="YelpReviewFull") + cls.patcher = patch( + "torchdata.datapipes.iter.util.cacheholder._hash_check", return_value=True + ) + cls.patcher.start() + + @classmethod + def tearDownClass(cls): + cls.patcher.stop() + super().tearDownClass() + + @parameterized.expand(["train", "test"]) + def test_yelpreviewfull(self, split): + dataset = YelpReviewFull(root=self.root_dir, split=split) + samples = list(dataset) + expected_samples = self.samples[split] + for sample, expected_sample in zip_equal(samples, expected_samples): + self.assertEqual(sample, expected_sample) + + @parameterized.expand(["train", "test"]) + def test_yelpreviewfull_split_argument(self, split): + dataset1 = YelpReviewFull(root=self.root_dir, split=split) + (dataset2,) = YelpReviewFull(root=self.root_dir, split=(split,)) + for d1, d2 in zip_equal(dataset1, dataset2): + self.assertEqual(d1, d2) From c56a3e14ccced9aac499461bb01b3fd677b77396 Mon Sep 17 00:00:00 2001 From: Virgile Mison Date: Mon, 7 Feb 2022 22:24:07 -0500 Subject: [PATCH 4/5] followed #1575, merge YelpReviews mock unit tests --- test/datasets/test_yelpreviews.py | 74 ++++++++++--------------------- 1 file changed, 23 insertions(+), 51 deletions(-) diff --git a/test/datasets/test_yelpreviews.py b/test/datasets/test_yelpreviews.py index 38ce68f374..cc968552ea 100644 --- a/test/datasets/test_yelpreviews.py +++ b/test/datasets/test_yelpreviews.py @@ -5,7 +5,7 @@ from collections import defaultdict from unittest.mock import patch -from parameterized import parameterized +from ..common.parameterized_utils import nested_params from torchtext.datasets.yelpreviewpolarity import YelpReviewPolarity from torchtext.datasets.yelpreviewfull import YelpReviewFull @@ -13,13 +13,12 @@ from ..common.torchtext_test_case import TorchtextTestCase -def _get_mock_dataset(root_dir, dataset_name): +def _get_mock_dataset(root_dir, base_dir_name): """ root_dir: directory to the mocked dataset - dataset_name: YelpReviewPolarity or YelpReviewFull + base_dir_name: YelpReviewPolarity or YelpReviewFull """ - assert dataset_name in ("YelpReviewPolarity", "YelpReviewFull") - base_dir = os.path.join(root_dir, dataset_name) + base_dir = os.path.join(root_dir, base_dir_name) temp_dataset_dir = os.path.join(base_dir, "temp_dataset_dir") os.makedirs(temp_dataset_dir, exist_ok=True) @@ -30,7 +29,10 @@ def _get_mock_dataset(root_dir, dataset_name): mocked_lines = mocked_data[os.path.splitext(file_name)[0]] with open(csv_file, "w") as f: for i in range(5): - label = seed % 2 + 1 if dataset_name == "YelpReviewPolarity" else seed % 5 + 1 + if base_dir_name == YelpReviewPolarity.__name__: + label = seed % 2 + 1 + else: + label = seed % 5 + 1 rand_string = " ".join( random.choice(string.ascii_letters) for i in range(seed) ) @@ -41,8 +43,11 @@ def _get_mock_dataset(root_dir, dataset_name): mocked_lines.append(dataset_line) seed += 1 - compressed_file = f"yelp_review_{'polarity' if dataset_name == 'YelpReviewPolarity' else 'full'}_csv" - print(compressed_file) + if base_dir_name == YelpReviewPolarity.__name__: + compressed_file = "yelp_review_polarity_csv" + else: + compressed_file = "yelp_review_full_csv" + compressed_dataset_path = os.path.join(base_dir, compressed_file + ".tar.gz") # create gz file from dataset folder with tarfile.open(compressed_dataset_path, "w:gz") as tar: @@ -51,7 +56,7 @@ def _get_mock_dataset(root_dir, dataset_name): return mocked_data -class TestYelpReviewPolarity(TempDirMixin, TorchtextTestCase): +class TestYelpReviews(TempDirMixin, TorchtextTestCase): root_dir = None samples = [] @@ -59,7 +64,6 @@ class TestYelpReviewPolarity(TempDirMixin, TorchtextTestCase): def setUpClass(cls): super().setUpClass() cls.root_dir = cls.get_base_temp_dir() - cls.samples = _get_mock_dataset(cls.root_dir, dataset_name="YelpReviewPolarity") cls.patcher = patch( "torchdata.datapipes.iter.util.cacheholder._hash_check", return_value=True ) @@ -70,54 +74,22 @@ def tearDownClass(cls): cls.patcher.stop() super().tearDownClass() - @parameterized.expand(["train", "test"]) - def test_yelpreviewpolarity(self, split): - dataset = YelpReviewPolarity(root=self.root_dir, split=split) + @nested_params([YelpReviewPolarity, YelpReviewFull], ["train", "test"]) + def test_yelpreviews(self, yelp_dataset, split): + expected_samples = _get_mock_dataset(self.root_dir, base_dir_name=yelp_dataset.__name__)[split] + dataset = yelp_dataset(root=self.root_dir, split=split) samples = list(dataset) - expected_samples = self.samples[split] for sample, expected_sample in zip_equal(samples, expected_samples): self.assertEqual(sample, expected_sample) - @parameterized.expand(["train", "test"]) - def test_yelpreviewpolarity_split_argument(self, split): + @nested_params([YelpReviewPolarity, YelpReviewFull], ["train", "test"]) + def test_yelpreviews_split_argument(self, yelp_dataset, split): + # call `_get_mock_dataset` to create mock dataset files + _ = _get_mock_dataset(self.root_dir, yelp_dataset.__name__) + dataset1 = YelpReviewPolarity(root=self.root_dir, split=split) (dataset2,) = YelpReviewPolarity(root=self.root_dir, split=(split,)) for d1, d2 in zip_equal(dataset1, dataset2): self.assertEqual(d1, d2) - - -class TestYelpReviewFull(TempDirMixin, TorchtextTestCase): - root_dir = None - samples = [] - - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.root_dir = cls.get_base_temp_dir() - cls.samples = _get_mock_dataset(cls.root_dir, dataset_name="YelpReviewFull") - cls.patcher = patch( - "torchdata.datapipes.iter.util.cacheholder._hash_check", return_value=True - ) - cls.patcher.start() - - @classmethod - def tearDownClass(cls): - cls.patcher.stop() - super().tearDownClass() - - @parameterized.expand(["train", "test"]) - def test_yelpreviewfull(self, split): - dataset = YelpReviewFull(root=self.root_dir, split=split) - samples = list(dataset) - expected_samples = self.samples[split] - for sample, expected_sample in zip_equal(samples, expected_samples): - self.assertEqual(sample, expected_sample) - - @parameterized.expand(["train", "test"]) - def test_yelpreviewfull_split_argument(self, split): - dataset1 = YelpReviewFull(root=self.root_dir, split=split) - (dataset2,) = YelpReviewFull(root=self.root_dir, split=(split,)) - for d1, d2 in zip_equal(dataset1, dataset2): - self.assertEqual(d1, d2) From 1a07a683ff12f4da3f2d470c8fe5b9f17bcdea3d Mon Sep 17 00:00:00 2001 From: Virgile Mison Date: Mon, 7 Feb 2022 22:54:14 -0500 Subject: [PATCH 5/5] fix dataset call --- test/datasets/test_yelpreviews.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/datasets/test_yelpreviews.py b/test/datasets/test_yelpreviews.py index cc968552ea..241b52b7fa 100644 --- a/test/datasets/test_yelpreviews.py +++ b/test/datasets/test_yelpreviews.py @@ -88,8 +88,8 @@ def test_yelpreviews_split_argument(self, yelp_dataset, split): # call `_get_mock_dataset` to create mock dataset files _ = _get_mock_dataset(self.root_dir, yelp_dataset.__name__) - dataset1 = YelpReviewPolarity(root=self.root_dir, split=split) - (dataset2,) = YelpReviewPolarity(root=self.root_dir, split=(split,)) + dataset1 = yelp_dataset(root=self.root_dir, split=split) + (dataset2,) = yelp_dataset(root=self.root_dir, split=(split,)) for d1, d2 in zip_equal(dataset1, dataset2): self.assertEqual(d1, d2)