


import unittest

from transformers import (
    MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    TextaTextGenerationPipeline,
    pipeline,
)
from transformers.testing_utils import is_pipeline_test, require_tf, require_torch
from transformers.utils import is_torch_available

from .test_pipelines_common import ANY


if is_torch_available():
						import torch







@is_pipeline_test
class  snake_case_     (unittest.TestCase   ):
					UpperCAmelCase__      :					List[str]					   =    MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
					UpperCAmelCase__      :					str					   =    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
					def 				lowerCamelCase__(   self     :List[Any]    ,__snake_case     :Optional[Any]    ,__snake_case     :Union[str, Any]    ,__snake_case     :Dict   )      ->					List[str]:
												a__    =  TextaTextGenerationPipeline(model=__snake_case    ,tokenizer=__snake_case   )
												return generator, ["Something to write", "Something else"]
					def 				lowerCamelCase__(   self     :Optional[Any]    ,__snake_case     :Any    ,__snake_case     :int   )      ->					int:
												a__    =  generator('Something there'   )
												self.assertEqual(__snake_case    ,[{'generated_text': ANY(__snake_case   )}]   )
												# These are encoder decoder, they don't just append to incoming string
												self.assertFalse(outputs[0]['generated_text'].startswith('Something there'   )   )

												a__    =  generator(['This is great !', 'Something else']    ,num_return_sequences=2    ,do_sample=__snake_case   )
												self.assertEqual(
												    __snake_case    ,[
												        [{'generated_text': ANY(__snake_case   )}, {'generated_text': ANY(__snake_case   )}],
												        [{'generated_text': ANY(__snake_case   )}, {'generated_text': ANY(__snake_case   )}],
												    ]    ,)

												a__    =  generator(
												    ['This is great !', 'Something else']    ,num_return_sequences=2    ,batch_size=2    ,do_sample=__snake_case   )
												self.assertEqual(
												    __snake_case    ,[
												        [{'generated_text': ANY(__snake_case   )}, {'generated_text': ANY(__snake_case   )}],
												        [{'generated_text': ANY(__snake_case   )}, {'generated_text': ANY(__snake_case   )}],
												    ]    ,)

												with self.assertRaises(__snake_case   ):
																			generator(4   )
					@require_torch
					def 				lowerCamelCase__(   self     :List[Any]   )      ->					Dict:
												a__    =  pipeline('text2text-generation'    ,model='patrickvonplaten/t5-tiny-random'    ,framework='pt'   )
												# do_sample=False necessary for reproducibility
												a__    =  generator('Something there'    ,do_sample=__snake_case   )
												self.assertEqual(__snake_case    ,[{'generated_text': ''}]   )

												a__    =  3
												a__    =  generator(
												    'Something there'    ,num_return_sequences=__snake_case    ,num_beams=__snake_case    ,)
												a__    =  [
												    {'generated_text': 'Beide Beide Beide Beide Beide Beide Beide Beide Beide'},
												    {'generated_text': 'Beide Beide Beide Beide Beide Beide Beide Beide'},
												    {'generated_text': ''},
												]
												self.assertEqual(__snake_case    ,__snake_case   )

												a__    =  generator('This is a test'    ,do_sample=__snake_case    ,num_return_sequences=2    ,return_tensors=__snake_case   )
												self.assertEqual(
												    __snake_case    ,[
												        {'generated_token_ids': ANY(torch.Tensor   )},
												        {'generated_token_ids': ANY(torch.Tensor   )},
												    ]    ,)
												a__    =  generator.model.config.eos_token_id
												a__    =  '<pad>'
												a__    =  generator(
												    ['This is a test', 'This is a second test']    ,do_sample=__snake_case    ,num_return_sequences=2    ,batch_size=2    ,return_tensors=__snake_case    ,)
												self.assertEqual(
												    __snake_case    ,[
												        [
												            {'generated_token_ids': ANY(torch.Tensor   )},
												            {'generated_token_ids': ANY(torch.Tensor   )},
												        ],
												        [
												            {'generated_token_ids': ANY(torch.Tensor   )},
												            {'generated_token_ids': ANY(torch.Tensor   )},
												        ],
												    ]    ,)



					@require_tf
					def 				lowerCamelCase__(   self     :Dict   )      ->					Dict:
												a__    =  pipeline('text2text-generation'    ,model='patrickvonplaten/t5-tiny-random'    ,framework='tf'   )
												# do_sample=False necessary for reproducibility
												a__    =  generator('Something there'    ,do_sample=__snake_case   )
												self.assertEqual(__snake_case    ,[{'generated_text': ''}]   )








from typing import List, Optional, Union

import numpy as np
import PIL.Image

from ...image_processing_utils import BaseImageProcessor, BatchFeature
from ...image_transforms import rescale, resize, to_channel_dimension_format
from ...image_utils import (
    ChannelDimension,
    PILImageResampling,
    get_image_size,
    make_list_of_images,
    to_numpy_array,
    valid_images,
)
from ...utils import TensorType, logging


snake_case							: Dict      =   logging.get_logger(__name__)







class  snake_case_     (lowerCamelCase_   ):
					UpperCAmelCase__      :					Dict					   =    ['''pixel_values''']
					def __init__(   self     :Optional[Any]    ,__snake_case     :bool = True    ,__snake_case     :int = 32    ,__snake_case     :Union[str, Any]=PILImageResampling.BILINEAR    ,__snake_case     :bool = True    ,**__snake_case     :Tuple    ,)      ->					None:
												a__    =  do_resize
												a__    =  do_rescale
												a__    =  size_divisor
												a__    =  resample
												super().__init__(**__snake_case   )
					def 				lowerCamelCase__(   self     :Union[str, Any]    ,__snake_case     :np.ndarray    ,__snake_case     :int    ,__snake_case     :Tuple    ,__snake_case     :Optional[ChannelDimension] = None    ,**__snake_case     :List[Any]   )      ->					np.ndarray:
												a__   ,      a__    =  get_image_size(__snake_case   )
												# Rounds the height and width down to the closest multiple of size_divisor
												a__    =  height // size_divisor * size_divisor
												a__    =  width // size_divisor * size_divisor
												a__    =  resize(__snake_case    ,(new_h, new_w)    ,resample=__snake_case    ,data_format=__snake_case    ,**__snake_case   )
												return image
					def 				lowerCamelCase__(   self     :List[str]    ,__snake_case     :np.ndarray    ,__snake_case     :float    ,__snake_case     :Optional[ChannelDimension] = None    ,**__snake_case     :str   )      ->					np.ndarray:
												return rescale(image=__snake_case    ,scale=__snake_case    ,data_format=__snake_case    ,**__snake_case   )



					def 				lowerCamelCase__(   self     :Tuple    ,__snake_case     :Union["PIL.Image.Image", TensorType, List["PIL.Image.Image"], List[TensorType]]    ,__snake_case     :Optional[bool] = None    ,__snake_case     :Optional[int] = None    ,__snake_case     :Union[str, Any]=None    ,__snake_case     :Optional[bool] = None    ,__snake_case     :Optional[Union[TensorType, str]] = None    ,__snake_case     :ChannelDimension = ChannelDimension.FIRST    ,**__snake_case     :List[Any]    ,)      ->					BatchFeature:
												a__    =  do_resize if do_resize is not None else self.do_resize
												a__    =  do_rescale if do_rescale is not None else self.do_rescale
												a__    =  size_divisor if size_divisor is not None else self.size_divisor
												a__    =  resample if resample is not None else self.resample

												if do_resize and size_divisor is None:
																			raise ValueError('size_divisor is required for resizing'   )

												a__    =  make_list_of_images(__snake_case   )

												if not valid_images(__snake_case   ):
																			raise ValueError('Invalid image(s)'   )

												# All transformations expect numpy arrays.
												a__    =  [to_numpy_array(__snake_case   ) for img in images]

												if do_resize:
																			a__    =  [self.resize(__snake_case    ,size_divisor=__snake_case    ,resample=__snake_case   ) for image in images]

												if do_rescale:
																			a__    =  [self.rescale(__snake_case    ,scale=1 / 2_55   ) for image in images]

												a__    =  [to_channel_dimension_format(__snake_case    ,__snake_case   ) for image in images]

												a__    =  {'pixel_values': images}
												return BatchFeature(data=__snake_case    ,tensor_type=__snake_case   )




