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

import yaml





class       __A(				yaml.SafeLoader       ):

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



					def    lowercase__      (	self					:     Dict   ,					__UpperCamelCase					:     int   ,					__UpperCamelCase					:     Dict=False   ):
												lowerCamelCase_							  =					super().construct_mapping(__UpperCamelCase   ,					deep=__UpperCamelCase   )
												self._check_no_duplicates_on_constructed_node(__UpperCamelCase   )
												return mapping



def      __lowerCAmelCase						(							UpperCAmelCase__				:      str       )  ->    Tuple[Optional[str], str]:
							lowerCamelCase_							  =					list(readme_content.splitlines()       )
							if full_content and full_content[0] == "---" and "---" in full_content[1:]:
														lowerCamelCase_							  =					full_content[1:].index("""---"""       ) + 1
														lowerCamelCase_							  =					"""\n""".join(full_content[1:sep_idx]       )
														return yamlblock, "\n".join(full_content[sep_idx + 1 :]       )

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





class       __A(				UpperCAmelCase       ):
					# class attributes
					SCREAMING_SNAKE_CASE			    =    {'''train_eval_index'''}  # train-eval-index in the YAML metadata

					@classmethod
					def    lowercase__      (	cls					:     List[Any]   ,					__UpperCamelCase					:     Path   ):
												with open(__UpperCamelCase   ,					encoding="""utf-8"""   ) as readme_file:
																			lowerCamelCase_  ,   lowerCamelCase_							  =					_split_yaml_from_readme(readme_file.read()   )
												if yaml_string is not None:
																			return cls.from_yaml_string(__UpperCamelCase   )
												else:
																			return cls()

					def    lowercase__      (	self					:     Optional[Any]   ,					__UpperCamelCase					:     Path   ):
												if path.exists():
																			with open(__UpperCamelCase   ,					encoding="""utf-8"""   ) as readme_file:
																										lowerCamelCase_							  =					readme_file.read()
												else:
																			lowerCamelCase_							  =					None
												lowerCamelCase_							  =					self._to_readme(__UpperCamelCase   )
												with open(__UpperCamelCase   ,					"""w"""   ,					encoding="""utf-8"""   ) as readme_file:
																			readme_file.write(__UpperCamelCase   )

					def    lowercase__      (	self					:     str   ,					__UpperCamelCase					:     Optional[str] = None   ):
												if readme_content is not None:
																			lowerCamelCase_  ,   lowerCamelCase_							  =					_split_yaml_from_readme(__UpperCamelCase   )
																			lowerCamelCase_							  =					"""---\n""" + self.to_yaml_string() + """---\n""" + content
												else:
																			lowerCamelCase_							  =					"""---\n""" + self.to_yaml_string() + """---\n"""
												return full_content

					@classmethod
					def    lowercase__      (	cls					:     List[Any]   ,					__UpperCamelCase					:     str   ):
												lowerCamelCase_							  =					yaml.load(__UpperCamelCase   ,					Loader=_NoDuplicateSafeLoader   ) or {}

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



					def    lowercase__      (	self					:     Optional[Any]   ):
												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"""   )
lowercase        =  {
    '''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

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

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






import numpy as np
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
from sklearn.metrics import ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier



def      __lowerCAmelCase						(							UpperCAmelCase__				:      dict       )  ->    tuple:
							return (data["data"], data["target"])



def      __lowerCAmelCase						(							UpperCAmelCase__				:      np.ndarray			,				UpperCAmelCase__				:      np.ndarray       )  ->    XGBClassifier:
							lowerCamelCase_							  =					XGBClassifier()
							classifier.fit(UpperCAmelCase__			,				UpperCAmelCase__       )
							return classifier



def      __lowerCAmelCase						(							)  ->    None:
							lowerCamelCase_							  =					load_iris()
							lowerCamelCase_  ,   lowerCamelCase_							  =					data_handling(UpperCAmelCase__       )
							lowerCamelCase_  ,   lowerCamelCase_  ,   lowerCamelCase_  ,   lowerCamelCase_							  =					train_test_split(
							    UpperCAmelCase__			,				UpperCAmelCase__			,				test_size=0.2_5       )

							lowerCamelCase_							  =					iris["""target_names"""]

							# Create an XGBoost Classifier from the training data
							lowerCamelCase_							  =					xgboost(UpperCAmelCase__			,				UpperCAmelCase__       )

							# Display the confusion matrix of the classifier with both training and test sets
							ConfusionMatrixDisplay.from_estimator(
							    UpperCAmelCase__			,				UpperCAmelCase__			,				UpperCAmelCase__			,				display_labels=UpperCAmelCase__			,				cmap="""Blues"""			,				normalize="""true"""			,				)
							plt.title("""Normalized Confusion Matrix - IRIS Dataset"""       )
							plt.show()


if __name__ == "__main__":
		import doctest

		doctest.testmod(verbose=True)
		main()





