from __future__ import annotations

from typing import Any







class __snake_case       :




   def __init__(					self    :       int ,			_lowercase    :       int = 6   ):



     """simple docstring"""






     SCREAMING_SNAKE_CASE__    							=   None
     SCREAMING_SNAKE_CASE__    							=   None
     self.create_linked_list(_lowercase   )




   def 			__a		(					self    :       Dict ,			_lowercase    :       int   ):



     """simple docstring"""






     SCREAMING_SNAKE_CASE__    							=   Node()
     SCREAMING_SNAKE_CASE__    							=   current_node
     SCREAMING_SNAKE_CASE__    							=   current_node
     SCREAMING_SNAKE_CASE__    							=   current_node
     for _ in range(1 ,			_lowercase   ):
       SCREAMING_SNAKE_CASE__    							=   Node()
       SCREAMING_SNAKE_CASE__    							=   current_node
       SCREAMING_SNAKE_CASE__    							=   previous_node
       SCREAMING_SNAKE_CASE__    							=   current_node
     SCREAMING_SNAKE_CASE__    							=   self.front
     SCREAMING_SNAKE_CASE__    							=   previous_node




   def 			__a		(					self    :       Dict   ):



     """simple docstring"""






     return (
         self.front == self.rear
         and self.front is not None
         and self.front.data is None
     )




   def 			__a		(					self    :       List[str]   ):



     """simple docstring"""






     self.check_can_perform_operation()
     return self.front.data if self.front else None




   def 			__a		(					self    :       str ,			_lowercase    :       Any   ):



     """simple docstring"""






     if self.rear is None:
       return

     self.check_is_full()
     if not self.is_empty():
       SCREAMING_SNAKE_CASE__    							=   self.rear.next
     if self.rear:
       SCREAMING_SNAKE_CASE__    							=   data




   def 			__a		(					self    :       List[Any]   ):



     """simple docstring"""






     self.check_can_perform_operation()
     if self.rear is None or self.front is None:
       return None
     if self.front == self.rear:
       SCREAMING_SNAKE_CASE__    							=   self.front.data
       SCREAMING_SNAKE_CASE__    							=   None
       return data

     SCREAMING_SNAKE_CASE__    							=   self.front
     SCREAMING_SNAKE_CASE__    							=   old_front.next
     SCREAMING_SNAKE_CASE__    							=   old_front.data
     SCREAMING_SNAKE_CASE__    							=   None
     return data




   def 			__a		(					self    :       Dict   ):



     """simple docstring"""






     if self.is_empty():
       raise Exception("""Empty Queue"""   )




   def 			__a		(					self    :       List[str]   ):



     """simple docstring"""






     if self.rear and self.rear.next == self.front:
       raise Exception("""Full Queue"""   )







class __snake_case       :




   def __init__(					self    :       Any   ):



     """simple docstring"""






     SCREAMING_SNAKE_CASE__    							=   None
     SCREAMING_SNAKE_CASE__    							=   None
     SCREAMING_SNAKE_CASE__    							=   None


if __name__ == "__main__":
   import doctest

   doctest.testmod()

from math import log

from scipy.constants import Boltzmann, physical_constants

__lowerCamelCase    :				int							     =	300  # TEMPERATURE (unit = K)



def 			__SCREAMING_SNAKE_CASE						(      __UpperCamelCase					: float				,  __UpperCamelCase					: float				,  __UpperCamelCase					: float				,  )							->      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()
