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
lowerCAmelCase__					=				'\\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
lowerCAmelCase__					=				'\\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
lowerCAmelCase__					=				''

# TODO: Add the licence for the dataset here if you can find it
lowerCAmelCase__					=				''

# 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)
lowerCAmelCase__					=				{
    'first_domain': 'https://huggingface.co/great-new-dataset-first_domain.zip',
    'second_domain': 'https://huggingface.co/great-new-dataset-second_domain.zip',
}
class        a_				(		datasets.GeneratorBasedBuilder		):






 '''simple docstring'''






 UpperCAmelCase_							=      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')
 UpperCAmelCase_							=      [
     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'		),
 ]

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




 def 	__snake_case		(    self      :						Union[str, Any]):







        '''simple docstring'''



        if self.config.name == "first_domain":  # This is the name of the configuration selected in BUILDER_CONFIGS above
               lowerCAmelCase__  			=      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"
               lowerCAmelCase__  			=      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=lowercase__    ,					homepage=_HOMEPAGE    ,					license=_LICENSE    ,					citation=_CITATION    ,					)




 def 	__snake_case		(    self      :						List[str]    ,					lowercase__      :						List[Any]):







        '''simple docstring'''



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




 def 	__snake_case		(    self      :						str    ,					lowercase__      :						List[str]    ,					lowercase__      :						List[str]):







        '''simple docstring'''



        with open(lowercase__    ,					encoding='utf-8') as f:
               for key, row in enumerate(lowercase__):
                      lowerCAmelCase__  			=      json.loads(lowercase__)
                      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"],
                             }

def    __lowerCamelCase	(		lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__			):
       if target == 0:
              answer.append(path.copy()			)
       else:
              for index in range(lowerCAmelCase__			,						len(lowerCAmelCase__			)			):
                     if target >= candidates[index]:
                            path.append(candidates[index]			)
                            backtrack(lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__			,						target - candidates[index]			,						lowerCAmelCase__			)
                            path.pop(len(lowerCAmelCase__			) - 1			)






def    __lowerCamelCase	(		lowerCAmelCase__			,						lowerCAmelCase__			):
       lowerCAmelCase__  			=      []  # type: list[int]
       lowerCAmelCase__  			=      []  # type: list[int]
       backtrack(lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__			,						lowerCAmelCase__			,						0			)
       return answer






def    __lowerCamelCase	(		):
       print(combination_sum([-8, 2.3, 0]			,						1			)			)


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    main()
