






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 							lowerCamelCase__ (       __lowerCamelCase     :	Union[str, Any]    ,						__lowerCamelCase     :	Optional[Any]						):
  __UpperCAmelCase				:      str	 =    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}}"""						)
  __UpperCAmelCase				:      Optional[Any]	 =    DatasetInfosDict.from_directory(__lowerCamelCase						)
  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 							lowerCamelCase__ (       __lowerCamelCase     :	Optional[Any]    ,						__lowerCamelCase     :	DatasetInfo						):
  __UpperCAmelCase				:      Optional[Any]	 =    str(__lowerCamelCase						)
  dataset_info.write_to_directory(__lowerCamelCase						)
  __UpperCAmelCase				:      Union[str, Any]	 =    DatasetInfo.from_directory(__lowerCamelCase						)
  assert dataset_info == reloaded
  assert os.path.exists(os.path.join(__lowerCamelCase    ,						"""dataset_info.json"""						)						)






def 							lowerCamelCase__ (       ):
  __UpperCAmelCase				:      Tuple	 =    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=1337    ,						post_processing_size=442    ,						dataset_size=1234    ,						size_in_bytes=1337 + 442 + 1234    ,						)
  __UpperCAmelCase				:      Optional[Any]	 =    dataset_info._to_yaml_dict()
  assert sorted(__lowerCamelCase						) == 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)						)
  __UpperCAmelCase				:      Dict	 =    yaml.safe_dump(__lowerCamelCase						)
  __UpperCAmelCase				:      Dict	 =    yaml.safe_load(__lowerCamelCase						)
  assert dataset_info_yaml_dict == reloaded






def 							lowerCamelCase__ (       ):
  __UpperCAmelCase				:      Union[str, Any]	 =    DatasetInfo()
  __UpperCAmelCase				:      Tuple	 =    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=1337						),
            }						),
    ]    ,						)
def 							lowerCamelCase__ (       __lowerCamelCase     :	str    ,						__lowerCamelCase     :	DatasetInfosDict						):
  __UpperCAmelCase				:      str	 =    str(__lowerCamelCase						)
  dataset_infos_dict.write_to_directory(__lowerCamelCase						)
  __UpperCAmelCase				:      int	 =    DatasetInfosDict.from_directory(__lowerCamelCase						)

  # the config_name of the dataset_infos_dict take over the attribute
  for config_name, dataset_info in dataset_infos_dict.items():
    __UpperCAmelCase				:      List[Any]	 =    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
    __UpperCAmelCase				:      Any	 =    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(__lowerCamelCase    ,						"""README.md"""						)						)









from typing import Any



def 						A_							(	_lowerCAmelCase	)		->					list[Any]:
 if not input_list:
  return []
 UpperCamelCase      :   List[str]			      =  [input_list.count(_lowerCAmelCase	) for value in input_list]
 UpperCamelCase      :   Dict			      =  max(_lowerCAmelCase	)  # Gets the maximum count in the input list.
 # Gets values of modes
 return sorted({input_list[i] for i, value in enumerate(_lowerCAmelCase	) if value == y}	)


if __name__ == "__main__":
    import doctest

    doctest.testmod()
