






"""simple docstring"""

from math import log

from scipy.constants import Boltzmann, physical_constants

lowercase__          = 300  # TEMPERATURE (unit = K)

def 		__lowerCamelCase	(  __UpperCamelCase      ,       __UpperCamelCase      ,       __UpperCamelCase      ,       )						->    float:

		"""simple docstring"""







		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()







"""simple docstring"""
from collections.abc import Callable

import numpy as np



def      __lowerCamelCase   (							a_     :		Callable ,   a_     :		float ,   a_     :		float ,   a_     :		float ,   a_     :		float							)			->      np.ndarray:
      __SCREAMING_SNAKE_CASE   :List[Any]						=  int(np.ceil((x_end - xa) / step_size							)							)
      __SCREAMING_SNAKE_CASE   :Optional[Any]						=  np.zeros((n + 1,)							)
      __SCREAMING_SNAKE_CASE   :int						=  ya
      __SCREAMING_SNAKE_CASE   :str						=  xa

      for k in range(a_							):
            __SCREAMING_SNAKE_CASE   :Optional[int]						=  y[k] + step_size * ode_func(a_ ,   y[k]							)
            x += step_size

      return y


if __name__ == "__main__":
  import doctest

  doctest.testmod()