





import copy
from dataclasses import dataclass
from pathlib import Path
from typing import Dict, Optional, Union




@dataclass
class 			__UpperCamelCase    :
     __A	:  Optional[Union[str, Path]]							  =   None
     __A	:  bool							  =   False
     __A	:  bool							  =   False
     __A	:  bool							  =   False
     __A	:  Optional[Dict]							  =   None
     __A	:  Optional[str]							  =   None
     __A	:  bool							  =   False
     __A	:  bool							  =   False
     __A	:  bool							  =   False
     __A	:  bool							  =   True
     __A	:  Optional[int]							  =   None
     __A	:  int							  =   1
     __A	:  Optional[Union[str, bool]]							  =   None
     __A	:  bool							  =   False
     __A	:  Optional[Dict]							  =   None
     __A	:  Optional[str]							  =   None





     def 		UpperCamelCase(     self					):
        return self.__class__(**{k: copy.deepcopy(_UpperCamelCase					) for k, v in self.__dict__.items()}					)

'''simple docstring'''
from math import log

from scipy.constants import Boltzmann, physical_constants

lowercase__											=3_00  # TEMPERATURE (unit = K)






def      UpperCamelCase_				(      A__  ,      A__  ,      A__  ,      ):

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