



from typing import TYPE_CHECKING

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


a__      :				List[str]   	=			{
    "configuration_funnel": ["FUNNEL_PRETRAINED_CONFIG_ARCHIVE_MAP", "FunnelConfig"],
    "convert_funnel_original_tf_checkpoint_to_pytorch": [],
    "tokenization_funnel": ["FunnelTokenizer"],
}

try:
       if not is_tokenizers_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       a__      :				Any   	=			["FunnelTokenizerFast"]

try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       a__      :				Tuple   	=			[
           "FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST",
           "FunnelBaseModel",
           "FunnelForMaskedLM",
           "FunnelForMultipleChoice",
           "FunnelForPreTraining",
           "FunnelForQuestionAnswering",
           "FunnelForSequenceClassification",
           "FunnelForTokenClassification",
           "FunnelModel",
           "FunnelPreTrainedModel",
           "load_tf_weights_in_funnel",
       ]

try:
       if not is_tf_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       a__      :				Dict   	=			[
           "TF_FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST",
           "TFFunnelBaseModel",
           "TFFunnelForMaskedLM",
           "TFFunnelForMultipleChoice",
           "TFFunnelForPreTraining",
           "TFFunnelForQuestionAnswering",
           "TFFunnelForSequenceClassification",
           "TFFunnelForTokenClassification",
           "TFFunnelModel",
           "TFFunnelPreTrainedModel",
       ]


if TYPE_CHECKING:
       from .configuration_funnel import FUNNEL_PRETRAINED_CONFIG_ARCHIVE_MAP, FunnelConfig
       from .tokenization_funnel import FunnelTokenizer

       try:
              if not is_tokenizers_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .tokenization_funnel_fast import FunnelTokenizerFast

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_funnel import (
                  FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST,
                  FunnelBaseModel,
                  FunnelForMaskedLM,
                  FunnelForMultipleChoice,
                  FunnelForPreTraining,
                  FunnelForQuestionAnswering,
                  FunnelForSequenceClassification,
                  FunnelForTokenClassification,
                  FunnelModel,
                  FunnelPreTrainedModel,
                  load_tf_weights_in_funnel,
              )

       try:
              if not is_tf_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_tf_funnel import (
                  TF_FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST,
                  TFFunnelBaseModel,
                  TFFunnelForMaskedLM,
                  TFFunnelForMultipleChoice,
                  TFFunnelForPreTraining,
                  TFFunnelForQuestionAnswering,
                  TFFunnelForSequenceClassification,
                  TFFunnelForTokenClassification,
                  TFFunnelModel,
                  TFFunnelPreTrainedModel,
              )

else:
       import sys

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





from __future__ import annotations

def   _lowerCAmelCase   (						A__						,  A__	):
      if b == 0:
            return (1, 0)
      ((lowercase__),	(lowercase__))     =  extended_euclid(A__						,  a % b	)
      lowercase__     =  a // b
      return (y, x - k * y)

def   _lowerCAmelCase   (						A__						,  A__						,  A__						,  A__	):
      ((lowercase__),	(lowercase__))     =  extended_euclid(A__						,  A__	)
      lowercase__     =  na * na
      lowercase__     =  ra * x * na + ra * y * na
      return (n % m + m) % m

def   _lowerCAmelCase   (						A__						,  A__	):
      ((lowercase__),	(lowercase__))     =  extended_euclid(A__						,  A__	)
      if b < 0:
            lowercase__     =  (b % n + n) % n
      return b

def   _lowerCAmelCase   (						A__						,  A__						,  A__						,  A__	):
      lowercase__,	lowercase__     =  invert_modulo(A__						,  A__	), invert_modulo(A__						,  A__	)
      lowercase__     =  na * na
      lowercase__     =  ra * x * na + ra * y * na
      return (n % m + m) % m


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

       testmod(name="chinese_remainder_theorem", verbose=True)
       testmod(name="chinese_remainder_theorem2", verbose=True)
       testmod(name="invert_modulo", verbose=True)
       testmod(name="extended_euclid", verbose=True)
