
'''simple docstring'''
import csv
import json
import os

import datasets


# TODO: Add BibTeX citation
# Find for instance the citation on arxiv or on the dataset repo/website
lowercase__		    =	"\\n@InProceedings{huggingface:dataset,\ntitle = {A great new dataset},\nauthor={huggingface, Inc.\n},\nyear={2020}\n}\n"

# TODO: Add description of the dataset here
# You can copy an official description
lowercase__		    =	"\\nThis new dataset is designed to solve this great NLP task and is crafted with a lot of care.\n"

# TODO: Add a link to an official homepage for the dataset here
lowercase__		    =	""

# TODO: Add the licence for the dataset here if you can find it
lowercase__		    =	""

# TODO: Add link to the official dataset URLs here
# The HuggingFace Datasets library doesn't host the datasets but only points to the original files.
# This can be an arbitrary nested dict/list of URLs (see below in `_split_generators` method)
lowercase__		    =	{
    "first_domain": "https://huggingface.co/great-new-dataset-first_domain.zip",
    "second_domain": "https://huggingface.co/great-new-dataset-second_domain.zip",
}






class      snake_case__    (	datasets.GeneratorBasedBuilder ):







		"""simple docstring"""

		lowerCamelCase							=		datasets.Version("""1.1.0""" )

		# This is an example of a dataset with multiple configurations.
		# If you don't want/need to define several sub-sets in your dataset,
		# just remove the BUILDER_CONFIG_CLASS and the BUILDER_CONFIGS attributes.

		# If you need to make complex sub-parts in the datasets with configurable options
		# You can create your own builder configuration class to store attribute, inheriting from datasets.BuilderConfig
		# BUILDER_CONFIG_CLASS = MyBuilderConfig

		# You will be able to load one or the other configurations in the following list with
		# data = datasets.load_dataset('my_dataset', 'first_domain')
		# data = datasets.load_dataset('my_dataset', 'second_domain')
		lowerCamelCase							=		[
		    datasets.BuilderConfig(name="""first_domain"""  , version=__SCREAMING_SNAKE_CASE  , description="""This part of my dataset covers a first domain""" ),
		    datasets.BuilderConfig(name="""second_domain"""  , version=__SCREAMING_SNAKE_CASE  , description="""This part of my dataset covers a second domain""" ),
		]

		lowerCamelCase							=		"""first_domain"""  # It's not mandatory to have a default configuration. Just use one if it make sense.



		def 	lowerCAmelCase							(	self							:       str	)		->       Optional[Any]:






				"""simple docstring"""







				if self.config.name == "first_domain":  # This is the name of the configuration selected in BUILDER_CONFIGS above
						snake_case   :    Union[str, Any]			       =		datasets.Features(
						    {
						        '''sentence''': datasets.Value('''string'''	),
						        '''option1''': datasets.Value('''string'''	),
						        '''answer''': datasets.Value('''string'''	)
						        # These are the features of your dataset like images, labels ...
						    }	)
				else:  # This is an example to show how to have different features for "first_domain" and "second_domain"
						snake_case   :    Tuple			       =		datasets.Features(
						    {
						        '''sentence''': datasets.Value('''string'''	),
						        '''option2''': datasets.Value('''string'''	),
						        '''second_domain_answer''': datasets.Value('''string'''	)
						        # These are the features of your dataset like images, labels ...
						    }	)
				return datasets.DatasetInfo(
				    # This is the description that will appear on the datasets page.
				    description=_DESCRIPTION   ,     features=UpperCamelCase__   ,     homepage=_HOMEPAGE   ,     license=_LICENSE   ,     citation=_CITATION   ,     )



		def 	lowerCAmelCase							(	self							:       List[str]   ,     UpperCamelCase__							:       Dict	)		->       List[str]:






				"""simple docstring"""







				snake_case   :    Optional[Any]			       =		_URLS[self.config.name]
				snake_case   :    Optional[Any]			       =		dl_manager.download_and_extract(UpperCamelCase__	)
				return [
				    datasets.SplitGenerator(
				        name=datasets.Split.TRAIN   ,     gen_kwargs={
				            '''filepath''': os.path.join(UpperCamelCase__   ,     '''train.jsonl'''	),
				            '''split''': '''train''',
				        }   ,     ),
				    datasets.SplitGenerator(
				        name=datasets.Split.VALIDATION   ,     gen_kwargs={
				            '''filepath''': os.path.join(UpperCamelCase__   ,     '''dev.jsonl'''	),
				            '''split''': '''dev''',
				        }   ,     ),
				    datasets.SplitGenerator(
				        name=datasets.Split.TEST   ,     gen_kwargs={
				            '''filepath''': os.path.join(UpperCamelCase__   ,     '''test.jsonl'''	),
				            '''split''': '''test'''
				        }   ,     ),
				]



		def 	lowerCAmelCase							(	self							:       List[Any]   ,     UpperCamelCase__							:       Union[str, Any]   ,     UpperCamelCase__							:       Any	)		->       List[str]:






				"""simple docstring"""







				with open(UpperCamelCase__   ,     encoding='''utf-8'''	) as f:
						for key, row in enumerate(UpperCamelCase__	):
								snake_case   :    Tuple			       =		json.loads(UpperCamelCase__	)
								if self.config.name == "first_domain":
										# Yields examples as (key, example) tuples
										yield key, {
										    "sentence": data["sentence"],
										    "option1": data["option1"],
										    "answer": "" if split == "test" else data["answer"],
										}
								else:
										yield key, {
										    "sentence": data["sentence"],
										    "option2": data["option2"],
										    "second_domain_answer": "" if split == "test" else data["second_domain_answer"],
										}




'''simple docstring'''
import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin


if is_torch_available():
						import torch

if is_vision_available():
						from PIL import Image

						from transformers import BlipImageProcessor






class      snake_case__    (	unittest.TestCase ):







		"""simple docstring"""

		def __init__(	self							:       List[str]   ,     UpperCamelCase__							:       Union[str, Any]   ,     UpperCamelCase__							:       Optional[Any]=7   ,     UpperCamelCase__							:       Union[str, Any]=3   ,     UpperCamelCase__							:       Tuple=18   ,     UpperCamelCase__							:       Union[str, Any]=30   ,     UpperCamelCase__							:       Dict=400   ,     UpperCamelCase__							:       Tuple=True   ,     UpperCamelCase__							:       Optional[Any]=None   ,     UpperCamelCase__							:       Any=True   ,     UpperCamelCase__							:       Dict=False   ,     UpperCamelCase__							:       Dict=[0.48_145_466, 0.4_578_275, 0.40_821_073]   ,     UpperCamelCase__							:       int=[0.26_862_954, 0.26_130_258, 0.27_577_711]   ,     UpperCamelCase__							:       str=True   ,     )		->       Any:






				"""simple docstring"""







				snake_case   :    Dict			       =		size if size is not None else {'''height''': 20, '''width''': 20}
				snake_case   :    Union[str, Any]			       =		parent
				snake_case   :    Optional[int]			       =		batch_size
				snake_case   :    Dict			       =		num_channels
				snake_case   :    List[Any]			       =		image_size
				snake_case   :    List[Any]			       =		min_resolution
				snake_case   :    Dict			       =		max_resolution
				snake_case   :    Dict			       =		do_resize
				snake_case   :    Optional[int]			       =		size
				snake_case   :    Dict			       =		do_normalize
				snake_case   :    Tuple			       =		image_mean
				snake_case   :    Optional[int]			       =		image_std
				snake_case   :    int			       =		do_pad
				snake_case   :    List[Any]			       =		do_convert_rgb



		def 	lowerCAmelCase							(	self							:       str	)		->       Optional[int]:






				"""simple docstring"""







				return {
				    "do_resize": self.do_resize,
				    "size": self.size,
				    "do_normalize": self.do_normalize,
				    "image_mean": self.image_mean,
				    "image_std": self.image_std,
				    "do_convert_rgb": self.do_convert_rgb,
				    "do_pad": self.do_pad,
				}



		def 	lowerCAmelCase							(	self							:       str   ,     UpperCamelCase__							:       Optional[int]=False   ,     UpperCamelCase__							:       Tuple=False   ,     UpperCamelCase__							:       Union[str, Any]=False	)		->       List[str]:






				"""simple docstring"""







				assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"

				if equal_resolution:
						snake_case   :    Any			       =		[]
						for i in range(self.batch_size	):
								image_inputs.append(
								    np.random.randint(
								        255   ,     size=(self.num_channels, self.max_resolution, self.max_resolution)   ,     dtype=np.uinta	)	)
				else:
						snake_case   :    Union[str, Any]			       =		[]
						for i in range(self.batch_size	):
								snake_case       ,snake_case   :    List[Any]			       =		np.random.choice(np.arange(self.min_resolution   ,     self.max_resolution	)   ,     2	)
								image_inputs.append(np.random.randint(255   ,     size=(self.num_channels, width, height)   ,     dtype=np.uinta	)	)

				if not numpify and not torchify:
						# PIL expects the channel dimension as last dimension
						snake_case   :    Optional[int]			       =		[Image.fromarray(np.moveaxis(UpperCamelCase__   ,     0   ,     -1	)	) for x in image_inputs]

				if torchify:
						snake_case   :    Optional[Any]			       =		[torch.from_numpy(UpperCamelCase__	) for x in image_inputs]

				return image_inputs







@require_torch
@require_vision
class      snake_case__    (	__SCREAMING_SNAKE_CASE  , unittest.TestCase ):







		"""simple docstring"""

		lowerCamelCase							=		BlipImageProcessor if is_vision_available() else None



		def 	lowerCAmelCase							(	self							:       Dict	)		->       Optional[int]:






				"""simple docstring"""







				snake_case   :    Union[str, Any]			       =		BlipImageProcessingTester(self	)



		@property
		def 	lowerCAmelCase							(	self							:       Any	)		->       Union[str, Any]:






				"""simple docstring"""







				return self.image_processor_tester.prepare_image_processor_dict()



		def 	lowerCAmelCase							(	self							:       Optional[Any]	)		->       Any:






				"""simple docstring"""







				snake_case   :    Dict			       =		self.image_processing_class(**self.image_processor_dict	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''do_resize'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''size'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''do_normalize'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''image_mean'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''image_std'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''do_convert_rgb'''	)	)



		def 	lowerCAmelCase							(	self							:       Any	)		->       Dict:






				"""simple docstring"""







				pass



		def 	lowerCAmelCase							(	self							:       List[str]	)		->       Tuple:






				"""simple docstring"""







				snake_case   :    Optional[Any]			       =		self.image_processing_class(**self.image_processor_dict	)
				# create random PIL images
				snake_case   :    Union[str, Any]			       =		self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase__	)
				for image in image_inputs:
						self.assertIsInstance(UpperCamelCase__   ,     Image.Image	)

				# Test not batched input
				snake_case   :    Optional[int]			       =		image_processor(image_inputs[0]   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        1,
				        self.image_processor_tester.num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )

				# Test batched
				snake_case   :    int			       =		image_processor(UpperCamelCase__   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        self.image_processor_tester.batch_size,
				        self.image_processor_tester.num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )



		def 	lowerCAmelCase							(	self							:       List[str]	)		->       Tuple:






				"""simple docstring"""







				snake_case   :    Any			       =		self.image_processing_class(**self.image_processor_dict	)
				# create random numpy tensors
				snake_case   :    List[str]			       =		self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase__   ,     numpify=UpperCamelCase__	)
				for image in image_inputs:
						self.assertIsInstance(UpperCamelCase__   ,     np.ndarray	)

				# Test not batched input
				snake_case   :    Dict			       =		image_processor(image_inputs[0]   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        1,
				        self.image_processor_tester.num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )

				# Test batched
				snake_case   :    Dict			       =		image_processor(UpperCamelCase__   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        self.image_processor_tester.batch_size,
				        self.image_processor_tester.num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )



		def 	lowerCAmelCase							(	self							:       Dict	)		->       Union[str, Any]:






				"""simple docstring"""







				snake_case   :    Union[str, Any]			       =		self.image_processing_class(**self.image_processor_dict	)
				# create random PyTorch tensors
				snake_case   :    List[Any]			       =		self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase__   ,     torchify=UpperCamelCase__	)
				for image in image_inputs:
						self.assertIsInstance(UpperCamelCase__   ,     torch.Tensor	)

				# Test not batched input
				snake_case   :    List[str]			       =		image_processor(image_inputs[0]   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        1,
				        self.image_processor_tester.num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )

				# Test batched
				snake_case   :    str			       =		image_processor(UpperCamelCase__   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        self.image_processor_tester.batch_size,
				        self.image_processor_tester.num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )







@require_torch
@require_vision
class      snake_case__    (	__SCREAMING_SNAKE_CASE  , unittest.TestCase ):







		"""simple docstring"""

		lowerCamelCase							=		BlipImageProcessor if is_vision_available() else None



		def 	lowerCAmelCase							(	self							:       Tuple	)		->       Union[str, Any]:






				"""simple docstring"""







				snake_case   :    Union[str, Any]			       =		BlipImageProcessingTester(self   ,     num_channels=4	)
				snake_case   :    Optional[int]			       =		3



		@property
		def 	lowerCAmelCase							(	self							:       Optional[int]	)		->       Tuple:






				"""simple docstring"""







				return self.image_processor_tester.prepare_image_processor_dict()



		def 	lowerCAmelCase							(	self							:       List[Any]	)		->       Any:






				"""simple docstring"""







				snake_case   :    Union[str, Any]			       =		self.image_processing_class(**self.image_processor_dict	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''do_resize'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''size'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''do_normalize'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''image_mean'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''image_std'''	)	)
				self.assertTrue(hasattr(UpperCamelCase__   ,     '''do_convert_rgb'''	)	)



		def 	lowerCAmelCase							(	self							:       Optional[Any]	)		->       List[str]:






				"""simple docstring"""







				pass



		def 	lowerCAmelCase							(	self							:       Optional[int]	)		->       Any:






				"""simple docstring"""







				snake_case   :    Optional[Any]			       =		self.image_processing_class(**self.image_processor_dict	)
				# create random PIL images
				snake_case   :    Tuple			       =		self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase__	)
				for image in image_inputs:
						self.assertIsInstance(UpperCamelCase__   ,     Image.Image	)

				# Test not batched input
				snake_case   :    int			       =		image_processor(image_inputs[0]   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        1,
				        self.expected_encoded_image_num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )

				# Test batched
				snake_case   :    Union[str, Any]			       =		image_processor(UpperCamelCase__   ,     return_tensors='''pt'''	).pixel_values
				self.assertEqual(
				    encoded_images.shape   ,     (
				        self.image_processor_tester.batch_size,
				        self.expected_encoded_image_num_channels,
				        self.image_processor_tester.size['''height'''],
				        self.image_processor_tester.size['''width'''],
				    )   ,     )


