"""simple docstring"""







from __future__ import annotations



def 			lowercase__(       __SCREAMING_SNAKE_CASE							:     list[int]      ):  # This function is recursive
     lowercase_	:				Any													=	len(__SCREAMING_SNAKE_CASE      )
     # If the array contains only one element, we return it (it's the stop condition of
     # recursion)
     if array_length <= 1:
          return array
          # Else
     lowercase_	:				Optional[Any]													=	array[0]
     lowercase_	:				str													=	False
     lowercase_	:				Dict													=	1
     lowercase_	:				list[int]													=	[]
     while not is_found and i < array_length:
          if array[i] < pivot:
               lowercase_	:				Dict													=	True
               lowercase_	:				Dict													=	[element for element in array[i:] if element >= array[i]]
               lowercase_	:				str													=	longest_subsequence(__SCREAMING_SNAKE_CASE      )
               if len(__SCREAMING_SNAKE_CASE      ) > len(__SCREAMING_SNAKE_CASE      ):
                    lowercase_	:				Dict													=	temp_array
          else:
               i += 1

     lowercase_	:				str													=	[element for element in array[1:] if element >= pivot]
     lowercase_	:				Dict													=	[pivot, *longest_subsequence(__SCREAMING_SNAKE_CASE      )]
     if len(__SCREAMING_SNAKE_CASE      ) > len(__SCREAMING_SNAKE_CASE      ):
          return temp_array
     else:
          return longest_subseq


if __name__ == "__main__":
       import doctest

       doctest.testmod()


"""simple docstring"""







from collections import Counter
from pathlib import Path
from typing import Optional, Tuple

import yaml







class        UpperCamelCase		(			yaml.SafeLoader  ):
   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase			)	->      Optional[int]:


        '''simple docstring'''


        lowercase_	:				str													=	[self.constructed_objects[key_node] for key_node, _ in node.value]
        lowercase_	:				str													=	[tuple(__UpperCamelCase			) if isinstance(__UpperCamelCase     ,__UpperCamelCase			) else key for key in keys]
        lowercase_	:				List[Any]													=	Counter(__UpperCamelCase			)
        lowercase_	:				str													=	[key for key in counter if counter[key] > 1]
        if duplicate_keys:
             raise TypeError(f'''Got duplicate yaml keys: {duplicate_keys}'''			)







   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase     ,__UpperCamelCase=False			)	->      List[Any]:


        '''simple docstring'''


        lowercase_	:				Optional[int]													=	super().construct_mapping(__UpperCamelCase     ,deep=__UpperCamelCase			)
        self._check_no_duplicates_on_constructed_node(__UpperCamelCase			)
        return mapping






def 			lowercase__(       __SCREAMING_SNAKE_CASE							:     str      ):
     lowercase_	:				Tuple													=	list(readme_content.splitlines()      )
     if full_content and full_content[0] == "---" and "---" in full_content[1:]:
          lowercase_	:				Dict													=	full_content[1:].index('---'      ) + 1
          lowercase_	:				Optional[int]													=	'\n'.join(full_content[1:sep_idx]      )
          return yamlblock, "\n".join(full_content[sep_idx + 1 :]      )

     return None, "\n".join(__SCREAMING_SNAKE_CASE      )







class        UpperCamelCase		(			lowercase_  ):
   # class attributes
   lowercase							=  {'train_eval_index'}  # train-eval-index in the YAML metadata
   @classmethod
   def 			_UpperCAmelCase   (			cls     ,__UpperCamelCase			)	->      "DatasetMetadata":


        '''simple docstring'''


        with open(__UpperCamelCase     ,encoding='utf-8'			) as readme_file:
             lowercase_							,  lowercase_	:				Optional[int]													=	_split_yaml_from_readme(readme_file.read()			)
        if yaml_string is not None:
             return cls.from_yaml_string(__UpperCamelCase			)
        else:
             return cls()
   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase			)	->      List[Any]:


        '''simple docstring'''


        if path.exists():
             with open(__UpperCamelCase     ,encoding='utf-8'			) as readme_file:
                  lowercase_	:				Dict													=	readme_file.read()
        else:
             lowercase_	:				int													=	None
        lowercase_	:				Any													=	self._to_readme(__UpperCamelCase			)
        with open(__UpperCamelCase     ,'w'     ,encoding='utf-8'			) as readme_file:
             readme_file.write(__UpperCamelCase			)
   def 			_UpperCAmelCase   (			self     ,__UpperCamelCase = None			)	->      str:


        '''simple docstring'''


        if readme_content is not None:
             lowercase_							,  lowercase_	:				Optional[Any]													=	_split_yaml_from_readme(__UpperCamelCase			)
             lowercase_	:				Optional[Any]													=	'---\n' + self.to_yaml_string() + '---\n' + content
        else:
             lowercase_	:				Tuple													=	'---\n' + self.to_yaml_string() + '---\n'
        return full_content
   @classmethod
   def 			_UpperCAmelCase   (			cls     ,__UpperCamelCase			)	->      "DatasetMetadata":


        '''simple docstring'''


        lowercase_	:				List[str]													=	yaml.load(__UpperCamelCase     ,Loader=_NoDuplicateSafeLoader			) or {}

        # Convert the YAML keys to DatasetMetadata fields
        lowercase_	:				Dict													=	{
            (key.replace('-'     ,'_'			) if key.replace('-'     ,'_'			) in cls._FIELDS_WITH_DASHES else key): value
            for key, value in metadata_dict.items()
        }
        return cls(**__UpperCamelCase			)







   def 			_UpperCAmelCase   (			self			)	->      str:


        '''simple docstring'''


        return yaml.safe_dump(
            {
                (key.replace('_'     ,'-'			) if key in self._FIELDS_WITH_DASHES else key): value
                for key, value in self.items()
            }     ,sort_keys=__UpperCamelCase     ,allow_unicode=__UpperCamelCase     ,encoding='utf-8'     ,).decode('utf-8'			)






__SCREAMING_SNAKE_CASE    	={
    "image-classification": [],
    "translation": [],
    "image-segmentation": [],
    "fill-mask": [],
    "automatic-speech-recognition": [],
    "token-classification": [],
    "sentence-similarity": [],
    "audio-classification": [],
    "question-answering": [],
    "summarization": [],
    "zero-shot-classification": [],
    "table-to-text": [],
    "feature-extraction": [],
    "other": [],
    "multiple-choice": [],
    "text-classification": [],
    "text-to-image": [],
    "text2text-generation": [],
    "zero-shot-image-classification": [],
    "tabular-classification": [],
    "tabular-regression": [],
    "image-to-image": [],
    "tabular-to-text": [],
    "unconditional-image-generation": [],
    "text-retrieval": [],
    "text-to-speech": [],
    "object-detection": [],
    "audio-to-audio": [],
    "text-generation": [],
    "conversational": [],
    "table-question-answering": [],
    "visual-question-answering": [],
    "image-to-text": [],
    "reinforcement-learning": [],
    "voice-activity-detection": [],
    "time-series-forecasting": [],
    "document-question-answering": [],
}


if __name__ == "__main__":
       from argparse import ArgumentParser

       __SCREAMING_SNAKE_CASE    	=ArgumentParser(usage="Validate the yaml metadata block of a README.md file.")
       ap.add_argument("readme_filepath")
       __SCREAMING_SNAKE_CASE    	=ap.parse_args()

       __SCREAMING_SNAKE_CASE    	=Path(args.readme_filepath)
       __SCREAMING_SNAKE_CASE    	=DatasetMetadata.from_readme(readme_filepath)
       print(dataset_metadata)
       dataset_metadata.to_readme(readme_filepath)

