



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

from .haversine_distance import haversine_distance

__snake_case    :		Dict  =6_3_7_8_1_3_7.0
__snake_case    :		Union[str, Any]  =6_3_5_6_7_5_2.3_1_4_2_4_5
__snake_case    :		List[str]  =6_3_7_8_1_3_7






def      lowerCAmelCase__		(   lowerCamelCase_		:		float	,lowerCamelCase_		:		float	,lowerCamelCase_		:		float	,lowerCamelCase_		:		float):





				'''simple docstring'''

				lowerCAmelCase__					:    Tuple												=					(AXIS_A - AXIS_B) / AXIS_A
				# Parametric latitudes
				# https://en.wikipedia.org/wiki/Latitude#Parametric_(or_reduced)_latitude
				lowerCAmelCase__					:    Dict												=					atan((1 - flattening) * tan(radians(lowerCamelCase_)))
				lowerCAmelCase__					:    int												=					atan((1 - flattening) * tan(radians(lowerCamelCase_)))

				# Compute central angle between two points
				# using haversine theta. sigma =  haversine_distance / equatorial radius
				lowerCAmelCase__					:    Tuple												=					haversine_distance(lowerCamelCase_	,lowerCamelCase_	,lowerCamelCase_	,lowerCamelCase_) / EQUATORIAL_RADIUS

				# Intermediate P and Q values
				lowerCAmelCase__					:    List[str]												=					(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__					:    str												=					(sin(lowerCamelCase_) ** 2) * (cos(lowerCamelCase_) ** 2)
				lowerCAmelCase__					:    Tuple												=					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__					:    Union[str, Any]												=					(cos(lowerCamelCase_) ** 2) * (sin(lowerCamelCase_) ** 2)
				lowerCAmelCase__					:    List[str]												=					sin(sigma / 2) ** 2
				lowerCAmelCase__					:    str												=					(sigma + sin(lowerCamelCase_)) * (y_numerator / y_denominator)

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


if __name__ == "__main__":
	import doctest

	doctest.testmod()






from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


__snake_case    :		Any  ={
    'configuration_blenderbot_small': [
        'BLENDERBOT_SMALL_PRETRAINED_CONFIG_ARCHIVE_MAP',
        'BlenderbotSmallConfig',
        'BlenderbotSmallOnnxConfig',
    ],
    'tokenization_blenderbot_small': ['BlenderbotSmallTokenizer'],
}

try:
							if not is_tokenizers_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							__snake_case    :		Union[str, Any]  =['BlenderbotSmallTokenizerFast']

try:
							if not is_torch_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							__snake_case    :		List[str]  =[
							    'BLENDERBOT_SMALL_PRETRAINED_MODEL_ARCHIVE_LIST',
							    'BlenderbotSmallForCausalLM',
							    'BlenderbotSmallForConditionalGeneration',
							    'BlenderbotSmallModel',
							    'BlenderbotSmallPreTrainedModel',
							]

try:
							if not is_tf_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							__snake_case    :		str  =[
							    'TFBlenderbotSmallForConditionalGeneration',
							    'TFBlenderbotSmallModel',
							    'TFBlenderbotSmallPreTrainedModel',
							]

try:
							if not is_flax_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							__snake_case    :		Dict  =[
							    'FlaxBlenderbotSmallForConditionalGeneration',
							    'FlaxBlenderbotSmallModel',
							    'FlaxBlenderbotSmallPreTrainedModel',
							]

if TYPE_CHECKING:
							from .configuration_blenderbot_small import (
							    BLENDERBOT_SMALL_PRETRAINED_CONFIG_ARCHIVE_MAP,
							    BlenderbotSmallConfig,
							    BlenderbotSmallOnnxConfig,
							)
							from .tokenization_blenderbot_small import BlenderbotSmallTokenizer

							try:
														if not is_tokenizers_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .tokenization_blenderbot_small_fast import BlenderbotSmallTokenizerFast

							try:
														if not is_torch_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_blenderbot_small import (
														    BLENDERBOT_SMALL_PRETRAINED_MODEL_ARCHIVE_LIST,
														    BlenderbotSmallForCausalLM,
														    BlenderbotSmallForConditionalGeneration,
														    BlenderbotSmallModel,
														    BlenderbotSmallPreTrainedModel,
														)

							try:
														if not is_tf_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_tf_blenderbot_small import (
														    TFBlenderbotSmallForConditionalGeneration,
														    TFBlenderbotSmallModel,
														    TFBlenderbotSmallPreTrainedModel,
														)

							try:
														if not is_flax_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_flax_blenderbot_small import (
														    FlaxBlenderbotSmallForConditionalGeneration,
														    FlaxBlenderbotSmallModel,
														    FlaxBlenderbotSmallPreTrainedModel,
														)

else:
							import sys

							__snake_case    :		Optional[int]  =_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)

