
'''simple docstring'''






import unittest

from transformers import (
    MODEL_FOR_CAUSAL_LM_MAPPING,
    TF_MODEL_FOR_CAUSAL_LM_MAPPING,
    TextGenerationPipeline,
    logging,
    pipeline,
)
from transformers.testing_utils import (
    CaptureLogger,
    is_pipeline_test,
    require_accelerate,
    require_tf,
    require_torch,
    require_torch_gpu,
    require_torch_or_tf,
)

from .test_pipelines_common import ANY




@is_pipeline_test
@require_torch_or_tf
class     __snake_case		(   unittest.TestCase):
					_lowerCAmelCase			     =	MODEL_FOR_CAUSAL_LM_MAPPING
					_lowerCAmelCase			     =	TF_MODEL_FOR_CAUSAL_LM_MAPPING
					@require_torch
					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									lowerCamelCase					:			Optional[int]									= pipeline(task='text-generation',    model='sshleifer/tiny-ctrl',    framework='pt'      )
									# Using `do_sample=False` to force deterministic output
									lowerCamelCase					:			Tuple									= text_generator('This is a test',    do_sample=A      )
									self.assertEqual(
									    A,    [
									        {
									            'generated_text': (
									                'This is a test ☃ ☃ segmental segmental segmental 议议eski eski flutter flutter Lacy oscope.'
									                ' oscope. FiliFili@@'
									            )
									        }
									    ],    )

									lowerCamelCase					:			Optional[Any]									= text_generator(['This is a test', 'This is a second test']      )
									self.assertEqual(
									    A,    [
									        [
									            {
									                'generated_text': (
									                    'This is a test ☃ ☃ segmental segmental segmental 议议eski eski flutter flutter Lacy oscope.'
									                    ' oscope. FiliFili@@'
									                )
									            }
									        ],
									        [
									            {
									                'generated_text': (
									                    'This is a second test ☃ segmental segmental segmental 议议eski eski flutter flutter Lacy'
									                    ' oscope. oscope. FiliFili@@'
									                )
									            }
									        ],
									    ],    )

									lowerCamelCase					:			List[str]									= text_generator('This is a test',    do_sample=A,    num_return_sequences=2,    return_tensors=A      )
									self.assertEqual(
									    A,    [
									        {'generated_token_ids': ANY(A      )},
									        {'generated_token_ids': ANY(A      )},
									    ],    )
									lowerCamelCase					:			Any									= text_generator.model.config.eos_token_id
									lowerCamelCase					:			Union[str, Any]									= '<pad>'
									lowerCamelCase					:			Union[str, Any]									= text_generator(
									    ['This is a test', 'This is a second test'],    do_sample=A,    num_return_sequences=2,    batch_size=2,    return_tensors=A,    )
									self.assertEqual(
									    A,    [
									        [
									            {'generated_token_ids': ANY(A      )},
									            {'generated_token_ids': ANY(A      )},
									        ],
									        [
									            {'generated_token_ids': ANY(A      )},
									            {'generated_token_ids': ANY(A      )},
									        ],
									    ],    )
					@require_tf
					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									lowerCamelCase					:			Tuple									= pipeline(task='text-generation',    model='sshleifer/tiny-ctrl',    framework='tf'      )

									# Using `do_sample=False` to force deterministic output
									lowerCamelCase					:			Any									= text_generator('This is a test',    do_sample=A      )
									self.assertEqual(
									    A,    [
									        {
									            'generated_text': (
									                'This is a test FeyFeyFey(Croatis.), s.), Cannes Cannes Cannes 閲閲Cannes Cannes Cannes 攵'
									                ' please,'
									            )
									        }
									    ],    )

									lowerCamelCase					:			int									= text_generator(['This is a test', 'This is a second test'],    do_sample=A      )
									self.assertEqual(
									    A,    [
									        [
									            {
									                'generated_text': (
									                    'This is a test FeyFeyFey(Croatis.), s.), Cannes Cannes Cannes 閲閲Cannes Cannes Cannes 攵'
									                    ' please,'
									                )
									            }
									        ],
									        [
									            {
									                'generated_text': (
									                    'This is a second test Chieftain Chieftain prefecture prefecture prefecture Cannes Cannes'
									                    ' Cannes 閲閲Cannes Cannes Cannes 攵 please,'
									                )
									            }
									        ],
									    ],    )
					def     UpperCAmelCase_							(     self,    A,    A,    A      ):

									"""simple docstring"""


									lowerCamelCase					:			Tuple									= TextGenerationPipeline(model=A,    tokenizer=A      )
									return text_generator, ["This is a test", "Another test"]
					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									lowerCamelCase					:			str									= 'Hello I believe in'
									lowerCamelCase					:			List[str]									= pipeline('text-generation',    model='hf-internal-testing/tiny-random-gpt2'      )
									lowerCamelCase					:			str									= text_generator(A      )
									self.assertEqual(
									    A,    [{'generated_text': 'Hello I believe in fe fe fe fe fe fe fe fe fe fe fe fe'}],    )

									lowerCamelCase					:			int									= text_generator(A,    stop_sequence=' fe'      )
									self.assertEqual(A,    [{'generated_text': 'Hello I believe in fe'}]      )
					def     UpperCAmelCase_							(     self,    A,    A      ):

									"""simple docstring"""


									lowerCamelCase					:			str									= text_generator.model
									lowerCamelCase					:			int									= text_generator.tokenizer

									lowerCamelCase					:			Union[str, Any]									= text_generator('This is a test'      )
									self.assertEqual(A,    [{'generated_text': ANY(A      )}]      )
									self.assertTrue(outputs[0]['generated_text'].startswith('This is a test'      )      )

									lowerCamelCase					:			Union[str, Any]									= text_generator('This is a test',    return_full_text=A      )
									self.assertEqual(A,    [{'generated_text': ANY(A      )}]      )
									self.assertNotIn('This is a test',    outputs[0]['generated_text']      )

									lowerCamelCase					:			Dict									= pipeline(task='text-generation',    model=A,    tokenizer=A,    return_full_text=A      )
									lowerCamelCase					:			Any									= text_generator('This is a test'      )
									self.assertEqual(A,    [{'generated_text': ANY(A      )}]      )
									self.assertNotIn('This is a test',    outputs[0]['generated_text']      )

									lowerCamelCase					:			Optional[int]									= text_generator('This is a test',    return_full_text=A      )
									self.assertEqual(A,    [{'generated_text': ANY(A      )}]      )
									self.assertTrue(outputs[0]['generated_text'].startswith('This is a test'      )      )

									lowerCamelCase					:			int									= text_generator(['This is great !', 'Something else'],    num_return_sequences=2,    do_sample=A      )
									self.assertEqual(
									    A,    [
									        [{'generated_text': ANY(A      )}, {'generated_text': ANY(A      )}],
									        [{'generated_text': ANY(A      )}, {'generated_text': ANY(A      )}],
									    ],    )

									if text_generator.tokenizer.pad_token is not None:
													lowerCamelCase					:			Optional[Any]									= text_generator(
													    ['This is great !', 'Something else'],    num_return_sequences=2,    batch_size=2,    do_sample=A      )
													self.assertEqual(
													    A,    [
													        [{'generated_text': ANY(A      )}, {'generated_text': ANY(A      )}],
													        [{'generated_text': ANY(A      )}, {'generated_text': ANY(A      )}],
													    ],    )

									with self.assertRaises(A      ):
													lowerCamelCase					:			List[str]									= text_generator('test',    return_full_text=A,    return_text=A      )
									with self.assertRaises(A      ):
													lowerCamelCase					:			Tuple									= text_generator('test',    return_full_text=A,    return_tensors=A      )
									with self.assertRaises(A      ):
													lowerCamelCase					:			Optional[int]									= text_generator('test',    return_text=A,    return_tensors=A      )

									# Empty prompt is slighly special
									# it requires BOS token to exist.
									# Special case for Pegasus which will always append EOS so will
									# work even without BOS.
									if (
									    text_generator.tokenizer.bos_token_id is not None
									    or "Pegasus" in tokenizer.__class__.__name__
									    or "Git" in model.__class__.__name__
									):
													lowerCamelCase					:			List[str]									= text_generator(''      )
													self.assertEqual(A,    [{'generated_text': ANY(A      )}]      )
									else:
													with self.assertRaises((ValueError, AssertionError)      ):
																	lowerCamelCase					:			List[Any]									= text_generator(''      )

									if text_generator.framework == "tf":
													# TF generation does not support max_new_tokens, and it's impossible
													# to control long generation with only max_length without
													# fancy calculation, dismissing tests for now.
													return
									# We don't care about infinite range models.
									# They already work.
									# Skip this test for XGLM, since it uses sinusoidal positional embeddings which are resized on-the-fly.
									lowerCamelCase					:			List[Any]									= ['RwkvForCausalLM', 'XGLMForCausalLM', 'GPTNeoXForCausalLM']
									if (
									    tokenizer.model_max_length < 1_0000
									    and text_generator.model.__class__.__name__ not in EXTRA_MODELS_CAN_HANDLE_LONG_INPUTS
									):
													# Handling of large generations
													with self.assertRaises((RuntimeError, IndexError, ValueError, AssertionError)      ):
																	text_generator('This is a test' * 500,    max_new_tokens=20      )

													lowerCamelCase					:			Optional[Any]									= text_generator('This is a test' * 500,    handle_long_generation='hole',    max_new_tokens=20      )
													# Hole strategy cannot work
													with self.assertRaises(A      ):
																	text_generator(
																	    'This is a test' * 500,    handle_long_generation='hole',    max_new_tokens=tokenizer.model_max_length + 10,    )
					@require_torch
					@require_accelerate
					@require_torch_gpu
					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									import torch

									# Classic `model_kwargs`
									lowerCamelCase					:			Any									= pipeline(
									    model='hf-internal-testing/tiny-random-bloom',    model_kwargs={'device_map': 'auto', 'torch_dtype': torch.bfloataa},    )
									self.assertEqual(pipe.model.device,    torch.device(0      )      )
									self.assertEqual(pipe.model.lm_head.weight.dtype,    torch.bfloataa      )
									lowerCamelCase					:			Dict									= pipe('This is a test'      )
									self.assertEqual(
									    A,    [
									        {
									            'generated_text': (
									                'This is a test test test test test test test test test test test test test test test test'
									                ' test'
									            )
									        }
									    ],    )

									# Upgraded those two to real pipeline arguments (they just get sent for the model as they're unlikely to mean anything else.)
									lowerCamelCase					:			Union[str, Any]									= pipeline(model='hf-internal-testing/tiny-random-bloom',    device_map='auto',    torch_dtype=torch.bfloataa      )
									self.assertEqual(pipe.model.device,    torch.device(0      )      )
									self.assertEqual(pipe.model.lm_head.weight.dtype,    torch.bfloataa      )
									lowerCamelCase					:			Optional[int]									= pipe('This is a test'      )
									self.assertEqual(
									    A,    [
									        {
									            'generated_text': (
									                'This is a test test test test test test test test test test test test test test test test'
									                ' test'
									            )
									        }
									    ],    )

									# torch_dtype will be automatically set to float32 if not provided - check: https://github.com/huggingface/transformers/pull/20602
									lowerCamelCase					:			Optional[int]									= pipeline(model='hf-internal-testing/tiny-random-bloom',    device_map='auto'      )
									self.assertEqual(pipe.model.device,    torch.device(0      )      )
									self.assertEqual(pipe.model.lm_head.weight.dtype,    torch.floataa      )
									lowerCamelCase					:			Any									= pipe('This is a test'      )
									self.assertEqual(
									    A,    [
									        {
									            'generated_text': (
									                'This is a test test test test test test test test test test test test test test test test'
									                ' test'
									            )
									        }
									    ],    )
					@require_torch
					@require_torch_gpu
					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									import torch

									lowerCamelCase					:			Any									= pipeline(model='hf-internal-testing/tiny-random-bloom',    device=0,    torch_dtype=torch.floataa      )
									pipe('This is a test'      )
					@require_torch
					@require_accelerate
					@require_torch_gpu
					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									import torch

									lowerCamelCase					:			Optional[Any]									= pipeline(model='hf-internal-testing/tiny-random-bloom',    device_map='auto',    torch_dtype=torch.floataa      )
									pipe('This is a test',    do_sample=A,    top_p=0.5      )




					def     UpperCAmelCase_							(     self      ):

									"""simple docstring"""


									lowerCamelCase					:			Any									= 'Hello world'
									lowerCamelCase					:			str									= pipeline('text-generation',    model='hf-internal-testing/tiny-random-gpt2'      )
									if text_generator.model.framework == "tf":
													lowerCamelCase					:			Dict									= logging.get_logger('transformers.generation.tf_utils'      )
									else:
													lowerCamelCase					:			Union[str, Any]									= logging.get_logger('transformers.generation.utils'      )
									lowerCamelCase					:			Union[str, Any]									= 'Both `max_new_tokens`'  # The beggining of the message to be checked in this test

									# Both are set by the user -> log warning
									with CaptureLogger(A      ) as cl:
													lowerCamelCase					:			Union[str, Any]									= text_generator(A,    max_length=10,    max_new_tokens=1      )
									self.assertIn(A,    cl.out      )

									# The user only sets one -> no warning
									with CaptureLogger(A      ) as cl:
													lowerCamelCase					:			Dict									= text_generator(A,    max_new_tokens=1      )
									self.assertNotIn(A,    cl.out      )

									with CaptureLogger(A      ) as cl:
													lowerCamelCase					:			List[Any]									= text_generator(A,    max_length=10      )
									self.assertNotIn(A,    cl.out      )


'''simple docstring'''






def    UpperCAmelCase							(  UpperCAmelCase__							:							int = 10_00):
				lowerCamelCase					:			Optional[Any]									= 2**power
				lowerCamelCase					:			str									= str(UpperCAmelCase__)
				lowerCamelCase					:			Union[str, Any]									= list(UpperCAmelCase__)
				lowerCamelCase					:			Optional[Any]									= 0

				for i in list_num:
								sum_of_num += int(UpperCAmelCase__)

				return sum_of_num


if __name__ == "__main__":
					A			      =      int(input('Enter the power of 2: ').strip())
					print('2 ^ ', power, ' = ', 2**power)
					A			      =      solution(power)
					print('Sum of the digits is: ', result)
