


import importlib
import os
import platform
from pathlib import Path

from packaging import version

from .utils.logging import get_logger


UpperCAmelCase__            =							get_logger(__name__)

# Datasets
UpperCAmelCase__            =							'''https://s3.amazonaws.com/datasets.huggingface.co/datasets/datasets'''
UpperCAmelCase__            =							'''https://cdn-datasets.huggingface.co/datasets/datasets'''
UpperCAmelCase__            =							'''https://raw.githubusercontent.com/huggingface/datasets/{revision}/datasets/{path}/{name}'''

# Metrics
UpperCAmelCase__            =							'''https://s3.amazonaws.com/datasets.huggingface.co/datasets/metrics'''
UpperCAmelCase__            =							'''https://cdn-datasets.huggingface.co/datasets/metric'''
UpperCAmelCase__            =							'''https://raw.githubusercontent.com/huggingface/datasets/{revision}/metrics/{path}/{name}'''

# Hub
UpperCAmelCase__            =							os.environ.get('''HF_ENDPOINT''', '''https://huggingface.co''')
UpperCAmelCase__            =							HF_ENDPOINT + '''/datasets/{repo_id}/resolve/{revision}/{path}'''
UpperCAmelCase__            =							'''main'''

UpperCAmelCase__            =							version.parse(platform.python_version())

if PY_VERSION < version.parse('''3.8'''):
  import importlib_metadata
else:
  import importlib.metadata as importlib_metadata

# General environment variables accepted values for booleans
UpperCAmelCase__            =							{'''1''', '''ON''', '''YES''', '''TRUE'''}
UpperCAmelCase__            =							ENV_VARS_TRUE_VALUES.union({'''AUTO'''})


# Imports
UpperCAmelCase__            =							version.parse(importlib_metadata.version('''dill'''))
UpperCAmelCase__            =							version.parse(importlib_metadata.version('''pandas'''))
UpperCAmelCase__            =							version.parse(importlib_metadata.version('''pyarrow'''))

UpperCAmelCase__            =							os.environ.get('''USE_TF''', '''AUTO''').upper()
UpperCAmelCase__            =							os.environ.get('''USE_TORCH''', '''AUTO''').upper()
UpperCAmelCase__            =							os.environ.get('''USE_JAX''', '''AUTO''').upper()

UpperCAmelCase__            =							'''N/A'''
UpperCAmelCase__            =							False

if USE_TORCH in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TF not in ENV_VARS_TRUE_VALUES:
  UpperCAmelCase__            =							importlib.util.find_spec('''torch''') is not None
  if TORCH_AVAILABLE:
    try:
      UpperCAmelCase__            =							version.parse(importlib_metadata.version('''torch'''))
      logger.info(f'''PyTorch version {TORCH_VERSION} available.''')
    except importlib_metadata.PackageNotFoundError:
      pass
else:
  logger.info('''Disabling PyTorch because USE_TF is set''')

UpperCAmelCase__            =							'''N/A'''
UpperCAmelCase__            =							False

if USE_TF in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TORCH not in ENV_VARS_TRUE_VALUES:
  UpperCAmelCase__            =							importlib.util.find_spec('''tensorflow''') is not None
  if TF_AVAILABLE:
    # For the metadata, we have to look for both tensorflow and tensorflow-cpu
    for package in [
        "tensorflow",
        "tensorflow-cpu",
        "tensorflow-gpu",
        "tf-nightly",
        "tf-nightly-cpu",
        "tf-nightly-gpu",
        "intel-tensorflow",
        "tensorflow-rocm",
        "tensorflow-macos",
    ]:
      try:
        UpperCAmelCase__            =							version.parse(importlib_metadata.version(package))
      except importlib_metadata.PackageNotFoundError:
        continue
      else:
        break
    else:
      UpperCAmelCase__            =							False
  if TF_AVAILABLE:
    if TF_VERSION.major < 2:
      logger.info(f'''TensorFlow found but with version {TF_VERSION}. `datasets` requires version 2 minimum.''')
      UpperCAmelCase__            =							False
    else:
      logger.info(f'''TensorFlow version {TF_VERSION} available.''')
else:
  logger.info('''Disabling Tensorflow because USE_TORCH is set''')


UpperCAmelCase__            =							'''N/A'''
UpperCAmelCase__            =							False

if USE_JAX in ENV_VARS_TRUE_AND_AUTO_VALUES:
  UpperCAmelCase__            =							importlib.util.find_spec('''jax''') is not None and importlib.util.find_spec('''jaxlib''') is not None
  if JAX_AVAILABLE:
    try:
      UpperCAmelCase__            =							version.parse(importlib_metadata.version('''jax'''))
      logger.info(f'''JAX version {JAX_VERSION} available.''')
    except importlib_metadata.PackageNotFoundError:
      pass
else:
  logger.info('''Disabling JAX because USE_JAX is set to False''')


UpperCAmelCase__            =							os.environ.get('''USE_BEAM''', '''AUTO''').upper()
UpperCAmelCase__            =							'''N/A'''
UpperCAmelCase__            =							False
if USE_BEAM in ENV_VARS_TRUE_AND_AUTO_VALUES:
  try:
    UpperCAmelCase__            =							version.parse(importlib_metadata.version('''apache_beam'''))
    UpperCAmelCase__            =							True
    logger.info(f'''Apache Beam version {BEAM_VERSION} available.''')
  except importlib_metadata.PackageNotFoundError:
    pass
else:
  logger.info('''Disabling Apache Beam because USE_BEAM is set to False''')


# Optional tools for data loading
UpperCAmelCase__            =							importlib.util.find_spec('''sqlalchemy''') is not None

# Optional tools for feature decoding
UpperCAmelCase__            =							importlib.util.find_spec('''PIL''') is not None
UpperCAmelCase__            =							importlib.util.find_spec('''soundfile''') is not None and version.parse(
    importlib.import_module('''soundfile''').__libsndfile_version__
) >= version.parse('''1.0.31''')
UpperCAmelCase__            =							importlib.util.find_spec('''soundfile''') is not None and version.parse(
    importlib.import_module('''soundfile''').__libsndfile_version__
) >= version.parse('''1.1.0''')

# Optional compression tools
UpperCAmelCase__            =							importlib.util.find_spec('''rarfile''') is not None
UpperCAmelCase__            =							importlib.util.find_spec('''zstandard''') is not None
UpperCAmelCase__            =							importlib.util.find_spec('''lz4''') is not None
UpperCAmelCase__            =							importlib.util.find_spec('''py7zr''') is not None


# Cache location
UpperCAmelCase__            =							'''~/.cache'''
UpperCAmelCase__            =							os.getenv('''XDG_CACHE_HOME''', DEFAULT_XDG_CACHE_HOME)
UpperCAmelCase__            =							os.path.join(XDG_CACHE_HOME, '''huggingface''')
UpperCAmelCase__            =							os.path.expanduser(os.getenv('''HF_HOME''', DEFAULT_HF_CACHE_HOME))

UpperCAmelCase__            =							os.path.join(HF_CACHE_HOME, '''datasets''')
UpperCAmelCase__            =							Path(os.getenv('''HF_DATASETS_CACHE''', DEFAULT_HF_DATASETS_CACHE))

UpperCAmelCase__            =							os.path.join(HF_CACHE_HOME, '''metrics''')
UpperCAmelCase__            =							Path(os.getenv('''HF_METRICS_CACHE''', DEFAULT_HF_METRICS_CACHE))

UpperCAmelCase__            =							os.path.join(HF_CACHE_HOME, '''modules''')
UpperCAmelCase__            =							Path(os.getenv('''HF_MODULES_CACHE''', DEFAULT_HF_MODULES_CACHE))

UpperCAmelCase__            =							'''downloads'''
UpperCAmelCase__            =							os.path.join(HF_DATASETS_CACHE, DOWNLOADED_DATASETS_DIR)
UpperCAmelCase__            =							Path(os.getenv('''HF_DATASETS_DOWNLOADED_DATASETS_PATH''', DEFAULT_DOWNLOADED_DATASETS_PATH))

UpperCAmelCase__            =							'''extracted'''
UpperCAmelCase__            =							os.path.join(DEFAULT_DOWNLOADED_DATASETS_PATH, EXTRACTED_DATASETS_DIR)
UpperCAmelCase__            =							Path(os.getenv('''HF_DATASETS_EXTRACTED_DATASETS_PATH''', DEFAULT_EXTRACTED_DATASETS_PATH))

# Download count for the website
UpperCAmelCase__            =							(
    os.environ.get('''HF_UPDATE_DOWNLOAD_COUNTS''', '''AUTO''').upper() in ENV_VARS_TRUE_AND_AUTO_VALUES
)

# Batch size constants. For more info, see:
# https://github.com/apache/arrow/blob/master/docs/source/cpp/arrays.rst#size-limitations-and-recommendations)
UpperCAmelCase__            =							1000

# Size of the preloaded record batch in `Dataset.__iter__`
UpperCAmelCase__            =							10

# Pickling tables works only for small tables (<4GiB)
# For big tables, we write them on disk instead
UpperCAmelCase__            =							4 << 30

# Max shard size in bytes (e.g. to shard parquet datasets in push_to_hub or download_and_prepare)
UpperCAmelCase__            =							'''500MB'''

# Parquet configuration
UpperCAmelCase__            =							100
UpperCAmelCase__            =							100
UpperCAmelCase__            =							100

# Offline mode
UpperCAmelCase__            =							os.environ.get('''HF_DATASETS_OFFLINE''', '''AUTO''').upper() in ENV_VARS_TRUE_VALUES

# In-memory
UpperCAmelCase__            =							0  # Disabled
UpperCAmelCase__            =							float(os.environ.get('''HF_DATASETS_IN_MEMORY_MAX_SIZE''', DEFAULT_IN_MEMORY_MAX_SIZE))

# File names
UpperCAmelCase__            =							'''dataset.arrow'''
UpperCAmelCase__            =							'''indices.arrow'''
UpperCAmelCase__            =							'''state.json'''
UpperCAmelCase__            =							'''dataset_info.json'''
UpperCAmelCase__            =							'''dataset_infos.json'''
UpperCAmelCase__            =							'''LICENSE'''
UpperCAmelCase__            =							'''metric_info.json'''
UpperCAmelCase__            =							'''dataset_dict.json'''

UpperCAmelCase__            =							'''datasets_modules'''

UpperCAmelCase__            =							255

# Streaming
UpperCAmelCase__            =							20
UpperCAmelCase__            =							5

# Datasets without script
UpperCAmelCase__            =							200
UpperCAmelCase__            =							10
UpperCAmelCase__            =							200

# Progress bars
UpperCAmelCase__            =							0.05  # 20 progress updates per sec





from collections import OrderedDict
from typing import TYPE_CHECKING, Any, Mapping, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


if TYPE_CHECKING:
  from ... import FeatureExtractionMixin, PreTrainedTokenizerBase, TensorType


UpperCAmelCase__            =							logging.get_logger(__name__)

UpperCAmelCase__            =							{
    '''microsoft/deberta-base''': '''https://huggingface.co/microsoft/deberta-base/resolve/main/config.json''',
    '''microsoft/deberta-large''': '''https://huggingface.co/microsoft/deberta-large/resolve/main/config.json''',
    '''microsoft/deberta-xlarge''': '''https://huggingface.co/microsoft/deberta-xlarge/resolve/main/config.json''',
    '''microsoft/deberta-base-mnli''': '''https://huggingface.co/microsoft/deberta-base-mnli/resolve/main/config.json''',
    '''microsoft/deberta-large-mnli''': '''https://huggingface.co/microsoft/deberta-large-mnli/resolve/main/config.json''',
    '''microsoft/deberta-xlarge-mnli''': '''https://huggingface.co/microsoft/deberta-xlarge-mnli/resolve/main/config.json''',
}







class 				lowerCamelCase__       (	lowerCAmelCase):
     SCREAMING_SNAKE_CASE__				      =      '''deberta'''





     def __init__(self		,					UpperCAmelCase=5_0_2_6_5		,					UpperCAmelCase=7_6_8		,					UpperCAmelCase=1_2		,					UpperCAmelCase=1_2		,					UpperCAmelCase=3_0_7_2		,					UpperCAmelCase="gelu"		,					UpperCAmelCase=0.1		,					UpperCAmelCase=0.1		,					UpperCAmelCase=5_1_2		,					UpperCAmelCase=0		,					UpperCAmelCase=0.02		,					UpperCAmelCase=1e-7		,					UpperCAmelCase=False		,					UpperCAmelCase=-1		,					UpperCAmelCase=0		,					UpperCAmelCase=True		,					UpperCAmelCase=None		,					UpperCAmelCase=0		,					UpperCAmelCase="gelu"		,					**UpperCAmelCase		,					)					->       Dict:
      super().__init__(**UpperCAmelCase	)

      _lowercase											=hidden_size
      _lowercase											=num_hidden_layers
      _lowercase											=num_attention_heads
      _lowercase											=intermediate_size
      _lowercase											=hidden_act
      _lowercase											=hidden_dropout_prob
      _lowercase											=attention_probs_dropout_prob
      _lowercase											=max_position_embeddings
      _lowercase											=type_vocab_size
      _lowercase											=initializer_range
      _lowercase											=relative_attention
      _lowercase											=max_relative_positions
      _lowercase											=pad_token_id
      _lowercase											=position_biased_input

      # Backwards compatibility
      if type(UpperCAmelCase	) == str:
       _lowercase											=[x.strip() for x in pos_att_type.lower().split('''|'''	)]

      _lowercase											=pos_att_type
      _lowercase											=vocab_size
      _lowercase											=layer_norm_eps

      _lowercase											=kwargs.get('''pooler_hidden_size'''		,					UpperCAmelCase	)
      _lowercase											=pooler_dropout
      _lowercase											=pooler_hidden_act







class 				lowerCamelCase__       (	lowerCAmelCase):





     @property
     def 					__A (self	)					->       Mapping[str, Mapping[int, str]]:
      if self.task == "multiple-choice":
       _lowercase											={0: '''batch''', 1: '''choice''', 2: '''sequence'''}
      else:
       _lowercase											={0: '''batch''', 1: '''sequence'''}
      if self._config.type_vocab_size > 0:
       return OrderedDict(
           [('''input_ids''', dynamic_axis), ('''attention_mask''', dynamic_axis), ('''token_type_ids''', dynamic_axis)]	)
      else:
       return OrderedDict([('''input_ids''', dynamic_axis), ('''attention_mask''', dynamic_axis)]	)





     @property
     def 					__A (self	)					->       int:
      return 1_2





     def 					__A (self		,					UpperCAmelCase		,					UpperCAmelCase = -1		,					UpperCAmelCase = -1		,					UpperCAmelCase = -1		,					UpperCAmelCase = False		,					UpperCAmelCase = None		,					UpperCAmelCase = 3		,					UpperCAmelCase = 4_0		,					UpperCAmelCase = 4_0		,					UpperCAmelCase = None		,					)					->       Mapping[str, Any]:
      _lowercase											=super().generate_dummy_inputs(preprocessor=UpperCAmelCase		,					framework=UpperCAmelCase	)
      if self._config.type_vocab_size == 0 and "token_type_ids" in dummy_inputs:
       del dummy_inputs["token_type_ids"]
      return dummy_inputs

