






'''simple docstring'''







from __future__ import annotations

_A     :      List[str]   					=8.988e9  # units = N * m^s * C^-2





def 			SCREAMING_SNAKE_CASE_	(UpperCamelCase    ,      UpperCamelCase    ,      UpperCamelCase    ,      UpperCamelCase				)				->	dict[str, float]:
							lowerCamelCase__ :     Dict	  =	abs(chargea * chargea				)

							if (force, chargea, chargea, distance).count(0				) != 1:
														raise ValueError("""One and only one argument must be 0"""				)
							if distance < 0:
														raise ValueError("""Distance cannot be negative"""				)
							if force == 0:
														lowerCamelCase__ :     Any	  =	COULOMBS_CONSTANT * charge_product / (distance**2)
														return {"force": force}
							elif chargea == 0:
														lowerCamelCase__ :     Union[str, Any]	  =	abs(UpperCamelCase				) * (distance**2) / (COULOMBS_CONSTANT * chargea)
														return {"charge1": chargea}
							elif chargea == 0:
														lowerCamelCase__ :     Any	  =	abs(UpperCamelCase				) * (distance**2) / (COULOMBS_CONSTANT * chargea)
														return {"charge2": chargea}
							elif distance == 0:
														lowerCamelCase__ :     Dict	  =	(COULOMBS_CONSTANT * charge_product / abs(UpperCamelCase				)) ** 0.5
														return {"distance": distance}
							raise ValueError("""Exactly one argument must be 0"""				)


if __name__ == "__main__":
			import doctest

			doctest.testmod()









'''simple docstring'''







from math import asin, atan, cos, radians, sin, sqrt, tan

_A     :      List[str]   					=637_8137.0
_A     :      Dict   					=635_6752.31_4245
_A     :      int   					=6_378_137





def 			SCREAMING_SNAKE_CASE_	(UpperCamelCase    ,      UpperCamelCase    ,      UpperCamelCase    ,      UpperCamelCase				)				->	float:
							lowerCamelCase__ :     str	  =	(AXIS_A - AXIS_B) / AXIS_A
							lowerCamelCase__ :     Dict	  =	atan((1 - flattening) * tan(radians(UpperCamelCase				)				)				)
							lowerCamelCase__ :     Dict	  =	atan((1 - flattening) * tan(radians(UpperCamelCase				)				)				)
							lowerCamelCase__ :     Optional[Any]	  =	radians(UpperCamelCase				)
							lowerCamelCase__ :     List[Any]	  =	radians(UpperCamelCase				)
							# Equation
							lowerCamelCase__ :     Tuple	  =	sin((phi_a - phi_a) / 2				)
							lowerCamelCase__ :     List[Any]	  =	sin((lambda_a - lambda_a) / 2				)
							# Square both values
							sin_sq_phi *= sin_sq_phi
							sin_sq_lambda *= sin_sq_lambda
							lowerCamelCase__ :     Tuple	  =	sqrt(sin_sq_phi + (cos(UpperCamelCase				) * cos(UpperCamelCase				) * sin_sq_lambda)				)
							return 2 * RADIUS * asin(UpperCamelCase				)


if __name__ == "__main__":
			import doctest

			doctest.testmod()

