

'''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
UpperCAmelCase							=					'''\
@InProceedings{huggingface:dataset,
title = {A great new dataset},
author={huggingface, Inc.
},
year={2020}
}
'''

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

# TODO: Add a link to an official homepage for the dataset here
UpperCAmelCase							=					''''''

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

# 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)
UpperCAmelCase							=					{
    '''first_domain''': '''https://huggingface.co/great-new-dataset-first_domain.zip''',
    '''second_domain''': '''https://huggingface.co/great-new-dataset-second_domain.zip''',
}


class 					lowerCAmelCase       ( datasets.GeneratorBasedBuilder				):
       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=A				,     description="This part of my dataset covers a first domain"				),
           datasets.BuilderConfig(name="second_domain"				,     version=A				,     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      snake_case				(							self     :	Optional[Any] ):







            """simple docstring"""







            if self.config.name == "first_domain":  # This is the name of the configuration selected in BUILDER_CONFIGS above
                 __lowercase     						=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"
                 __lowercase     						=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     :	Optional[int]  , __lowercase     :	List[str] ):







            """simple docstring"""







            __lowercase     						=_URLS[self.config.name]
            __lowercase     						=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     :	Tuple  , __lowercase     :	List[str]  , __lowercase     :	List[Any] ):







            """simple docstring"""







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





'''simple docstring'''

from __future__ import annotations

def 			__UpperCamelCase							(		lowercase__  :					list[int]	):






     '''simple docstring'''





     if not list_of_ints:
          return []

     if min(lowercase__	) < 0:
          raise ValueError('All numbers must be positive'	)

     __lowercase     						=max(len(bin(lowercase__	)[2:]	) for x in list_of_ints	)
     return _msd_radix_sort(lowercase__,   lowercase__	)

def 			__UpperCamelCase							(		lowercase__  :					list[int],   lowercase__  :					int	):






     '''simple docstring'''





     if bit_position == 0 or len(lowercase__	) in [0, 1]:
          return list_of_ints

     __lowercase     						=[]
     __lowercase     						=[]
     # Split numbers based on bit at bit_position from the right
     for number in list_of_ints:
          if (number >> (bit_position - 1)) & 1:
               # number has a one at bit bit_position
               ones.append(lowercase__	)
          else:
               # number has a zero at bit bit_position
               zeros.append(lowercase__	)

    # recursively split both lists further
     __lowercase     						=_msd_radix_sort(lowercase__,   bit_position - 1	)
     __lowercase     						=_msd_radix_sort(lowercase__,   bit_position - 1	)

     # recombine lists
     __lowercase     						=zeros
     res.extend(lowercase__	)

     return res

def 			__UpperCamelCase							(		lowercase__  :					list[int]	):






     '''simple docstring'''





     __lowercase     						=len(lowercase__	)
     if not list_of_ints or length == 1:
          return

     if min(lowercase__	) < 0:
          raise ValueError('All numbers must be positive'	)

     __lowercase     						=max(len(bin(lowercase__	)[2:]	) for x in list_of_ints	)
     _msd_radix_sort_inplace(lowercase__,   lowercase__,   0,   lowercase__	)

def 			__UpperCamelCase							(		lowercase__  :					list[int],   lowercase__  :					int,   lowercase__  :					int,   lowercase__  :					int	):






     '''simple docstring'''





     if bit_position == 0 or end_index - begin_index <= 1:
          return

     bit_position -= 1

     __lowercase     						=begin_index
     __lowercase     						=end_index - 1
     while i <= j:
          __lowercase     						=False
          if not (list_of_ints[i] >> bit_position) & 1:
               # found zero at the beginning
               i += 1
               __lowercase     						=True
          if (list_of_ints[j] >> bit_position) & 1:
               # found one at the end
               j -= 1
               __lowercase     						=True

          if changed:
               continue

          __lowercase						,       __lowercase     						=list_of_ints[j], list_of_ints[i]
          j -= 1
          if j != i:
               i += 1

     _msd_radix_sort_inplace(lowercase__,   lowercase__,   lowercase__,   lowercase__	)
     _msd_radix_sort_inplace(lowercase__,   lowercase__,   lowercase__,   lowercase__	)


if __name__ == "__main__":
       import doctest

       doctest.testmod()


