





'''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,
)


lowercase__		:     List[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:
   lowercase__		:     Union[str, Any]			=							['BertTokenizerFast']

try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   lowercase__		:     str			=							[
       '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:
   lowercase__		:     Optional[int]			=							[
       '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:
   lowercase__		:     Tuple			=							['TFBertTokenizer']

try:
   if not is_flax_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   lowercase__		:     Union[str, Any]			=							[
       '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

   lowercase__		:     Dict			=							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)




'''simple docstring'''


from __future__ import annotations

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





def    lowerCAmelCase       (		UpperCamelCase__					: float     ,       UpperCamelCase__					: float     ,       UpperCamelCase__					: float     ,       UpperCamelCase__					: float							):


	"""simple docstring"""
	__UpperCAmelCase      					=      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:
		__UpperCAmelCase      					=      COULOMBS_CONSTANT * charge_product / (distance**2)
		return {"force": force}
	elif chargea == 0:
		__UpperCAmelCase      					=      abs(UpperCamelCase__							) * (distance**2) / (COULOMBS_CONSTANT * chargea)
		return {"charge1": chargea}
	elif chargea == 0:
		__UpperCAmelCase      					=      abs(UpperCamelCase__							) * (distance**2) / (COULOMBS_CONSTANT * chargea)
		return {"charge2": chargea}
	elif distance == 0:
		__UpperCAmelCase      					=      (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()
