
from datasets.utils.patching import _PatchedModuleObj, patch_submodule

from . import _test_patching



def        UpperCamelCase    (							):
					'''simple docstring'''
					import os as original_os
					from os import path as original_path
					from os import rename as original_rename
					from os.path import dirname as original_dirname
					from os.path import join as original_join

					assert _test_patching.os is original_os
					assert _test_patching.path is original_path
					assert _test_patching.join is original_join

					assert _test_patching.renamed_os is original_os
					assert _test_patching.renamed_path is original_path
					assert _test_patching.renamed_join is original_join

					lowercase							=						'''__test_patch_submodule_mock__'''
					with patch_submodule(_test_patching ,			'''os.path.join''' ,			lowerCAmelCase__		):
										# Every way to access os.path.join must be patched, and the rest must stay untouched

										# check os.path.join
										assert isinstance(_test_patching.os ,			_PatchedModuleObj		)
										assert isinstance(_test_patching.os.path ,			_PatchedModuleObj		)
										assert _test_patching.os.path.join is mock

										# check path.join
										assert isinstance(_test_patching.path ,			_PatchedModuleObj		)
										assert _test_patching.path.join is mock

										# check join
										assert _test_patching.join is mock

										# check that the other attributes are untouched
										assert _test_patching.os.rename is original_rename
										assert _test_patching.path.dirname is original_dirname
										assert _test_patching.os.path.dirname is original_dirname

										# Even renamed modules or objects must be patched

										# check renamed_os.path.join
										assert isinstance(_test_patching.renamed_os ,			_PatchedModuleObj		)
										assert isinstance(_test_patching.renamed_os.path ,			_PatchedModuleObj		)
										assert _test_patching.renamed_os.path.join is mock

										# check renamed_path.join
										assert isinstance(_test_patching.renamed_path ,			_PatchedModuleObj		)
										assert _test_patching.renamed_path.join is mock

										# check renamed_join
										assert _test_patching.renamed_join is mock

										# check that the other attributes are untouched
										assert _test_patching.renamed_os.rename is original_rename
										assert _test_patching.renamed_path.dirname is original_dirname
										assert _test_patching.renamed_os.path.dirname is original_dirname

					# check that everthing is back to normal when the patch is over

					assert _test_patching.os is original_os
					assert _test_patching.path is original_path
					assert _test_patching.join is original_join

					assert _test_patching.renamed_os is original_os
					assert _test_patching.renamed_path is original_path
					assert _test_patching.renamed_join is original_join



def        UpperCamelCase    (							):
					'''simple docstring'''
					assert _test_patching.open is open

					lowercase							=						'''__test_patch_submodule_builtin_mock__'''
					# _test_patching has "open" in its globals
					assert _test_patching.open is open
					with patch_submodule(_test_patching ,			'''open''' ,			lowerCAmelCase__		):
										assert _test_patching.open is mock

					# check that everthing is back to normal when the patch is over

					assert _test_patching.open is open



def        UpperCamelCase    (							):
					'''simple docstring'''
					# pandas.read_csv is not present in _test_patching
					lowercase							=						'''__test_patch_submodule_missing_mock__'''
					with patch_submodule(_test_patching ,			'''pandas.read_csv''' ,			lowerCAmelCase__		):
										pass



def        UpperCamelCase    (							):
					'''simple docstring'''
					# builtin should always be mocked even if they're not in the globals
					# in case they're loaded at one point
					lowercase							=						'''__test_patch_submodule_missing_builtin_mock__'''
					# _test_patching doesn't have "len" in its globals
					assert getattr(_test_patching ,			'''len''' ,			lowerCAmelCase__		) is None
					with patch_submodule(_test_patching ,			'''len''' ,			lowerCAmelCase__		):
										assert _test_patching.len is mock
					assert _test_patching.len is len



def        UpperCamelCase    (							):
					'''simple docstring'''
					lowercase							=						'''__test_patch_submodule_start_and_stop_mock__'''
					lowercase							=						patch_submodule(_test_patching ,			'''open''' ,			lowerCAmelCase__		)
					assert _test_patching.open is open
					patch.start()
					assert _test_patching.open is mock
					patch.stop()
					assert _test_patching.open is open



def        UpperCamelCase    (							):
					'''simple docstring'''
					from os import rename as original_rename
					from os.path import dirname as original_dirname
					from os.path import join as original_join

					lowercase							=						'''__test_patch_submodule_successive_join__'''
					lowercase							=						'''__test_patch_submodule_successive_dirname__'''
					lowercase							=						'''__test_patch_submodule_successive_rename__'''
					assert _test_patching.os.path.join is original_join
					assert _test_patching.os.path.dirname is original_dirname
					assert _test_patching.os.rename is original_rename

					with patch_submodule(_test_patching ,			'''os.path.join''' ,			lowerCAmelCase__		):
										with patch_submodule(_test_patching ,			'''os.rename''' ,			lowerCAmelCase__		):
															with patch_submodule(_test_patching ,			'''os.path.dirname''' ,			lowerCAmelCase__		):
																				assert _test_patching.os.path.join is mock_join
																				assert _test_patching.os.path.dirname is mock_dirname
																				assert _test_patching.os.rename is mock_rename

    # try another order
					with patch_submodule(_test_patching ,			'''os.rename''' ,			lowerCAmelCase__		):
										with patch_submodule(_test_patching ,			'''os.path.join''' ,			lowerCAmelCase__		):
															with patch_submodule(_test_patching ,			'''os.path.dirname''' ,			lowerCAmelCase__		):
																				assert _test_patching.os.path.join is mock_join
																				assert _test_patching.os.path.dirname is mock_dirname
																				assert _test_patching.os.rename is mock_rename

					assert _test_patching.os.path.join is original_join
					assert _test_patching.os.path.dirname is original_dirname
					assert _test_patching.os.rename is original_rename



def        UpperCamelCase    (							):
					'''simple docstring'''
					lowercase							=						'''__test_patch_submodule_doesnt_exist_mock__'''
					with patch_submodule(_test_patching ,			'''__module_that_doesn_exist__.__attribute_that_doesn_exist__''' ,			lowerCAmelCase__		):
										pass
					with patch_submodule(_test_patching ,			'''os.__attribute_that_doesn_exist__''' ,			lowerCAmelCase__		):
										pass






from __future__ import annotations

lowercase__		:Any   =    1.60_21E-19  # units = C



def        UpperCamelCase    (							lowerCAmelCase__ ,			lowerCAmelCase__ ,			lowerCAmelCase__ ,			):
					'''simple docstring'''
					if (conductivity, electron_conc, mobility).count(0		) != 1:
										raise ValueError('''You cannot supply more or less than 2 values'''		)
					elif conductivity < 0:
										raise ValueError('''Conductivity cannot be negative'''		)
					elif electron_conc < 0:
										raise ValueError('''Electron concentration cannot be negative'''		)
					elif mobility < 0:
										raise ValueError('''mobility cannot be negative'''		)
					elif conductivity == 0:
										return (
										    "conductivity",
										    mobility * electron_conc * ELECTRON_CHARGE,
										)
					elif electron_conc == 0:
										return (
										    "electron_conc",
										    conductivity / (mobility * ELECTRON_CHARGE),
										)
					else:
										return (
										    "mobility",
										    conductivity / (electron_conc * ELECTRON_CHARGE),
										)


if __name__ == "__main__":
							import doctest

							doctest.testmod()




