from typing import TYPE_CHECKING

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


lowerCAmelCase__	:  Optional[int]						=  {'''configuration_bert_generation''': ['''BertGenerationConfig''']}

try:
				if not is_sentencepiece_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				lowerCAmelCase__	:  Optional[Any]						=  ['''BertGenerationTokenizer''']

try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				lowerCAmelCase__	:  List[Any]						=  [
				    '''BertGenerationDecoder''',
				    '''BertGenerationEncoder''',
				    '''BertGenerationPreTrainedModel''',
				    '''load_tf_weights_in_bert_generation''',
				]


if TYPE_CHECKING:
				from .configuration_bert_generation import BertGenerationConfig

				try:
								if not is_sentencepiece_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .tokenization_bert_generation import BertGenerationTokenizer

				try:
								if not is_torch_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .modeling_bert_generation import (
								    BertGenerationDecoder,
								    BertGenerationEncoder,
								    BertGenerationPreTrainedModel,
								    load_tf_weights_in_bert_generation,
								)

else:
				import sys

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



def 					UpperCamelCase__		(							A__     ,					A__       )  ->   Any:
				if len(str(A__       )       ) == 1 or len(str(A__       )       ) == 1:
								return a * b

				snake_case__   :      Union[str, Any]   				= max(len(str(A__       )       )     ,					len(str(A__       )       )       )
				snake_case__   :      str   				= ma // 2

				snake_case__				,    snake_case__   :      Tuple   				= divmod(A__     ,					10**ma       )
				snake_case__				,    snake_case__   :      str   				= divmod(A__     ,					10**ma       )

				snake_case__   :      Optional[int]   				= karatsuba(A__     ,					A__       )
				snake_case__   :      List[Any]   				= karatsuba((aa + aa)     ,					(ba + ba)       )
				snake_case__   :      Tuple   				= karatsuba(A__     ,					A__       )

				return (z * 10 ** (2 * ma)) + ((y - z - x) * 10 ** (ma)) + (x)
def 					UpperCamelCase__		(							)  ->   Optional[int]:
				print(karatsuba(1_5463     ,					2_3489       )       )


if __name__ == "__main__":
				main()


