from typing import TYPE_CHECKING

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


snake_case__				= {
    'configuration_electra': ['ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP', 'ElectraConfig', 'ElectraOnnxConfig'],
    'tokenization_electra': ['ElectraTokenizer'],
}

try:
     if not is_tokenizers_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     snake_case__				= ['ElectraTokenizerFast']

try:
     if not is_torch_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     snake_case__				= [
         '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:
     snake_case__				= [
         '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:
     snake_case__				= [
         '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

     snake_case__				= _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)
from .testing import (
    are_the_same_tensors,
    execute_subprocess_async,
    require_bnb,
    require_cpu,
    require_cuda,
    require_huggingface_suite,
    require_mps,
    require_multi_gpu,
    require_multi_xpu,
    require_safetensors,
    require_single_gpu,
    require_single_xpu,
    require_torch_min_version,
    require_tpu,
    require_xpu,
    skip,
    slow,
)
from .training import RegressionDataset, RegressionModel, RegressionModelaXPU


from .scripts import test_script, test_sync, test_ops  # isort: skip