class _a       :

	'''simple docstring'''



	class _a       :

		'''simple docstring'''



		lowerCamelCase_   :      Dict       =	"""_prev""", """_data""", """_next"""

		def __init__(       self							,			__UpperCAmelCase							,			__UpperCAmelCase							,			__UpperCAmelCase   ):
				__A							:   int	  =				link_p
				__A							:   Optional[int]	  =				element
				__A							:   List[Any]	  =				link_n







		def 					__UpperCAmelCase(       self   ):
				return (
				    F" Prev -> {self._prev is not None}, Next -> {self._next is not None}"
				)


	def __init__(       self   ):
			__A							:   Union[str, Any]	  =				self._Node(__UpperCAmelCase							,			__UpperCAmelCase							,			__UpperCAmelCase   )
			__A							:   Tuple	  =				self._Node(__UpperCAmelCase							,			__UpperCAmelCase							,			__UpperCAmelCase   )
			__A							:   str	  =				self._trailer
			__A							:   str	  =				self._header
			__A							:   List[Any]	  =				0

	def __len__(       self   ):
			return self._size

	def 					__UpperCAmelCase(       self   ):
			return self.__len__() == 0

	def 					__UpperCAmelCase(       self							,			__UpperCAmelCase							,			__UpperCAmelCase							,			__UpperCAmelCase   ):
			# Create new_node by setting it's prev.link -> header
			# setting it's next.link -> trailer
			__A							:   Optional[int]	  =				self._Node(__UpperCAmelCase							,			__UpperCAmelCase							,			__UpperCAmelCase   )
			__A							:   List[str]	  =				new_node
			__A							:   Tuple	  =				new_node
			self._size += 1
			return self







	def 					__UpperCAmelCase(       self							,			__UpperCAmelCase   ):
			__A							:   Dict	  =				node._prev
			__A							:   List[Any]	  =				node._next

			__A							:   Any	  =				successor
			__A							:   Dict	  =				predecessor
			self._size -= 1
			__A							:   Dict	  =				node._data
			__A							:   Optional[Any]	  =				None
			del node
			return temp


class _a       (	_DoublyLinkedBase ):

	'''simple docstring'''



	def 					__UpperCAmelCase(       self   ):
			if self.is_empty():
					raise Exception("List is empty"   )
			return self._header._next._data

	def 					__UpperCAmelCase(       self   ):
			if self.is_empty():
					raise Exception("List is empty"   )
			return self._trailer._prev._data

	def 					__UpperCAmelCase(       self							,			__UpperCAmelCase   ):
			return self._insert(self._header							,			__UpperCAmelCase							,			self._header._next   )

	def 					__UpperCAmelCase(       self							,			__UpperCAmelCase   ):
			return self._insert(self._trailer._prev							,			__UpperCAmelCase							,			self._trailer   )

	def 					__UpperCAmelCase(       self   ):
			if self.is_empty():
					raise IndexError("remove_first from empty list"   )
			return self._delete(self._header._next   )







	def 					__UpperCAmelCase(       self   ):
			if self.is_empty():
					raise IndexError("remove_first from empty list"   )
			return self._delete(self._trailer._prev   )






import re
import tempfile
import unittest
from pathlib import Path

from datasets.utils.metadata import DatasetMetadata



def    lowerCamelCase_   (  _lowercase    )							->	str:
		__A							:   Optional[int]	  =				min(re.search("^ +" ,     _lowercase    ).end() if t.startswith(" "    ) else 0 for t in string.splitlines()    )
		return "\n".join([line[indent_level:] for line in string.splitlines() if indent_level < len(_lowercase    )]    )


UpperCamelCase      			=     '\\n---\nlanguage:\n- zh\n- en\ntask_ids:\n- sentiment-classification\n---\n# Begin of markdown\n\nSome cool dataset card\n'

UpperCamelCase      			=     '\\n---\n---\n# Begin of markdown\n\nSome cool dataset card\n'


UpperCamelCase      			=     '\\n# Begin of markdown\n\nSome cool dataset card\n'





class _a       (	unittest.TestCase ):

	'''simple docstring'''



	def 					__UpperCAmelCase(       self   ):
			with tempfile.TemporaryDirectory() as tmp_dir:
					__A							:   List[Any]	  =				Path(__UpperCAmelCase   ) / "README.md"
					with open(__UpperCAmelCase							,			"w+"   ) as readme_file:
							readme_file.write(__UpperCAmelCase   )
					__A							:   Tuple	  =				DatasetMetadata.from_readme(__UpperCAmelCase   )
					self.assertDictEqual(__UpperCAmelCase							,			{"language": ["zh", "en"], "task_ids": ["sentiment-classification"]}   )

					with open(__UpperCAmelCase							,			"w+"   ) as readme_file:
							readme_file.write(__UpperCAmelCase   )
					__A							:   Any	  =				DatasetMetadata.from_readme(__UpperCAmelCase   )
					self.assertDictEqual(__UpperCAmelCase							,			{}   )

					with open(__UpperCAmelCase							,			"w+"   ) as readme_file:
							readme_file.write(__UpperCAmelCase   )
					__A							:   Union[str, Any]	  =				DatasetMetadata.from_readme(__UpperCAmelCase   )
					self.assertEqual(__UpperCAmelCase							,			{}   )







	def 					__UpperCAmelCase(       self   ):
			__A							:   List[str]	  =				_dedent(
			    "\\n            annotations_creators:\n            - found\n            language_creators:\n            - found\n            language:\n            - en\n            license:\n            - unknown\n            multilinguality:\n            - monolingual\n            pretty_name: Test Dataset\n            size_categories:\n            - 10K<n<100K\n            source_datasets:\n            - extended|other-yahoo-webscope-l6\n            task_categories:\n            - question-answering\n            task_ids:\n            - open-domain-qa\n            "   )
			assert DatasetMetadata.from_yaml_string(__UpperCAmelCase   )

			__A							:   List[Any]	  =				_dedent(
			    "\\n            annotations_creators:\n            - found\n            language:\n            - en\n            license:\n            - unknown\n            multilinguality:\n            - monolingual\n            pretty_name: Test Dataset\n            size_categories:\n            - 10K<n<100K\n            source_datasets:\n            - extended|other-yahoo-webscope-l6\n            task_categories:\n            - question-answering\n            task_ids:\n            - open-domain-qa\n            task_ids:\n            - open-domain-qa\n            "   )
			with self.assertRaises(__UpperCAmelCase   ):
					DatasetMetadata.from_yaml_string(__UpperCAmelCase   )

			__A							:   Optional[int]	  =				_dedent(
			    "\\n            annotations_creators:\n            - found\n            language_creators:\n            - found\n            language:\n            - en\n            license:\n            - unknown\n            multilinguality:\n            - monolingual\n            pretty_name: Test Dataset\n            size_categories:\n            - 10K<n<100K\n            source_datasets:\n            - extended|other-yahoo-webscope-l6\n            task_categories:\n            - text-classification\n            task_ids:\n            - multi-class-classification\n            paperswithcode_id:\n            - squad\n            configs:\n            - en\n            train-eval-index:\n            - config: en\n              task: text-classification\n              task_id: multi_class_classification\n              splits:\n                train_split: train\n                eval_split: test\n              col_mapping:\n                text: text\n                label: target\n              metrics:\n                - type: accuracy\n                  name: Accuracy\n            extra_gated_prompt: |\n              By clicking on “Access repository” below, you also agree to ImageNet Terms of Access:\n              [RESEARCHER_FULLNAME] (the \"Researcher\") has requested permission to use the ImageNet database (the \"Database\") at Princeton University and Stanford University. In exchange for such permission, Researcher hereby agrees to the following terms and conditions:\n              1. Researcher shall use the Database only for non-commercial research and educational purposes.\n            extra_gated_fields:\n              Company: text\n              Country: text\n              I agree to use this model for non-commerical use ONLY: checkbox\n            "   )
			assert DatasetMetadata.from_yaml_string(__UpperCAmelCase   )





