




'''simple docstring'''


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

from .haversine_distance import haversine_distance

UpperCAmelCase_ 		=      6_37_81_37.0
UpperCAmelCase_ 		=      6_35_67_52.31_42_45
UpperCAmelCase_ 		=      6_37_81_37


def 						SCREAMING_SNAKE_CASE       (      a_	:							float				,					a_	:							float				,					a_	:							float				,					a_	:							float			):
		__a			=					(AXIS_A - AXIS_B) / AXIS_A
		# Parametric latitudes
		# https://en.wikipedia.org/wiki/Latitude#Parametric_(or_reduced)_latitude
		__a			=					atan((1 - flattening) * tan(radians(snake_case__			)			)			)
		__a			=					atan((1 - flattening) * tan(radians(snake_case__			)			)			)

		# Compute central angle between two points
		# using haversine theta. sigma =  haversine_distance / equatorial radius
		__a			=					haversine_distance(snake_case__				,					snake_case__				,					snake_case__				,					snake_case__			) / EQUATORIAL_RADIUS

		# Intermediate P and Q values
		__a			=					(b_lata + b_lata) / 2
		__a			=					(b_lata - b_lata) / 2

		# Intermediate X value
		# X = (sigma - sin(sigma)) * sin^2Pcos^2Q / cos^2(sigma/2)
		__a			=					(sin(snake_case__			) ** 2) * (cos(snake_case__			) ** 2)
		__a			=					cos(sigma / 2			) ** 2
		__a			=					(sigma - sin(snake_case__			)) * (x_numerator / x_demonimator)

		# Intermediate Y value
		# Y = (sigma + sin(sigma)) * cos^2Psin^2Q / sin^2(sigma/2)
		__a			=					(cos(snake_case__			) ** 2) * (sin(snake_case__			) ** 2)
		__a			=					sin(sigma / 2			) ** 2
		__a			=					(sigma + sin(snake_case__			)) * (y_numerator / y_denominator)

		return EQUATORIAL_RADIUS * (sigma - ((flattening / 2) * (x_value + y_value)))


if __name__ == "__main__":
		import doctest

		doctest.testmod()









'''simple docstring'''


from ..utils import DummyObject, requires_backends





class    __lowercase						(  metaclass=__magic_name__ ):
   _a							=      ["""onnx"""]







   def __init__(	self      ,							*UpperCamelCase      ,							**UpperCamelCase      )				->    str:
     requires_backends(self      ,							['onnx']      )







   @classmethod
   def 		UpperCamelCase__			(	cls      ,							*UpperCamelCase      ,							**UpperCamelCase      )				->    Tuple:
     requires_backends(cls      ,							['onnx']      )







   @classmethod
   def 		UpperCamelCase__			(	cls      ,							*UpperCamelCase      ,							**UpperCamelCase      )				->    Tuple:
     requires_backends(cls      ,							['onnx']      )



