


'''simple docstring'''
from typing import TYPE_CHECKING

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


__snake_case											=					{
    '''configuration_rembert''': ['''REMBERT_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''RemBertConfig''', '''RemBertOnnxConfig''']
}

try:
		if not is_sentencepiece_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		__snake_case											=					['''RemBertTokenizer''']

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

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		__snake_case											=					[
		    '''REMBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''RemBertForCausalLM''',
		    '''RemBertForMaskedLM''',
		    '''RemBertForMultipleChoice''',
		    '''RemBertForQuestionAnswering''',
		    '''RemBertForSequenceClassification''',
		    '''RemBertForTokenClassification''',
		    '''RemBertLayer''',
		    '''RemBertModel''',
		    '''RemBertPreTrainedModel''',
		    '''load_tf_weights_in_rembert''',
		]


try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		__snake_case											=					[
		    '''TF_REMBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''TFRemBertForCausalLM''',
		    '''TFRemBertForMaskedLM''',
		    '''TFRemBertForMultipleChoice''',
		    '''TFRemBertForQuestionAnswering''',
		    '''TFRemBertForSequenceClassification''',
		    '''TFRemBertForTokenClassification''',
		    '''TFRemBertLayer''',
		    '''TFRemBertModel''',
		    '''TFRemBertPreTrainedModel''',
		]


if TYPE_CHECKING:
		from .configuration_rembert import REMBERT_PRETRAINED_CONFIG_ARCHIVE_MAP, RemBertConfig, RemBertOnnxConfig

		try:
				if not is_sentencepiece_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_rembert import RemBertTokenizer

		try:
				if not is_tokenizers_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_rembert_fast import RemBertTokenizerFast

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_rembert import (
				    REMBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    RemBertForCausalLM,
				    RemBertForMaskedLM,
				    RemBertForMultipleChoice,
				    RemBertForQuestionAnswering,
				    RemBertForSequenceClassification,
				    RemBertForTokenClassification,
				    RemBertLayer,
				    RemBertModel,
				    RemBertPreTrainedModel,
				    load_tf_weights_in_rembert,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_rembert import (
				    TF_REMBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFRemBertForCausalLM,
				    TFRemBertForMaskedLM,
				    TFRemBertForMultipleChoice,
				    TFRemBertForQuestionAnswering,
				    TFRemBertForSequenceClassification,
				    TFRemBertForTokenClassification,
				    TFRemBertLayer,
				    TFRemBertModel,
				    TFRemBertPreTrainedModel,
				)


else:
		import sys

		__snake_case											=					_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)






'''simple docstring'''
from math import ceil


def       a				(      __a			, __a       )  ->     Any:



					'''simple docstring'''






					UpperCamelCase__       :str							 =			list(range(0			, __a       )       )

					UpperCamelCase__       :Optional[int]							 =			[item for sublist in list(device_map.values()       ) for item in sublist]

					# Duplicate check
					UpperCamelCase__       :Optional[int]							 =			[]
					for i in device_map_blocks:
										if device_map_blocks.count(__a       ) > 1 and i not in duplicate_blocks:
															duplicate_blocks.append(__a       )
    # Missing blocks
					UpperCamelCase__       :List[str]							 =			[i for i in blocks if i not in device_map_blocks]
					UpperCamelCase__       :Optional[Any]							 =			[i for i in device_map_blocks if i not in blocks]

					if len(__a       ) != 0:
										raise ValueError(
										    '''Duplicate attention blocks specified in device_map. Attention blocks must be specified to one device.'''
										    ''' These attention blocks were specified more than once: ''' + str(__a       )       )
					if len(__a       ) != 0:
										raise ValueError(
										    '''There are attention blocks for this model that are not specified in the device_map. Add these attention '''
										    '''blocks to a device on the device_map: ''' + str(__a       )       )
					if len(__a       ) != 0:
										raise ValueError(
										    '''The device_map contains more attention blocks than this model has. Remove these from the device_map:'''
										    + str(__a       )       )







def       a				(      __a			, __a       )  ->     Tuple:



					'''simple docstring'''






					UpperCamelCase__       :Optional[Any]							 =			list(range(__a       )       )
					UpperCamelCase__       :Any							 =			int(ceil(n_layers / len(__a       )       )       )
					UpperCamelCase__       :List[Any]							 =			[layers[i : i + n_blocks] for i in range(0			, __a			, __a       )]

					return dict(zip(__a			, __a       )       )