



from typing import TYPE_CHECKING

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


lowerCamelCase							:Dict       = {
    "configuration_distilbert": [
        "DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP",
        "DistilBertConfig",
        "DistilBertOnnxConfig",
    ],
    "tokenization_distilbert": ["DistilBertTokenizer"],
}

try:
						if not is_tokenizers_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCamelCase							:str       = ["DistilBertTokenizerFast"]

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCamelCase							:Union[str, Any]       = [
						    "DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST",
						    "DistilBertForMaskedLM",
						    "DistilBertForMultipleChoice",
						    "DistilBertForQuestionAnswering",
						    "DistilBertForSequenceClassification",
						    "DistilBertForTokenClassification",
						    "DistilBertModel",
						    "DistilBertPreTrainedModel",
						]

try:
						if not is_tf_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCamelCase							:int       = [
						    "TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST",
						    "TFDistilBertForMaskedLM",
						    "TFDistilBertForMultipleChoice",
						    "TFDistilBertForQuestionAnswering",
						    "TFDistilBertForSequenceClassification",
						    "TFDistilBertForTokenClassification",
						    "TFDistilBertMainLayer",
						    "TFDistilBertModel",
						    "TFDistilBertPreTrainedModel",
						]

try:
						if not is_flax_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCamelCase							:Optional[Any]       = [
						    "FlaxDistilBertForMaskedLM",
						    "FlaxDistilBertForMultipleChoice",
						    "FlaxDistilBertForQuestionAnswering",
						    "FlaxDistilBertForSequenceClassification",
						    "FlaxDistilBertForTokenClassification",
						    "FlaxDistilBertModel",
						    "FlaxDistilBertPreTrainedModel",
						]


if TYPE_CHECKING:
						from .configuration_distilbert import (
						    DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
						    DistilBertConfig,
						    DistilBertOnnxConfig,
						)
						from .tokenization_distilbert import DistilBertTokenizer

						try:
												if not is_tokenizers_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .tokenization_distilbert_fast import DistilBertTokenizerFast

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_distilbert import (
												    DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    DistilBertForMaskedLM,
												    DistilBertForMultipleChoice,
												    DistilBertForQuestionAnswering,
												    DistilBertForSequenceClassification,
												    DistilBertForTokenClassification,
												    DistilBertModel,
												    DistilBertPreTrainedModel,
												)

						try:
												if not is_tf_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_tf_distilbert import (
												    TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    TFDistilBertForMaskedLM,
												    TFDistilBertForMultipleChoice,
												    TFDistilBertForQuestionAnswering,
												    TFDistilBertForSequenceClassification,
												    TFDistilBertForTokenClassification,
												    TFDistilBertMainLayer,
												    TFDistilBertModel,
												    TFDistilBertPreTrainedModel,
												)

						try:
												if not is_flax_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_flax_distilbert import (
												    FlaxDistilBertForMaskedLM,
												    FlaxDistilBertForMultipleChoice,
												    FlaxDistilBertForQuestionAnswering,
												    FlaxDistilBertForSequenceClassification,
												    FlaxDistilBertForTokenClassification,
												    FlaxDistilBertModel,
												    FlaxDistilBertPreTrainedModel,
												)

else:
						import sys

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




'''simple docstring'''




import unittest

import numpy as np
import torch

from .utils_summarization import build_mask, compute_token_type_ids, process_story, truncate_or_pad







class      _lowerCAmelCase							(      unittest.TestCase			):


	def    _a     (self							):
				A_     :						Dict     =					10


	def    _a     (self							):
				A_     :						str     =					[1, 2, 3, 4]
				A_     :						List[str]     =					[1, 2, 3, 4, 0, 0, 0, 0, 0, 0]
				self.assertEqual(truncate_or_pad(lowercase	,				self.block_size	,				0							)	,				lowercase							)


	def    _a     (self							):
				A_     :						str     =					[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
				A_     :						Tuple     =					[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
				self.assertEqual(truncate_or_pad(lowercase	,				self.block_size	,				0							)	,				lowercase							)


	def    _a     (self							):
				A_     :						List[Any]     =					[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
				A_     :						str     =					[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
				self.assertEqual(truncate_or_pad(lowercase	,				self.block_size	,				0							)	,				lowercase							)


	def    _a     (self							):
				A_     :						Any     =					"""It was the year of Our Lord one thousand seven hundred and
        seventy-five.\n\nSpiritual revelations were conceded to England at that
        favoured period, as at this."""
				A_,   A_     :						Optional[int]     =					process_story(lowercase							)
				self.assertEqual(lowercase	,				[]							)


	def    _a     (self							):
				A_     :						Union[str, Any]     =					""""""
				A_,   A_     :						Union[str, Any]     =					process_story(lowercase							)
				self.assertEqual(lowercase	,				[]							)
				self.assertEqual(lowercase	,				[]							)


	def    _a     (self							):
				A_     :						List[Any]     =					(
				    """It was the year of Our Lord one thousand seven hundred and """
				    """seventy-five\n\nSpiritual revelations were conceded to England """
				    """at that favoured period, as at this.\n@highlight\n\nIt was the best of times"""
				)
				A_,   A_     :						int     =					process_story(lowercase							)

				A_     :						List[Any]     =					[
				    """It was the year of Our Lord one thousand seven hundred and seventy-five.""",
				    """Spiritual revelations were conceded to England at that favoured period, as at this.""",
				]
				self.assertEqual(lowercase	,				lowercase							)

				A_     :						Tuple     =					["""It was the best of times."""]
				self.assertEqual(lowercase	,				lowercase							)


	def    _a     (self							):
				A_     :						Dict     =					torch.tensor([1, 2, 3, 4]							)
				A_     :						Union[str, Any]     =					torch.tensor([1, 1, 1, 1]							)
				np.testing.assert_array_equal(build_mask(lowercase	,				0							).numpy()	,				expected.numpy()							)


	def    _a     (self							):
				A_     :						Union[str, Any]     =					torch.tensor([1, 2, 3, 4, 23, 23, 23]							)
				A_     :						List[str]     =					torch.tensor([1, 1, 1, 1, 0, 0, 0]							)
				np.testing.assert_array_equal(build_mask(lowercase	,				23							).numpy()	,				expected.numpy()							)


	def    _a     (self							):
				A_     :						Optional[Any]     =					torch.tensor([8, 2, 3, 4, 1, 1, 1]							)
				A_     :						Tuple     =					torch.tensor([1, 1, 1, 1, 0, 0, 0]							)
				np.testing.assert_array_equal(build_mask(lowercase	,				1							).numpy()	,				expected.numpy()							)


	def    _a     (self							):
				A_     :						List[str]     =					101
				A_     :						str     =					torch.tensor([[1, 2, 3, 4, 5, 6], [1, 2, 3, 101, 5, 6], [1, 101, 3, 4, 101, 6]]							)
				A_     :						int     =					torch.tensor([[1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0], [1, 0, 0, 0, 1, 1]]							)

				A_     :						Optional[Any]     =					compute_token_type_ids(lowercase	,				lowercase							)
				np.testing.assert_array_equal(lowercase	,				lowercase							)