
'''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 	A  (   UpperCamelCase_       :  Tuple    ,						UpperCamelCase_       :  Optional[Any]   )       ->							List[Any]:







			'''simple docstring'''



			lowerCAmelCase__										=				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}}"   )
			lowerCAmelCase__										=				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 	A  (   UpperCamelCase_       :  Optional[Any]    ,						UpperCamelCase_       :  DatasetInfo   )       ->							Optional[int]:







			'''simple docstring'''



			lowerCAmelCase__										=				str(UpperCamelCase_   )
			dataset_info.write_to_directory(UpperCamelCase_   )
			lowerCAmelCase__										=				DatasetInfo.from_directory(UpperCamelCase_   )
			assert dataset_info == reloaded
			assert os.path.exists(os.path.join(UpperCamelCase_    ,						"dataset_info.json"   )   )







def 	A  (   )       ->							List[Any]:







			'''simple docstring'''



			lowerCAmelCase__										=				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    ,						)
			lowerCAmelCase__										=				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)   )
			lowerCAmelCase__										=				yaml.safe_dump(UpperCamelCase_   )
			lowerCAmelCase__										=				yaml.safe_load(UpperCamelCase_   )
			assert dataset_info_yaml_dict == reloaded







def 	A  (   )       ->							str:







			'''simple docstring'''



			lowerCAmelCase__										=				DatasetInfo()
			lowerCAmelCase__										=				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 	A  (   UpperCamelCase_       :  Dict    ,						UpperCamelCase_       :  DatasetInfosDict   )       ->							Union[str, Any]:







			'''simple docstring'''



			lowerCAmelCase__										=				str(UpperCamelCase_   )
			dataset_infos_dict.write_to_directory(UpperCamelCase_   )
			lowerCAmelCase__										=				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():
						lowerCAmelCase__										=				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
						lowerCAmelCase__										=				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"   )   )












from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCAmelCase_           =	logging.get_logger(__name__)

UpperCAmelCase_           =	{
    "tiiuae/falcon-40b": "https://huggingface.co/tiiuae/falcon-40b/resolve/main/config.json",
    "tiiuae/falcon-7b": "https://huggingface.co/tiiuae/falcon-7b/resolve/main/config.json",
}




class 			__UpperCamelCase    (							A__    ):
     __A	:  Dict							  =   """falcon"""
     __A	:  Any							  =   ["""past_key_values"""]





     def __init__(     self				,							_UpperCamelCase=65024				,							_UpperCamelCase=4544				,							_UpperCamelCase=32				,							_UpperCamelCase=71				,							_UpperCamelCase=1e-5				,							_UpperCamelCase=0.02				,							_UpperCamelCase=True				,							_UpperCamelCase=0.0				,							_UpperCamelCase=0.0				,							_UpperCamelCase=None				,							_UpperCamelCase=False				,							_UpperCamelCase=False				,							_UpperCamelCase=True				,							_UpperCamelCase=True				,							_UpperCamelCase=False				,							_UpperCamelCase=11				,							_UpperCamelCase=11				,							**_UpperCamelCase				,							):
        _UpperCAmelCase           =   vocab_size
        # Backward compatibility with n_embed kwarg
        _UpperCAmelCase           =   kwargs.pop('''n_embed'''				,							_UpperCamelCase					)
        _UpperCAmelCase           =   hidden_size if n_embed is None else n_embed
        _UpperCAmelCase           =   num_hidden_layers
        _UpperCAmelCase           =   num_attention_heads
        _UpperCAmelCase           =   layer_norm_epsilon
        _UpperCAmelCase           =   initializer_range
        _UpperCAmelCase           =   use_cache
        _UpperCAmelCase           =   hidden_dropout
        _UpperCAmelCase           =   attention_dropout

        _UpperCAmelCase           =   bos_token_id
        _UpperCAmelCase           =   eos_token_id
        _UpperCAmelCase           =   num_attention_heads if num_kv_heads is None else num_kv_heads
        _UpperCAmelCase           =   alibi
        _UpperCAmelCase           =   new_decoder_architecture
        _UpperCAmelCase           =   multi_query  # Ignored when new_decoder_architecture is True
        _UpperCAmelCase           =   parallel_attn
        _UpperCAmelCase           =   bias

        super().__init__(bos_token_id=_UpperCamelCase				,							eos_token_id=_UpperCamelCase				,							**_UpperCamelCase					)





     @property
     def 		UpperCamelCase(     self					):
        return self.hidden_size // self.num_attention_heads





     @property
     def 		UpperCamelCase(     self					):
        return not self.alibi