from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_sentencepiece_available,
    is_tokenizers_available,
    is_torch_available,
)


A   :     List[Any]       =				{"configuration_fnet": ["FNET_PRETRAINED_CONFIG_ARCHIVE_MAP", "FNetConfig"]}

try:
      if not is_sentencepiece_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      A   :     Optional[int]       =				["FNetTokenizer"]

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

try:
      if not is_torch_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      A   :     int       =				[
          "FNET_PRETRAINED_MODEL_ARCHIVE_LIST",
          "FNetForMaskedLM",
          "FNetForMultipleChoice",
          "FNetForNextSentencePrediction",
          "FNetForPreTraining",
          "FNetForQuestionAnswering",
          "FNetForSequenceClassification",
          "FNetForTokenClassification",
          "FNetLayer",
          "FNetModel",
          "FNetPreTrainedModel",
      ]


if TYPE_CHECKING:
      from .configuration_fnet import FNET_PRETRAINED_CONFIG_ARCHIVE_MAP, FNetConfig

      try:
            if not is_sentencepiece_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .tokenization_fnet import FNetTokenizer

      try:
            if not is_tokenizers_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .tokenization_fnet_fast import FNetTokenizerFast

      try:
            if not is_torch_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_fnet import (
                FNET_PRETRAINED_MODEL_ARCHIVE_LIST,
                FNetForMaskedLM,
                FNetForMultipleChoice,
                FNetForNextSentencePrediction,
                FNetForPreTraining,
                FNetForQuestionAnswering,
                FNetForSequenceClassification,
                FNetForTokenClassification,
                FNetLayer,
                FNetModel,
                FNetPreTrainedModel,
            )


else:
      import sys

      A   :     Optional[Any]       =				_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)



from functools import lru_cache


@lru_cache
def    a__       (						__UpperCamelCase ):
      if num < 0:
            raise ValueError("Number should not be negative." )

      return 1 if num in (0, 1) else num * factorial(num - 1 )


if __name__ == "__main__":
      import doctest

      doctest.testmod()


