



"""simple docstring"""






import importlib
import inspect
import json
import os
from collections import OrderedDict

# Build the list of all feature extractors
from ...configuration_utils import PretrainedConfig
from ...dynamic_module_utils import get_class_from_dynamic_module, resolve_trust_remote_code
from ...feature_extraction_utils import FeatureExtractionMixin
from ...image_processing_utils import ImageProcessingMixin
from ...tokenization_utils import TOKENIZER_CONFIG_FILE
from ...utils import FEATURE_EXTRACTOR_NAME, get_file_from_repo, logging
from .auto_factory import _LazyAutoMapping
from .configuration_auto import (
    CONFIG_MAPPING_NAMES,
    AutoConfig,
    model_type_to_module_name,
    replace_list_option_in_docstrings,
)
from .feature_extraction_auto import AutoFeatureExtractor
from .image_processing_auto import AutoImageProcessor
from .tokenization_auto import AutoTokenizer


__UpperCAmelCase      :      List[Any]   					=					logging.get_logger(__name__)

__UpperCAmelCase      :      Union[str, Any]   					=					OrderedDict(
    [
        ('align', 'AlignProcessor'),
        ('altclip', 'AltCLIPProcessor'),
        ('bark', 'BarkProcessor'),
        ('blip', 'BlipProcessor'),
        ('blip-2', 'Blip2Processor'),
        ('bridgetower', 'BridgeTowerProcessor'),
        ('chinese_clip', 'ChineseCLIPProcessor'),
        ('clap', 'ClapProcessor'),
        ('clip', 'CLIPProcessor'),
        ('clipseg', 'CLIPSegProcessor'),
        ('flava', 'FlavaProcessor'),
        ('git', 'GitProcessor'),
        ('groupvit', 'CLIPProcessor'),
        ('hubert', 'Wav2Vec2Processor'),
        ('instructblip', 'InstructBlipProcessor'),
        ('layoutlmv2', 'LayoutLMv2Processor'),
        ('layoutlmv3', 'LayoutLMv3Processor'),
        ('markuplm', 'MarkupLMProcessor'),
        ('mctct', 'MCTCTProcessor'),
        ('mgp-str', 'MgpstrProcessor'),
        ('oneformer', 'OneFormerProcessor'),
        ('owlvit', 'OwlViTProcessor'),
        ('pix2struct', 'Pix2StructProcessor'),
        ('sam', 'SamProcessor'),
        ('sew', 'Wav2Vec2Processor'),
        ('sew-d', 'Wav2Vec2Processor'),
        ('speech_to_text', 'Speech2TextProcessor'),
        ('speech_to_text_2', 'Speech2Text2Processor'),
        ('speecht5', 'SpeechT5Processor'),
        ('trocr', 'TrOCRProcessor'),
        ('tvlt', 'TvltProcessor'),
        ('unispeech', 'Wav2Vec2Processor'),
        ('unispeech-sat', 'Wav2Vec2Processor'),
        ('vilt', 'ViltProcessor'),
        ('vision-text-dual-encoder', 'VisionTextDualEncoderProcessor'),
        ('wav2vec2', 'Wav2Vec2Processor'),
        ('wav2vec2-conformer', 'Wav2Vec2Processor'),
        ('wavlm', 'Wav2Vec2Processor'),
        ('whisper', 'WhisperProcessor'),
        ('xclip', 'XCLIPProcessor'),
    ]
)

__UpperCAmelCase      :      Union[str, Any]   					=					_LazyAutoMapping(CONFIG_MAPPING_NAMES, PROCESSOR_MAPPING_NAMES)
def      A      (			_A							):




					"""simple docstring"""
					for module_name, processors in PROCESSOR_MAPPING_NAMES.items():
										if class_name in processors:
															snake_case_						:Dict								=						model_type_to_module_name(_A							)

															snake_case_						:Optional[int]								=						importlib.import_module(F'''.{module_name}''',     "transformers.models"							)
															try:
																				return getattr(_A,     _A							)
															except AttributeError:
																				continue

					for processor in PROCESSOR_MAPPING._extra_content.values():
										if getattr(_A,     "__name__",     _A							) == class_name:
															return processor

    # We did not fine the class, but maybe it's because a dep is missing. In that case, the class will be in the main
    # init and we return the proper dummy to get an appropriate error message.
					snake_case_						:Union[str, Any]								=						importlib.import_module("transformers"							)
					if hasattr(_A,     _A							):
										return getattr(_A,     _A							)

					return None

class 	__lowerCAmelCase							:


					'''simple docstring'''


					def __init__(      self   ):




										"""simple docstring"""





										raise EnvironmentError(
										    "AutoProcessor is designed to be instantiated "
										    "using the `AutoProcessor.from_pretrained(pretrained_model_name_or_path)` method."   )







					@classmethod
					@replace_list_option_in_docstrings(a   )
					def 		_a (      cls    ,       a    ,       **a   ):




										"""simple docstring"""





										snake_case_						:Optional[Any]								=						kwargs.pop("config"    ,       a   )
										snake_case_						:int								=						kwargs.pop("trust_remote_code"    ,       a   )
										snake_case_						:List[str]								=						True

										snake_case_						:Dict								=						None
										snake_case_						:Optional[int]								=						None

										# First, let's see if we have a preprocessor config.
										# Filter the kwargs for `get_file_from_repo`.
										snake_case_						:str								=						{
										    key: kwargs[key] for key in inspect.signature(a   ).parameters.keys() if key in kwargs
										}
										# Let's start by checking whether the processor class is saved in an image processor
										snake_case_						:Any								=						get_file_from_repo(
										    a    ,       a    ,       **a   )
										if preprocessor_config_file is not None:
															snake_case_	,  snake_case_						:Tuple								=						ImageProcessingMixin.get_image_processor_dict(a    ,       **a   )
															snake_case_						:Dict								=						config_dict.get("processor_class"    ,       a   )
															if "AutoProcessor" in config_dict.get("auto_map"    ,       {}   ):
																				snake_case_						:Optional[Any]								=						config_dict["auto_map"]["AutoProcessor"]

        # If not found, let's check whether the processor class is saved in a feature extractor config
										if preprocessor_config_file is not None and processor_class is None:
															snake_case_	,  snake_case_						:List[Any]								=						FeatureExtractionMixin.get_feature_extractor_dict(a    ,       **a   )
															snake_case_						:Union[str, Any]								=						config_dict.get("processor_class"    ,       a   )
															if "AutoProcessor" in config_dict.get("auto_map"    ,       {}   ):
																				snake_case_						:Optional[Any]								=						config_dict["auto_map"]["AutoProcessor"]

										if processor_class is None:
															# Next, let's check whether the processor class is saved in a tokenizer
															snake_case_						:Optional[Any]								=						get_file_from_repo(
															    a    ,       a    ,       **a   )
															if tokenizer_config_file is not None:
																				with open(a    ,       encoding="utf-8"   ) as reader:
																									snake_case_						:List[Any]								=						json.load(a   )

																				snake_case_						:Any								=						config_dict.get("processor_class"    ,       a   )
																				if "AutoProcessor" in config_dict.get("auto_map"    ,       {}   ):
																									snake_case_						:List[Any]								=						config_dict["auto_map"]["AutoProcessor"]

										if processor_class is None:
															# Otherwise, load config, if it can be loaded.
															if not isinstance(a    ,       a   ):
																				snake_case_						:int								=						AutoConfig.from_pretrained(
																				    a    ,       trust_remote_code=a    ,       **a   )

															# And check if the config contains the processor class.
															snake_case_						:Dict								=						getattr(a    ,       "processor_class"    ,       a   )
															if hasattr(a    ,       "auto_map"   ) and "AutoProcessor" in config.auto_map:
																				snake_case_						:Optional[Any]								=						config.auto_map["AutoProcessor"]

										if processor_class is not None:
															snake_case_						:int								=						processor_class_from_name(a   )

										snake_case_						:str								=						processor_auto_map is not None
										snake_case_						:Union[str, Any]								=						processor_class is not None or type(a   ) in PROCESSOR_MAPPING
										snake_case_						:List[Any]								=						resolve_trust_remote_code(
										    a    ,       a    ,       a    ,       a   )

										if has_remote_code and trust_remote_code:
															snake_case_						:str								=						get_class_from_dynamic_module(
															    a    ,       a    ,       **a   )
															snake_case_						:List[str]								=						kwargs.pop("code_revision"    ,       a   )
															if os.path.isdir(a   ):
																				processor_class.register_for_auto_class()
															return processor_class.from_pretrained(
															    a    ,       trust_remote_code=a    ,       **a   )
										elif processor_class is not None:
															return processor_class.from_pretrained(
															    a    ,       trust_remote_code=a    ,       **a   )
										# Last try: we use the PROCESSOR_MAPPING.
										elif type(a   ) in PROCESSOR_MAPPING:
															return PROCESSOR_MAPPING[type(a   )].from_pretrained(a    ,       **a   )

										# At this stage, there doesn't seem to be a `Processor` class available for this model, so let's try a
										# tokenizer.
										try:
															return AutoTokenizer.from_pretrained(
															    a    ,       trust_remote_code=a    ,       **a   )
										except Exception:
															try:
																				return AutoImageProcessor.from_pretrained(
																				    a    ,       trust_remote_code=a    ,       **a   )
															except Exception:
																				pass

															try:
																				return AutoFeatureExtractor.from_pretrained(
																				    a    ,       trust_remote_code=a    ,       **a   )
															except Exception:
																				pass

										raise ValueError(
										    F'''Unrecognized processing class in {pretrained_model_name_or_path}. Can\'t instantiate a processor, a '''
										    "tokenizer, an image processor or a feature extractor for this model. Make sure the repository contains"
										    "the files of at least one of those processing classes."   )







					@staticmethod
					def 		_a (      a    ,       a   ):




										"""simple docstring"""





										PROCESSOR_MAPPING.register(a    ,       a   )






"""simple docstring"""






def      A      (			_A,     _A							):




					"""simple docstring"""
					if n == 0:
										return 1

					elif n % 2 == 1:
										return binary_exponentiation(_A,     n - 1							) * a

					else:
										snake_case_						:Optional[int]								=						binary_exponentiation(_A,     n / 2							)
										return b * b


if __name__ == "__main__":
				try:
								__UpperCAmelCase      :      str   					=					int(input('Enter Base : ').strip())
								__UpperCAmelCase      :      Any   					=					int(input('Enter Power : ').strip())
				except ValueError:
								print('Invalid literal for integer')

				__UpperCAmelCase      :      Optional[int]   					=					binary_exponentiation(BASE, POWER)
				print(F'''{BASE}^({POWER}) : {RESULT}''')

