



"""simple docstring"""







from abc import ABC, abstractmethod
from typing import Optional, Union

from .. import Dataset, DatasetDict, Features, IterableDataset, IterableDatasetDict, NamedSplit
from ..utils.typing import NestedDataStructureLike, PathLike






class       UpperCamelCase__			(   _lowerCAmelCase      ):

			"""simple docstring"""


			def __init__(      self						,	SCREAMING_SNAKE_CASE__ = None						,	SCREAMING_SNAKE_CASE__ = None						,	SCREAMING_SNAKE_CASE__ = None						,	SCREAMING_SNAKE_CASE__ = None						,	SCREAMING_SNAKE_CASE__ = False						,	SCREAMING_SNAKE_CASE__ = False						,	SCREAMING_SNAKE_CASE__ = None						,	**SCREAMING_SNAKE_CASE__						,	)      ->	Any:
				A__											=					path_or_paths
				A__											=					split if split or isinstance(SCREAMING_SNAKE_CASE__						,	SCREAMING_SNAKE_CASE__		) else "train"
				A__											=					features
				A__											=					cache_dir
				A__											=					keep_in_memory
				A__											=					streaming
				A__											=					num_proc
				A__											=					kwargs







			@abstractmethod
			def   snake_case__	(      self		)      ->	Union[Dataset, DatasetDict, IterableDataset, IterableDatasetDict]:
				pass






class       UpperCamelCase__			(   _lowerCAmelCase      ):

			"""simple docstring"""


			def __init__(      self						,	SCREAMING_SNAKE_CASE__ = None						,	SCREAMING_SNAKE_CASE__ = None						,	SCREAMING_SNAKE_CASE__ = False						,	SCREAMING_SNAKE_CASE__ = False						,	SCREAMING_SNAKE_CASE__ = None						,	**SCREAMING_SNAKE_CASE__						,	)      ->	str:
				A__											=					features
				A__											=					cache_dir
				A__											=					keep_in_memory
				A__											=					streaming
				A__											=					num_proc
				A__											=					kwargs







			@abstractmethod
			def   snake_case__	(      self		)      ->	Union[Dataset, IterableDataset]:
				pass









"""simple docstring"""







from __future__ import annotations

def       _lowerCamelCase				(							UpperCAmelCase_ :       float,	UpperCAmelCase_ :       float,	UpperCAmelCase_ :       float,	)	-> tuple:






	"""simple docstring"""





	if (electron_conc, hole_conc, intrinsic_conc).count(0     ) != 1:
		raise ValueError("You cannot supply more or less than 2 values"     )
	elif electron_conc < 0:
		raise ValueError("Electron concentration cannot be negative in a semiconductor"     )
	elif hole_conc < 0:
		raise ValueError("Hole concentration cannot be negative in a semiconductor"     )
	elif intrinsic_conc < 0:
		raise ValueError(
		    "Intrinsic concentration cannot be negative in a semiconductor"     )
	elif electron_conc == 0:
		return (
		    "electron_conc",
		    intrinsic_conc**2 / hole_conc,
		)
	elif hole_conc == 0:
		return (
		    "hole_conc",
		    intrinsic_conc**2 / electron_conc,
		)
	elif intrinsic_conc == 0:
		return (
		    "intrinsic_conc",
		    (electron_conc * hole_conc) ** 0.5,
		)
	else:
		return (-1, -1)


if __name__ == "__main__":
			import doctest

			doctest.testmod()




