






"""simple docstring"""





from typing import TYPE_CHECKING

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


UpperCamelCase_	:				Any										= {
    """configuration_bert""": ["""BERT_PRETRAINED_CONFIG_ARCHIVE_MAP""", """BertConfig""", """BertOnnxConfig"""],
    """tokenization_bert""": ["""BasicTokenizer""", """BertTokenizer""", """WordpieceTokenizer"""],
}

try:
    if not is_tokenizers_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    UpperCamelCase_	:				List[Any]										= ["""BertTokenizerFast"""]

try:
    if not is_torch_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    UpperCamelCase_	:				Tuple										= [
        """BERT_PRETRAINED_MODEL_ARCHIVE_LIST""",
        """BertForMaskedLM""",
        """BertForMultipleChoice""",
        """BertForNextSentencePrediction""",
        """BertForPreTraining""",
        """BertForQuestionAnswering""",
        """BertForSequenceClassification""",
        """BertForTokenClassification""",
        """BertLayer""",
        """BertLMHeadModel""",
        """BertModel""",
        """BertPreTrainedModel""",
        """load_tf_weights_in_bert""",
    ]

try:
    if not is_tf_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    UpperCamelCase_	:				Any										= [
        """TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST""",
        """TFBertEmbeddings""",
        """TFBertForMaskedLM""",
        """TFBertForMultipleChoice""",
        """TFBertForNextSentencePrediction""",
        """TFBertForPreTraining""",
        """TFBertForQuestionAnswering""",
        """TFBertForSequenceClassification""",
        """TFBertForTokenClassification""",
        """TFBertLMHeadModel""",
        """TFBertMainLayer""",
        """TFBertModel""",
        """TFBertPreTrainedModel""",
    ]
try:
    if not is_tensorflow_text_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    UpperCamelCase_	:				str										= ["""TFBertTokenizer"""]

try:
    if not is_flax_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    UpperCamelCase_	:				int										= [
        """FlaxBertForCausalLM""",
        """FlaxBertForMaskedLM""",
        """FlaxBertForMultipleChoice""",
        """FlaxBertForNextSentencePrediction""",
        """FlaxBertForPreTraining""",
        """FlaxBertForQuestionAnswering""",
        """FlaxBertForSequenceClassification""",
        """FlaxBertForTokenClassification""",
        """FlaxBertModel""",
        """FlaxBertPreTrainedModel""",
    ]

if TYPE_CHECKING:
    from .configuration_bert import BERT_PRETRAINED_CONFIG_ARCHIVE_MAP, BertConfig, BertOnnxConfig
    from .tokenization_bert import BasicTokenizer, BertTokenizer, WordpieceTokenizer

    try:
        if not is_tokenizers_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .tokenization_bert_fast import BertTokenizerFast

    try:
        if not is_torch_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .modeling_bert import (
            BERT_PRETRAINED_MODEL_ARCHIVE_LIST,
            BertForMaskedLM,
            BertForMultipleChoice,
            BertForNextSentencePrediction,
            BertForPreTraining,
            BertForQuestionAnswering,
            BertForSequenceClassification,
            BertForTokenClassification,
            BertLayer,
            BertLMHeadModel,
            BertModel,
            BertPreTrainedModel,
            load_tf_weights_in_bert,
        )

    try:
        if not is_tf_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .modeling_tf_bert import (
            TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST,
            TFBertEmbeddings,
            TFBertForMaskedLM,
            TFBertForMultipleChoice,
            TFBertForNextSentencePrediction,
            TFBertForPreTraining,
            TFBertForQuestionAnswering,
            TFBertForSequenceClassification,
            TFBertForTokenClassification,
            TFBertLMHeadModel,
            TFBertMainLayer,
            TFBertModel,
            TFBertPreTrainedModel,
        )

    try:
        if not is_tensorflow_text_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .tokenization_bert_tf import TFBertTokenizer

    try:
        if not is_flax_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .modeling_flax_bert import (
            FlaxBertForCausalLM,
            FlaxBertForMaskedLM,
            FlaxBertForMultipleChoice,
            FlaxBertForNextSentencePrediction,
            FlaxBertForPreTraining,
            FlaxBertForQuestionAnswering,
            FlaxBertForSequenceClassification,
            FlaxBertForTokenClassification,
            FlaxBertModel,
            FlaxBertPreTrainedModel,
        )

else:
    import sys

    UpperCamelCase_	:				List[str]										= _LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)










"""simple docstring"""





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

from .haversine_distance import haversine_distance

UpperCamelCase_	:				Optional[Any]										= 6_37_81_37.0
UpperCamelCase_	:				Optional[Any]										= 6_35_67_52.31_42_45
UpperCamelCase_	:				Union[str, Any]										= 6378137



def     __lowercase					(    a :				float       ,		a :				float       ,		a :				float       ,		a :				float )					->					float:
      __snake_case      :    Optional[Any]  			=(AXIS_A - AXIS_B) / AXIS_A
      # Parametric latitudes
      # https://en.wikipedia.org/wiki/Latitude#Parametric_(or_reduced)_latitude
      __snake_case      :    List[str]  			=atan((1 - flattening) * tan(radians(a ) ) )
      __snake_case      :    Any  			=atan((1 - flattening) * tan(radians(a ) ) )

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

      # Intermediate P and Q values
      __snake_case      :    List[str]  			=(b_lata + b_lata) / 2
      __snake_case      :    Dict  			=(b_lata - b_lata) / 2

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

      # Intermediate Y value
      # Y = (sigma + sin(sigma)) * cos^2Psin^2Q / sin^2(sigma/2)
      __snake_case      :    Tuple  			=(cos(a ) ** 2) * (sin(a ) ** 2)
      __snake_case      :    Dict  			=sin(sigma / 2 ) ** 2
      __snake_case      :    Tuple  			=(sigma + sin(a )) * (y_numerator / y_denominator)

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


if __name__ == "__main__":
    import doctest

    doctest.testmod()


