"""simple docstring"""



from typing import TYPE_CHECKING

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


_UpperCamelCase								=		{
    "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								=		["ElectraTokenizerFast"]

try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				_UpperCamelCase								=		[
				    "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								=		[
				    "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								=		[
				    "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								=		_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)






"""simple docstring"""



def  _A(		lowerCAmelCase			,  lowerCAmelCase							):
							A__       :     List[Any]								=			[1]
							for i in range(2			,  lowerCAmelCase							):
														factorials.append(factorials[-1] * i							)
							assert 0 <= k < factorials[-1] * n, "k out of bounds"

							A__       :     Union[str, Any]								=			[]
							A__       :     int								=			list(range(lowerCAmelCase							)							)

							# Find permutation
							while factorials:
														A__       :     Optional[int]								=			factorials.pop()
														A__				,							A__       :     Union[str, Any]								=			divmod(lowerCAmelCase			,  lowerCAmelCase							)
														permutation.append(elements[number]							)
														elements.remove(elements[number]							)
							permutation.append(elements[0]							)

							return permutation


if __name__ == "__main__":
				import doctest

				doctest.testmod()





