






'''simple docstring'''







from typing import TYPE_CHECKING

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


_A     :      int   					={'''configuration_vit''': ['''VIT_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''ViTConfig''', '''ViTOnnxConfig''']}

try:
			if not is_vision_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			_A     :      Tuple   					=['''ViTFeatureExtractor''']
			_A     :      List[Any]   					=['''ViTImageProcessor''']

try:
			if not is_torch_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			_A     :      int   					=[
			    '''VIT_PRETRAINED_MODEL_ARCHIVE_LIST''',
			    '''ViTForImageClassification''',
			    '''ViTForMaskedImageModeling''',
			    '''ViTModel''',
			    '''ViTPreTrainedModel''',
			]

try:
			if not is_tf_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			_A     :      int   					=[
			    '''TFViTForImageClassification''',
			    '''TFViTModel''',
			    '''TFViTPreTrainedModel''',
			]

try:
			if not is_flax_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			_A     :      Any   					=[
			    '''FlaxViTForImageClassification''',
			    '''FlaxViTModel''',
			    '''FlaxViTPreTrainedModel''',
			]

if TYPE_CHECKING:
			from .configuration_vit import VIT_PRETRAINED_CONFIG_ARCHIVE_MAP, ViTConfig, ViTOnnxConfig

			try:
						if not is_vision_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .feature_extraction_vit import ViTFeatureExtractor
						from .image_processing_vit import ViTImageProcessor

			try:
						if not is_torch_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .modeling_vit import (
						    VIT_PRETRAINED_MODEL_ARCHIVE_LIST,
						    ViTForImageClassification,
						    ViTForMaskedImageModeling,
						    ViTModel,
						    ViTPreTrainedModel,
						)

			try:
						if not is_tf_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .modeling_tf_vit import TFViTForImageClassification, TFViTModel, TFViTPreTrainedModel

			try:
						if not is_flax_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .modeling_flax_vit import FlaxViTForImageClassification, FlaxViTModel, FlaxViTPreTrainedModel


else:
			import sys

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









'''simple docstring'''







def 			SCREAMING_SNAKE_CASE_	(UpperCamelCase				)				->	list:

							# bit count represents no. of bits in the gray code
							if bit_count < 0:
														raise ValueError("""The given input must be positive"""				)

							# get the generated string sequence
							lowerCamelCase__ :     List[str]	  =	gray_code_sequence_string(UpperCamelCase				)
							#
							# convert them to integers
							for i in range(len(UpperCamelCase				)				):
														lowerCamelCase__ :     int	  =	int(sequence[i]    ,      2				)

							return sequence





def 			SCREAMING_SNAKE_CASE_	(UpperCamelCase				)				->	list:

							# The approach is a recursive one
							# Base case achieved when either n = 0 or n=1
							if bit_count == 0:
														return ["0"]

							if bit_count == 1:
														return ["0", "1"]

							lowerCamelCase__ :     Optional[Any]	  =	1 << bit_count  # defines the length of the sequence
							# 1<< n is equivalent to 2^n

							# recursive answer will generate answer for n-1 bits
							lowerCamelCase__ :     Any	  =	gray_code_sequence_string(bit_count - 1				)

							lowerCamelCase__ :     Union[str, Any]	  =	[]

							# append 0 to first half of the smaller sequence generated
							for i in range(seq_len // 2				):
														lowerCamelCase__ :     Optional[int]	  =	"""0""" + smaller_sequence[i]
														sequence.append(UpperCamelCase				)

							# append 1 to second half ... start from the end of the list
							for i in reversed(range(seq_len // 2				)				):
														lowerCamelCase__ :     int	  =	"""1""" + smaller_sequence[i]
														sequence.append(UpperCamelCase				)

							return sequence


if __name__ == "__main__":
			import doctest

			doctest.testmod()

