


'''simple docstring'''



import unittest

from transformers.utils.backbone_utils import (
    BackboneMixin,
    get_aligned_output_features_output_indices,
    verify_out_features_out_indices,
)





class 							__UpperCamelCase    (		unittest.TestCase ):




	def 				__UpperCAmelCase							(       self							):

						'''simple docstring'''





						__a      :	int    =  ['a', 'b', 'c']

						# Defaults to last layer if both are None
						__a      :	int    =  get_aligned_output_features_output_indices(__a						,    __a						,    __a							)
						self.assertEqual(__a						,    ['c']							)
						self.assertEqual(__a						,    [2]							)

						# Out indices set to match out features
						__a      :	Any    =  get_aligned_output_features_output_indices(['a', 'c']						,    __a						,    __a							)
						self.assertEqual(__a						,    ['a', 'c']							)
						self.assertEqual(__a						,    [0, 2]							)

						# Out features set to match out indices
						__a      :	str    =  get_aligned_output_features_output_indices(__a						,    [0, 2]						,    __a							)
						self.assertEqual(__a						,    ['a', 'c']							)
						self.assertEqual(__a						,    [0, 2]							)

						# Out features selected from negative indices
						__a      :	Any    =  get_aligned_output_features_output_indices(__a						,    [-3, -1]						,    __a							)
						self.assertEqual(__a						,    ['a', 'c']							)
						self.assertEqual(__a						,    [-3, -1]							)




	def 				__UpperCAmelCase							(       self							):

						'''simple docstring'''





						with self.assertRaises(__a							):
											verify_out_features_out_indices(['a', 'b']						,    (0, 1)						,    __a							)

						# Out features must be a list
						with self.assertRaises(__a							):
											verify_out_features_out_indices(('a', 'b')						,    (0, 1)						,    ['a', 'b']							)

						# Out features must be a subset of stage names
						with self.assertRaises(__a							):
											verify_out_features_out_indices(['a', 'b']						,    (0, 1)						,    ['a']							)

						# Out indices must be a list or tuple
						with self.assertRaises(__a							):
											verify_out_features_out_indices(__a						,    0						,    ['a', 'b']							)

						# Out indices must be a subset of stage names
						with self.assertRaises(__a							):
											verify_out_features_out_indices(__a						,    (0, 1)						,    ['a']							)

						# Out features and out indices must be the same length
						with self.assertRaises(__a							):
											verify_out_features_out_indices(['a', 'b']						,    (0,)						,    ['a', 'b', 'c']							)

						# Out features should match out indices
						with self.assertRaises(__a							):
											verify_out_features_out_indices(['a', 'b']						,    (0, 2)						,    ['a', 'b', 'c']							)

						# Out features and out indices should be in order
						with self.assertRaises(__a							):
											verify_out_features_out_indices(['b', 'a']						,    (0, 1)						,    ['a', 'b']							)

						# Check passes with valid inputs
						verify_out_features_out_indices(['a', 'b', 'd']						,    (0, 1, -1)						,    ['a', 'b', 'c', 'd']							)





	def 				__UpperCAmelCase							(       self							):

						'''simple docstring'''





						__a      :	str    =  BackboneMixin()

						__a      :	Optional[Any]    =  ['a', 'b', 'c']
						__a      :	Optional[Any]    =  ['a', 'c']
						__a      :	Tuple    =  [0, 2]

						# Check that the output features and indices are set correctly
						self.assertEqual(backbone.out_features						,    ['a', 'c']							)
						self.assertEqual(backbone.out_indices						,    [0, 2]							)

						# Check out features and indices are updated correctly
						__a      :	Optional[Any]    =  ['a', 'b']
						self.assertEqual(backbone.out_features						,    ['a', 'b']							)
						self.assertEqual(backbone.out_indices						,    [0, 1]							)

						__a      :	List[Any]    =  [-3, -1]
						self.assertEqual(backbone.out_features						,    ['a', 'c']							)
						self.assertEqual(backbone.out_indices						,    [-3, -1]							)







'''simple docstring'''



from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


__lowercase     :						Union[str, Any]	=     {
    'configuration_roc_bert': ['ROC_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'RoCBertConfig'],
    'tokenization_roc_bert': ['RoCBertTokenizer'],
}

try:
	if not is_tokenizers_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	pass

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	__lowercase     :						List[str]	=     [
	    'ROC_BERT_PRETRAINED_MODEL_ARCHIVE_LIST',
	    'RoCBertForCausalLM',
	    'RoCBertForMaskedLM',
	    'RoCBertForMultipleChoice',
	    'RoCBertForPreTraining',
	    'RoCBertForQuestionAnswering',
	    'RoCBertForSequenceClassification',
	    'RoCBertForTokenClassification',
	    'RoCBertLayer',
	    'RoCBertModel',
	    'RoCBertPreTrainedModel',
	    'load_tf_weights_in_roc_bert',
	]

if TYPE_CHECKING:
	from .configuration_roc_bert import ROC_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP, RoCBertConfig
	from .tokenization_roc_bert import RoCBertTokenizer

	try:
		if not is_tokenizers_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		raise OptionalDependencyNotAvailable()

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_roc_bert import (
		    ROC_BERT_PRETRAINED_MODEL_ARCHIVE_LIST,
		    RoCBertForCausalLM,
		    RoCBertForMaskedLM,
		    RoCBertForMultipleChoice,
		    RoCBertForPreTraining,
		    RoCBertForQuestionAnswering,
		    RoCBertForSequenceClassification,
		    RoCBertForTokenClassification,
		    RoCBertLayer,
		    RoCBertModel,
		    RoCBertPreTrainedModel,
		    load_tf_weights_in_roc_bert,
		)


else:
	import sys

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



