


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

from .haversine_distance import haversine_distance

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






def 		lowercase_(  SCREAMING_SNAKE_CASE_      ,						SCREAMING_SNAKE_CASE_      ,						SCREAMING_SNAKE_CASE_      ,						SCREAMING_SNAKE_CASE_	):


  '''simple docstring'''

  lowerCamelCase :					Tuple    =				(AXIS_A - AXIS_B) / AXIS_A
  # Parametric latitudes
  # https://en.wikipedia.org/wiki/Latitude#Parametric_(or_reduced)_latitude
  lowerCamelCase :					Tuple    =				atan((1 - flattening) * tan(radians(lowerCAmelCase_	)	)	)
  lowerCamelCase :					List[Any]    =				atan((1 - flattening) * tan(radians(lowerCAmelCase_	)	)	)

  # Compute central angle between two points
  # using haversine theta. sigma =  haversine_distance / equatorial radius
  lowerCamelCase :					Optional[int]    =				haversine_distance(lowerCAmelCase_      ,						lowerCAmelCase_      ,						lowerCAmelCase_      ,						lowerCAmelCase_	) / EQUATORIAL_RADIUS

  # Intermediate P and Q values
  lowerCamelCase :					Optional[Any]    =				(b_lata + b_lata) / 2
  lowerCamelCase :					Tuple    =				(b_lata - b_lata) / 2

  # Intermediate X value
  # X = (sigma - sin(sigma)) * sin^2Pcos^2Q / cos^2(sigma/2)
  lowerCamelCase :					List[Any]    =				(sin(lowerCAmelCase_	) ** 2) * (cos(lowerCAmelCase_	) ** 2)
  lowerCamelCase :					Optional[Any]    =				cos(sigma / 2	) ** 2
  lowerCamelCase :					Optional[int]    =				(sigma - sin(lowerCAmelCase_	)) * (x_numerator / x_demonimator)

  # Intermediate Y value
  # Y = (sigma + sin(sigma)) * cos^2Psin^2Q / sin^2(sigma/2)
  lowerCamelCase :					Any    =				(cos(lowerCAmelCase_	) ** 2) * (sin(lowerCAmelCase_	) ** 2)
  lowerCamelCase :					str    =				sin(sigma / 2	) ** 2
  lowerCamelCase :					int    =				(sigma + sin(lowerCAmelCase_	)) * (y_numerator / y_denominator)

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


if __name__ == "__main__":
   import doctest

   doctest.testmod()







"""simple docstring"""







from abc import ABC, abstractmethod
from argparse import ArgumentParser




class  UpperCamelCase_	( UpperCamelCase):

	"""simple docstring"""





	@staticmethod
	@abstractmethod
	def   UpperCAmelCase_      ( UpperCAmelCase__			:				ArgumentParser   )       ->	int:
						raise NotImplementedError()




	@abstractmethod
	def   UpperCAmelCase_      ( self			:				int   )       ->	Optional[int]:
						raise NotImplementedError()
