




"""simple docstring"""




import os
from pathlib import Path







def      __UpperCAmelCase     ( ):
			from torch.utils.cpp_extension import load

			__lowercase			:  List[Any]								=       Path(__UpperCamelCase	).resolve().parent.parent.parent / '''kernels''' / '''deformable_detr'''
			__lowercase			:  Union[str, Any]								=       [
			    root / filename
			    for filename in [
			        '''vision.cpp''',
			        os.path.join('''cpu'''	,				'''ms_deform_attn_cpu.cpp'''	),
			        os.path.join('''cuda'''	,				'''ms_deform_attn_cuda.cu'''	),
			    ]
			]

			load(
			    '''MultiScaleDeformableAttention'''	,				__UpperCamelCase	,				with_cuda=__UpperCamelCase	,				extra_include_paths=[str(__UpperCamelCase	)]	,				extra_cflags=['''-DWITH_CUDA=1''']	,				extra_cuda_cflags=[
			        '''-DCUDA_HAS_FP16=1''',
			        '''-D__CUDA_NO_HALF_OPERATORS__''',
			        '''-D__CUDA_NO_HALF_CONVERSIONS__''',
			        '''-D__CUDA_NO_HALF2_OPERATORS__''',
			    ]	,				)

			import MultiScaleDeformableAttention as MSDA

			return MSDA





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