


from typing import TYPE_CHECKING

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


UpperCamelCase						:				Dict             =      {
    "configuration_electra": ["ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP", "ElectraConfig", "ElectraOnnxConfig"],
    "tokenization_electra": ["ElectraTokenizer"],
}

try:
	if not is_tokenizers_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCamelCase						:				Tuple             =      ["ElectraTokenizerFast"]

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCamelCase						:				Optional[int]             =      [
	    "ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST",
	    "ElectraForCausalLM",
	    "ElectraForMaskedLM",
	    "ElectraForMultipleChoice",
	    "ElectraForPreTraining",
	    "ElectraForQuestionAnswering",
	    "ElectraForSequenceClassification",
	    "ElectraForTokenClassification",
	    "ElectraModel",
	    "ElectraPreTrainedModel",
	    "load_tf_weights_in_electra",
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCamelCase						:				List[str]             =      [
	    "TF_ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST",
	    "TFElectraForMaskedLM",
	    "TFElectraForMultipleChoice",
	    "TFElectraForPreTraining",
	    "TFElectraForQuestionAnswering",
	    "TFElectraForSequenceClassification",
	    "TFElectraForTokenClassification",
	    "TFElectraModel",
	    "TFElectraPreTrainedModel",
	]

try:
	if not is_flax_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCamelCase						:				int             =      [
	    "FlaxElectraForCausalLM",
	    "FlaxElectraForMaskedLM",
	    "FlaxElectraForMultipleChoice",
	    "FlaxElectraForPreTraining",
	    "FlaxElectraForQuestionAnswering",
	    "FlaxElectraForSequenceClassification",
	    "FlaxElectraForTokenClassification",
	    "FlaxElectraModel",
	    "FlaxElectraPreTrainedModel",
	]


if TYPE_CHECKING:
	from .configuration_electra import ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP, ElectraConfig, ElectraOnnxConfig
	from .tokenization_electra import ElectraTokenizer

	try:
		if not is_tokenizers_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .tokenization_electra_fast import ElectraTokenizerFast

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_electra import (
		    ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST,
		    ElectraForCausalLM,
		    ElectraForMaskedLM,
		    ElectraForMultipleChoice,
		    ElectraForPreTraining,
		    ElectraForQuestionAnswering,
		    ElectraForSequenceClassification,
		    ElectraForTokenClassification,
		    ElectraModel,
		    ElectraPreTrainedModel,
		    load_tf_weights_in_electra,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_electra import (
		    TF_ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST,
		    TFElectraForMaskedLM,
		    TFElectraForMultipleChoice,
		    TFElectraForPreTraining,
		    TFElectraForQuestionAnswering,
		    TFElectraForSequenceClassification,
		    TFElectraForTokenClassification,
		    TFElectraModel,
		    TFElectraPreTrainedModel,
		)

	try:
		if not is_flax_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_flax_electra import (
		    FlaxElectraForCausalLM,
		    FlaxElectraForMaskedLM,
		    FlaxElectraForMultipleChoice,
		    FlaxElectraForPreTraining,
		    FlaxElectraForQuestionAnswering,
		    FlaxElectraForSequenceClassification,
		    FlaxElectraForTokenClassification,
		    FlaxElectraModel,
		    FlaxElectraPreTrainedModel,
		)

else:
	import sys

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









"""simple docstring"""


from math import factorial







def  __snake_case       (   UpperCamelCase__ ,			UpperCamelCase__ ,			UpperCamelCase__	)      ->		float:







		"""simple docstring"""





		if successes > trials:
				raise ValueError('successes must be lower or equal to trials'	)
		if trials < 0 or successes < 0:
				raise ValueError('the function is defined for non-negative integers'	)
		if not isinstance(UpperCamelCase__ ,			UpperCamelCase__	) or not isinstance(UpperCamelCase__ ,			UpperCamelCase__	):
				raise ValueError('the function is defined for non-negative integers'	)
		if not 0 < prob < 1:
				raise ValueError('prob has to be in range of 1 - 0'	)
		A					       = (prob**successes) * ((1 - prob) ** (trials - successes))
		# Calculate the binomial coefficient: n! / k!(n-k)!
		A					       = float(factorial(UpperCamelCase__	)	)
		coefficient /= factorial(UpperCamelCase__	) * factorial(trials - successes	)
		return probability * coefficient


if __name__ == "__main__":
	from doctest import testmod

	testmod()
	print("Probability of 2 successes out of 4 trails")
	print("with probability of 0.75 is:", end=" ")
	print(binomial_distribution(2, 4, 0.75))





