
from math import log

from scipy.constants import Boltzmann, physical_constants

_lowerCamelCase	:    str          =      300  # TEMPERATURE (unit = K)






def 	lowerCamelCase__		(	__lowercase       :     float	, __lowercase       :     float	, __lowercase       :     float	, )			->  float:

			if donor_conc <= 0:
						raise ValueError('Donor concentration should be positive'			)
			elif acceptor_conc <= 0:
						raise ValueError('Acceptor concentration should be positive'			)
			elif intrinsic_conc <= 0:
						raise ValueError('Intrinsic concentration should be positive'			)
			elif donor_conc <= intrinsic_conc:
						raise ValueError(
						    'Donor concentration should be greater than intrinsic concentration'			)
			elif acceptor_conc <= intrinsic_conc:
						raise ValueError(
						    'Acceptor concentration should be greater than intrinsic concentration'			)
			else:
						return (
						    Boltzmann
						    * T
						    * log((donor_conc * acceptor_conc) / intrinsic_conc**2			)
						    / physical_constants["electron volt"][0]
						)


if __name__ == "__main__":
			import doctest

			doctest.testmod()

from functools import lru_cache






@lru_cache
def 	a_		(	__lowercase       :     int			)			->  int:
			if num < 0:
						raise ValueError('Number should not be negative.'			)

			return 1 if num in (0, 1) else num * factorial(num - 1			)


if __name__ == "__main__":
			import doctest

			doctest.testmod()