From 176613901f1a0f1d4454d0d889d46fa363852a32 Mon Sep 17 00:00:00 2001 From: Parmeet Singh Bhatia Date: Sat, 29 Jan 2022 18:25:23 -0500 Subject: [PATCH 1/4] intermediate state --- test/datasets/test_multi30k.py | 82 ++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 test/datasets/test_multi30k.py diff --git a/test/datasets/test_multi30k.py b/test/datasets/test_multi30k.py new file mode 100644 index 0000000000..73733cfed7 --- /dev/null +++ b/test/datasets/test_multi30k.py @@ -0,0 +1,82 @@ +import os +import random +import string +import tarfile +from collections import defaultdict +from unittest.mock import patch + +from parameterized import parameterized +from torchtext.datasets.amazonreviewpolarity import Multi30k + +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, "Multi30k") + 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.de", "train.en", "val.de", "val.en", "test.de", "test.en"): + txt_file = os.path.join(temp_dataset_dir, file_name) + with open(txt_file, "w") as f: + for i in range(5): + rand_string = " ".join( + random.choice(string.ascii_letters) for i in range(seed) + ) + dataset_line = (label, f"{rand_string} {rand_string}") + # append line to correct dataset split + mocked_data[os.path.splitext(file_name)[0]].append(dataset_line) + f.write(f'"{label}","{rand_string}","{rand_string}"\n') + seed += 1 + + compressed_dataset_path = os.path.join( + base_dir, "amazon_review_polarity_csv.tar.gz" + ) + # create tar file from dataset folder + with tarfile.open(compressed_dataset_path, "w:gz") as tar: + tar.add(temp_dataset_dir, arcname="amazon_review_polarity_csv") + + return mocked_data + + +class TestAmazonReviewPolarity(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_multi30k(self, split): + dataset = AmazonReviewPolarity(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_multi30k_split_argument(self, split): + dataset1 = Multi30k(root=self.root_dir, split=split) + (dataset2,) = Multi30k(root=self.root_dir, split=(split,)) + + for d1, d2 in zip_equal(dataset1, dataset2): + self.assertEqual(d1, d2) From b3e6b15511e227b47a31166c5e13359cd71c68f3 Mon Sep 17 00:00:00 2001 From: Parmeet Singh Bhatia Date: Sat, 29 Jan 2022 20:26:33 -0500 Subject: [PATCH 2/4] add multi30k mocked test --- test/datasets/test_multi30k.py | 48 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/test/datasets/test_multi30k.py b/test/datasets/test_multi30k.py index 73733cfed7..6b48c354cc 100644 --- a/test/datasets/test_multi30k.py +++ b/test/datasets/test_multi30k.py @@ -5,8 +5,8 @@ from collections import defaultdict from unittest.mock import patch -from parameterized import parameterized -from torchtext.datasets.amazonreviewpolarity import Multi30k +from ..common.parameterized_utils import nested_params +from torchtext.datasets import Multi30k from ..common.case_utils import TempDirMixin, zip_equal from ..common.torchtext_test_case import TorchtextTestCase @@ -29,26 +29,25 @@ def _get_mock_dataset(root_dir): rand_string = " ".join( random.choice(string.ascii_letters) for i in range(seed) ) - dataset_line = (label, f"{rand_string} {rand_string}") - # append line to correct dataset split - mocked_data[os.path.splitext(file_name)[0]].append(dataset_line) - f.write(f'"{label}","{rand_string}","{rand_string}"\n') + content = f'{rand_string}\n' + f.write(content) + mocked_data[file_name].append(content) seed += 1 - compressed_dataset_path = os.path.join( - base_dir, "amazon_review_polarity_csv.tar.gz" - ) + archive = {} + archive["train"] = os.path.join(base_dir, "training.tar.gz") + archive["val"] = os.path.join(base_dir, "validation.tar.gz") + archive["test"] = os.path.join(base_dir, "mmt16_task1_test.tar.gz") # create tar file from dataset folder - with tarfile.open(compressed_dataset_path, "w:gz") as tar: - tar.add(temp_dataset_dir, arcname="amazon_review_polarity_csv") + for split in ("train", "val", "test"): + with tarfile.open(archive[split], "w:gz") as tar: + tar.add(os.path.join(temp_dataset_dir, f"{split}.de")) + tar.add(os.path.join(temp_dataset_dir, f"{split}.en")) return mocked_data -class TestAmazonReviewPolarity(TempDirMixin, TorchtextTestCase): - root_dir = None - samples = [] - +class TestMulti30k(TempDirMixin, TorchtextTestCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -64,19 +63,20 @@ def tearDownClass(cls): cls.patcher.stop() super().tearDownClass() - @parameterized.expand(["train", "test"]) - def test_multi30k(self, split): - dataset = AmazonReviewPolarity(root=self.root_dir, split=split) - + @nested_params(["train", "valid", "test"], [("de", "en"), ("en", "de")]) + def test_multi30k(self, split, language_pair): + dataset = Multi30k(root=self.root_dir, split=split, language_pair=language_pair) + if split == "valid": + split = "val" samples = list(dataset) - expected_samples = self.samples[split] + expected_samples = [(d1, d2) for d1, d2 in zip(self.samples[f'{split}.{language_pair[0]}'], self.samples[f'{split}.{language_pair[1]}'])] for sample, expected_sample in zip_equal(samples, expected_samples): self.assertEqual(sample, expected_sample) - @parameterized.expand(["train", "test"]) - def test_multi30k_split_argument(self, split): - dataset1 = Multi30k(root=self.root_dir, split=split) - (dataset2,) = Multi30k(root=self.root_dir, split=(split,)) + @nested_params(["train", "valid", "test"], [("de", "en"), ("en", "de")]) + def test_multi30k_split_argument(self, split, language_pair): + dataset1 = Multi30k(root=self.root_dir, split=split, language_pair=language_pair) + (dataset2,) = Multi30k(root=self.root_dir, split=(split,), language_pair=language_pair) for d1, d2 in zip_equal(dataset1, dataset2): self.assertEqual(d1, d2) From c8e7224aa8fd02afa96ca3e7cd8f4778b62a1cdc Mon Sep 17 00:00:00 2001 From: Parmeet Singh Bhatia Date: Sat, 29 Jan 2022 20:28:02 -0500 Subject: [PATCH 3/4] minor edit --- test/datasets/test_multi30k.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/datasets/test_multi30k.py b/test/datasets/test_multi30k.py index 6b48c354cc..a6f16dbe74 100644 --- a/test/datasets/test_multi30k.py +++ b/test/datasets/test_multi30k.py @@ -38,7 +38,7 @@ def _get_mock_dataset(root_dir): archive["train"] = os.path.join(base_dir, "training.tar.gz") archive["val"] = os.path.join(base_dir, "validation.tar.gz") archive["test"] = os.path.join(base_dir, "mmt16_task1_test.tar.gz") - # create tar file from dataset folder + for split in ("train", "val", "test"): with tarfile.open(archive[split], "w:gz") as tar: tar.add(os.path.join(temp_dataset_dir, f"{split}.de")) From 861631a1b534d681400ce81634cddd9b99246d52 Mon Sep 17 00:00:00 2001 From: Parmeet Singh Bhatia Date: Wed, 2 Feb 2022 17:25:03 -0500 Subject: [PATCH 4/4] fix single quote --- test/datasets/test_multi30k.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/datasets/test_multi30k.py b/test/datasets/test_multi30k.py index a6f16dbe74..6527050c56 100644 --- a/test/datasets/test_multi30k.py +++ b/test/datasets/test_multi30k.py @@ -29,7 +29,7 @@ def _get_mock_dataset(root_dir): rand_string = " ".join( random.choice(string.ascii_letters) for i in range(seed) ) - content = f'{rand_string}\n' + content = f"{rand_string}\n" f.write(content) mocked_data[file_name].append(content) seed += 1