"""simple docstring"""







import os

import pytest
import yaml

from datasets.features.features import Features, Value
from datasets.info import DatasetInfo, DatasetInfosDict
@pytest.mark.parametrize(
    'files'      ,							[
        ['full:README.md', 'dataset_infos.json'],
        ['empty:README.md', 'dataset_infos.json'],
        ['dataset_infos.json'],
        ['full:README.md'],
    ]      ,							)
def   __UpperCAmelCase    (   UpperCAmelCase_   :    Any      ,							UpperCAmelCase_   :    Optional[int]  )							->      Optional[int]:

	'''simple docstring'''





	__snake_case      :							Tuple						=			tmp_path_factory.mktemp('dset_infos_dir'  )
	if "full:README.md" in files:
		with open(dataset_infos_dir / 'README.md'      ,							'w'  ) as f:
			f.write('---\ndataset_info:\n  dataset_size: 42\n---'  )
	if "empty:README.md" in files:
		with open(dataset_infos_dir / 'README.md'      ,							'w'  ) as f:
			f.write(''  )
    # we want to support dataset_infos.json for backward compatibility
	if "dataset_infos.json" in files:
		with open(dataset_infos_dir / 'dataset_infos.json'      ,							'w'  ) as f:
			f.write('{"default": {"dataset_size": 42}}'  )
	__snake_case      :							Tuple						=			DatasetInfosDict.from_directory(UpperCAmelCase_  )
	assert dataset_infos
	assert dataset_infos["default"].dataset_size == 42
@pytest.mark.parametrize(
    'dataset_info'      ,							[
        DatasetInfo(),
        DatasetInfo(
            description='foo'      ,							features=Features({'a': Value('int32'  )}  )      ,							builder_name='builder'      ,							config_name='config'      ,							version='1.0.0'      ,							splits=[{'name': 'train'}]      ,							download_size=42      ,							),
    ]      ,							)
def   __UpperCAmelCase    (   UpperCAmelCase_   :    Any      ,							UpperCAmelCase_   :    DatasetInfo  )							->      List[Any]:

	'''simple docstring'''





	__snake_case      :							List[str]						=			str(UpperCAmelCase_  )
	dataset_info.write_to_directory(UpperCAmelCase_  )
	__snake_case      :							Dict						=			DatasetInfo.from_directory(UpperCAmelCase_  )
	assert dataset_info == reloaded
	assert os.path.exists(os.path.join(UpperCAmelCase_      ,							'dataset_info.json'  )  )
def   __UpperCAmelCase    (   )							->      Optional[int]:

	'''simple docstring'''





	__snake_case      :							Optional[int]						=			DatasetInfo(
	    description='foo'      ,							citation='bar'      ,							homepage='https://foo.bar'      ,							license='CC0'      ,							features=Features({'a': Value('int32'  )}  )      ,							post_processed={}      ,							supervised_keys=()      ,							task_templates=[]      ,							builder_name='builder'      ,							config_name='config'      ,							version='1.0.0'      ,							splits=[{'name': 'train', 'num_examples': 42}]      ,							download_checksums={}      ,							download_size=13_37      ,							post_processing_size=4_42      ,							dataset_size=12_34      ,							size_in_bytes=13_37 + 4_42 + 12_34      ,							)
	__snake_case      :							Dict						=			dataset_info._to_yaml_dict()
	assert sorted(UpperCAmelCase_  ) == sorted(DatasetInfo._INCLUDED_INFO_IN_YAML  )
	for key in DatasetInfo._INCLUDED_INFO_IN_YAML:
		assert key in dataset_info_yaml_dict
		assert isinstance(dataset_info_yaml_dict[key]      ,							(list, dict, int, str)  )
	__snake_case      :							Any						=			yaml.safe_dump(UpperCAmelCase_  )
	__snake_case      :							Optional[int]						=			yaml.safe_load(UpperCAmelCase_  )
	assert dataset_info_yaml_dict == reloaded
def   __UpperCAmelCase    (   )							->      str:

	'''simple docstring'''





	__snake_case      :							Optional[int]						=			DatasetInfo()
	__snake_case      :							Union[str, Any]						=			dataset_info._to_yaml_dict()
	assert dataset_info_yaml_dict == {}

@pytest.mark.parametrize(
    'dataset_infos_dict'      ,							[
        DatasetInfosDict(),
        DatasetInfosDict({'default': DatasetInfo()}  ),
        DatasetInfosDict({'my_config_name': DatasetInfo()}  ),
        DatasetInfosDict(
            {
                'default': DatasetInfo(
                    description='foo'      ,							features=Features({'a': Value('int32'  )}  )      ,							builder_name='builder'      ,							config_name='config'      ,							version='1.0.0'      ,							splits=[{'name': 'train'}]      ,							download_size=42      ,							)
            }  ),
        DatasetInfosDict(
            {
                'v1': DatasetInfo(dataset_size=42  ),
                'v2': DatasetInfo(dataset_size=13_37  ),
            }  ),
    ]      ,							)
def   __UpperCAmelCase    (   UpperCAmelCase_   :    str      ,							UpperCAmelCase_   :    DatasetInfosDict  )							->      Dict:

	'''simple docstring'''





	__snake_case      :							Any						=			str(UpperCAmelCase_  )
	dataset_infos_dict.write_to_directory(UpperCAmelCase_  )
	__snake_case      :							List[str]						=			DatasetInfosDict.from_directory(UpperCAmelCase_  )

	# the config_name of the dataset_infos_dict take over the attribute
	for config_name, dataset_info in dataset_infos_dict.items():
		__snake_case      :							Dict						=			config_name
		# the yaml representation doesn't include fields like description or citation
		# so we just test that we can recover what we can from the yaml
		__snake_case      :							Tuple						=			DatasetInfo._from_yaml_dict(dataset_info._to_yaml_dict()  )
	assert dataset_infos_dict == reloaded

	if dataset_infos_dict:
		assert os.path.exists(os.path.join(UpperCAmelCase_      ,							'README.md'  )  )






"""simple docstring"""







def   __UpperCAmelCase    (   UpperCAmelCase_   :    list      ,							UpperCAmelCase_   :    int      ,							UpperCAmelCase_   :    int = 0      ,							UpperCAmelCase_   :    int = 0  )							->      int:

	'''simple docstring'''





	__snake_case      :							str						=			right or len(UpperCAmelCase_  ) - 1
	if left > right:
		return -1
	elif list_data[left] == key:
		return left
	elif list_data[right] == key:
		return right
	else:
		return search(UpperCAmelCase_      ,							UpperCAmelCase_      ,							left + 1      ,							right - 1  )


if __name__ == "__main__":
	import doctest

	doctest.testmod()





