



'''simple docstring'''

import shutil
import tempfile
import unittest

import numpy as np

from transformers.testing_utils import (
    is_pt_tf_cross_test,
    require_tf,
    require_torch,
    require_torchvision,
    require_vision,
)
from transformers.utils import is_tf_available, is_torch_available, is_vision_available


if is_vision_available():
			from PIL import Image

			from transformers import AutoProcessor, SamImageProcessor, SamProcessor

if is_torch_available():
			import torch

if is_tf_available():
			import tensorflow as tf

@require_vision
@require_torchvision
class      __magic_name__						(   unittest.TestCase       ):







							def 							__lowercase      (							self :	Tuple		):
									_a					:				str				=							tempfile.mkdtemp()
									_a					:				Dict				=							SamImageProcessor()
									_a					:				Tuple				=							SamProcessor(_UpperCAmelCase		)
									processor.save_pretrained(self.tmpdirname		)







							def 							__lowercase      (							self :	Optional[Any]     ,**_UpperCAmelCase :	Tuple		):
									return AutoProcessor.from_pretrained(self.tmpdirname     ,**_UpperCAmelCase		).image_processor







							def 							__lowercase      (							self :	Dict		):
									shutil.rmtree(self.tmpdirname		)







							def 							__lowercase      (							self :	str		):
									_a					:				Optional[int]				=							[np.random.randint(255     ,size=(3, 30, 400)     ,dtype=np.uinta		)]

									_a					:				Optional[int]				=							[Image.fromarray(np.moveaxis(_UpperCAmelCase     ,0     ,-1		)		) for x in image_inputs]

									return image_inputs







							def 							__lowercase      (							self :	int		):
									_a					:				int				=							SamProcessor(image_processor=self.get_image_processor()		)
									processor.save_pretrained(self.tmpdirname		)

									_a					:				Optional[Any]				=							self.get_image_processor(do_normalize=_UpperCAmelCase     ,padding_value=1.0		)

									_a					:				List[Any]				=							SamProcessor.from_pretrained(self.tmpdirname     ,do_normalize=_UpperCAmelCase     ,padding_value=1.0		)

									self.assertEqual(processor.image_processor.to_json_string()     ,image_processor_add_kwargs.to_json_string()		)
									self.assertIsInstance(processor.image_processor     ,_UpperCAmelCase		)







							def 							__lowercase      (							self :	Union[str, Any]		):
									_a					:				Optional[int]				=							self.get_image_processor()

									_a					:				Any				=							SamProcessor(image_processor=_UpperCAmelCase		)

									_a					:				Optional[int]				=							self.prepare_image_inputs()

									_a					:				List[Any]				=							image_processor(_UpperCAmelCase     ,return_tensors='np'		)
									_a					:				List[Any]				=							processor(images=_UpperCAmelCase     ,return_tensors='np'		)

									input_feat_extract.pop('original_sizes'		)  # pop original_sizes as it is popped in the processor
									input_feat_extract.pop('reshaped_input_sizes'		)  # pop original_sizes as it is popped in the processor

									for key in input_feat_extract.keys():
											self.assertAlmostEqual(input_feat_extract[key].sum()     ,input_processor[key].sum()     ,delta=1E-2		)







							@require_torch
							def 							__lowercase      (							self :	Union[str, Any]		):
									_a					:				List[str]				=							self.get_image_processor()

									_a					:				Optional[Any]				=							SamProcessor(image_processor=_UpperCAmelCase		)
									_a					:				Dict				=							[torch.ones((1, 3, 5, 5)		)]

									_a					:				List[Any]				=							[[1764, 2646]]

									_a					:				Union[str, Any]				=							[[683, 1024]]
									_a					:				Optional[Any]				=							processor.post_process_masks(_UpperCAmelCase     ,_UpperCAmelCase     ,_UpperCAmelCase		)
									self.assertEqual(masks[0].shape     ,(1, 3, 1764, 2646)		)

									_a					:				Optional[int]				=							processor.post_process_masks(
									    _UpperCAmelCase     ,torch.tensor(_UpperCAmelCase		)     ,torch.tensor(_UpperCAmelCase		)		)
									self.assertEqual(masks[0].shape     ,(1, 3, 1764, 2646)		)

									# should also work with np
									_a					:				Optional[int]				=							[np.ones((1, 3, 5, 5)		)]
									_a					:				Optional[Any]				=							processor.post_process_masks(_UpperCAmelCase     ,np.array(_UpperCAmelCase		)     ,np.array(_UpperCAmelCase		)		)

									self.assertEqual(masks[0].shape     ,(1, 3, 1764, 2646)		)

									_a					:				Optional[int]				=							[[1, 0], [0, 1]]
									with self.assertRaises(_UpperCAmelCase		):
											_a					:				Optional[Any]				=							processor.post_process_masks(_UpperCAmelCase     ,np.array(_UpperCAmelCase		)     ,np.array(_UpperCAmelCase		)		)

@require_vision
@require_tf
class      __magic_name__						(   unittest.TestCase       ):







							def 							__lowercase      (							self :	str		):
									_a					:				str				=							tempfile.mkdtemp()
									_a					:				Union[str, Any]				=							SamImageProcessor()
									_a					:				str				=							SamProcessor(_UpperCAmelCase		)
									processor.save_pretrained(self.tmpdirname		)







							def 							__lowercase      (							self :	Tuple     ,**_UpperCAmelCase :	Tuple		):
									return AutoProcessor.from_pretrained(self.tmpdirname     ,**_UpperCAmelCase		).image_processor







							def 							__lowercase      (							self :	Tuple		):
									shutil.rmtree(self.tmpdirname		)







							def 							__lowercase      (							self :	Tuple		):
									_a					:				str				=							[np.random.randint(255     ,size=(3, 30, 400)     ,dtype=np.uinta		)]

									_a					:				Optional[Any]				=							[Image.fromarray(np.moveaxis(_UpperCAmelCase     ,0     ,-1		)		) for x in image_inputs]

									return image_inputs







							def 							__lowercase      (							self :	Optional[Any]		):
									_a					:				Any				=							SamProcessor(image_processor=self.get_image_processor()		)
									processor.save_pretrained(self.tmpdirname		)

									_a					:				List[str]				=							self.get_image_processor(do_normalize=_UpperCAmelCase     ,padding_value=1.0		)

									_a					:				int				=							SamProcessor.from_pretrained(self.tmpdirname     ,do_normalize=_UpperCAmelCase     ,padding_value=1.0		)

									self.assertEqual(processor.image_processor.to_json_string()     ,image_processor_add_kwargs.to_json_string()		)
									self.assertIsInstance(processor.image_processor     ,_UpperCAmelCase		)







							def 							__lowercase      (							self :	Optional[Any]		):
									_a					:				Union[str, Any]				=							self.get_image_processor()

									_a					:				Optional[int]				=							SamProcessor(image_processor=_UpperCAmelCase		)

									_a					:				Optional[Any]				=							self.prepare_image_inputs()

									_a					:				Union[str, Any]				=							image_processor(_UpperCAmelCase     ,return_tensors='np'		)
									_a					:				Union[str, Any]				=							processor(images=_UpperCAmelCase     ,return_tensors='np'		)

									input_feat_extract.pop('original_sizes'		)  # pop original_sizes as it is popped in the processor
									input_feat_extract.pop('reshaped_input_sizes'		)  # pop reshaped_input_sizes as it is popped in the processor

									for key in input_feat_extract.keys():
											self.assertAlmostEqual(input_feat_extract[key].sum()     ,input_processor[key].sum()     ,delta=1E-2		)







							@require_tf
							def 							__lowercase      (							self :	List[str]		):
									_a					:				Tuple				=							self.get_image_processor()

									_a					:				Tuple				=							SamProcessor(image_processor=_UpperCAmelCase		)
									_a					:				Union[str, Any]				=							[tf.ones((1, 3, 5, 5)		)]

									_a					:				List[str]				=							[[1764, 2646]]

									_a					:				Any				=							[[683, 1024]]
									_a					:				int				=							processor.post_process_masks(_UpperCAmelCase     ,_UpperCAmelCase     ,_UpperCAmelCase     ,return_tensors='tf'		)
									self.assertEqual(masks[0].shape     ,(1, 3, 1764, 2646)		)

									_a					:				Optional[int]				=							processor.post_process_masks(
									    _UpperCAmelCase     ,tf.convert_to_tensor(_UpperCAmelCase		)     ,tf.convert_to_tensor(_UpperCAmelCase		)     ,return_tensors='tf'     ,)
									self.assertEqual(masks[0].shape     ,(1, 3, 1764, 2646)		)

									# should also work with np
									_a					:				Optional[int]				=							[np.ones((1, 3, 5, 5)		)]
									_a					:				int				=							processor.post_process_masks(
									    _UpperCAmelCase     ,np.array(_UpperCAmelCase		)     ,np.array(_UpperCAmelCase		)     ,return_tensors='tf'		)

									self.assertEqual(masks[0].shape     ,(1, 3, 1764, 2646)		)

									_a					:				List[str]				=							[[1, 0], [0, 1]]
									with self.assertRaises(tf.errors.InvalidArgumentError		):
											_a					:				Any				=							processor.post_process_masks(
											    _UpperCAmelCase     ,np.array(_UpperCAmelCase		)     ,np.array(_UpperCAmelCase		)     ,return_tensors='tf'		)

@require_vision
@require_torchvision
class      __magic_name__						(   unittest.TestCase       ):







							def 							__lowercase      (							self :	Optional[int]		):
									_a					:				Union[str, Any]				=							tempfile.mkdtemp()
									_a					:				str				=							SamImageProcessor()
									_a					:				str				=							SamProcessor(_UpperCAmelCase		)
									processor.save_pretrained(self.tmpdirname		)







							def 							__lowercase      (							self :	Optional[int]     ,**_UpperCAmelCase :	str		):
									return AutoProcessor.from_pretrained(self.tmpdirname     ,**_UpperCAmelCase		).image_processor







							def 							__lowercase      (							self :	Dict		):
									shutil.rmtree(self.tmpdirname		)







							def 							__lowercase      (							self :	Dict		):
									_a					:				Any				=							[np.random.randint(255     ,size=(3, 30, 400)     ,dtype=np.uinta		)]

									_a					:				List[str]				=							[Image.fromarray(np.moveaxis(_UpperCAmelCase     ,0     ,-1		)		) for x in image_inputs]

									return image_inputs







							@is_pt_tf_cross_test
							def 							__lowercase      (							self :	Dict		):
									_a					:				str				=							self.get_image_processor()

									_a					:				Union[str, Any]				=							SamProcessor(image_processor=_UpperCAmelCase		)
									_a					:				Union[str, Any]				=							np.random.randint(0     ,2     ,size=(1, 3, 5, 5)		).astype(np.floataa		)
									_a					:				Any				=							[tf.convert_to_tensor(_UpperCAmelCase		)]
									_a					:				Optional[int]				=							[torch.tensor(_UpperCAmelCase		)]

									_a					:				int				=							[[1764, 2646]]

									_a					:				Any				=							[[683, 1024]]
									_a					:				Tuple				=							processor.post_process_masks(
									    _UpperCAmelCase     ,_UpperCAmelCase     ,_UpperCAmelCase     ,return_tensors='tf'		)
									_a					:				Optional[Any]				=							processor.post_process_masks(
									    _UpperCAmelCase     ,_UpperCAmelCase     ,_UpperCAmelCase     ,return_tensors='pt'		)

									self.assertTrue(np.all(tf_masks[0].numpy() == pt_masks[0].numpy()		)		)







							@is_pt_tf_cross_test
							def 							__lowercase      (							self :	Optional[Any]		):
									_a					:				Optional[int]				=							self.get_image_processor()

									_a					:				List[Any]				=							SamProcessor(image_processor=_UpperCAmelCase		)

									_a					:				Any				=							self.prepare_image_inputs()

									_a					:				Optional[Any]				=							image_processor(_UpperCAmelCase     ,return_tensors='pt'		)['pixel_values'].numpy()
									_a					:				int				=							processor(images=_UpperCAmelCase     ,return_tensors='pt'		)['pixel_values'].numpy()

									_a					:				str				=							image_processor(_UpperCAmelCase     ,return_tensors='tf'		)['pixel_values'].numpy()
									_a					:				List[str]				=							processor(images=_UpperCAmelCase     ,return_tensors='tf'		)['pixel_values'].numpy()

									self.assertTrue(np.allclose(_UpperCAmelCase     ,_UpperCAmelCase		)		)
									self.assertTrue(np.allclose(_UpperCAmelCase     ,_UpperCAmelCase		)		)
									self.assertTrue(np.allclose(_UpperCAmelCase     ,_UpperCAmelCase		)		)









'''simple docstring'''

import enum
import warnings

from ..tokenization_utils import TruncationStrategy
from ..utils import add_end_docstrings, is_tf_available, is_torch_available, logging
from .base import PIPELINE_INIT_ARGS, Pipeline


if is_tf_available():
							import tensorflow as tf

							from ..models.auto.modeling_tf_auto import TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING

if is_torch_available():
							from ..models.auto.modeling_auto import MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING

__lowerCAmelCase						      =       logging.get_logger(__name__)

class      __magic_name__						(   enum.Enum       ):
							lowerCAmelCase	:   Union[str, Any]           = 0
							lowerCAmelCase	:   Dict           = 1

@add_end_docstrings(_UpperCamelCase       )
class      __magic_name__						(   _UpperCamelCase       ):
							lowerCAmelCase	:   int           = 'generated'







							def __init__(							self :	List[Any]     ,*_UpperCAmelCase :	Any     ,**_UpperCAmelCase :	Optional[int]		):
									super().__init__(*_UpperCAmelCase     ,**_UpperCAmelCase		)

									self.check_model_type(
									    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
									    if self.framework == 'tf'
									    else MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING		)







							def 							__lowercase      (							self :	Optional[int]     ,_UpperCAmelCase :	List[Any]=None     ,_UpperCAmelCase :	Tuple=None     ,_UpperCAmelCase :	List[Any]=None     ,_UpperCAmelCase :	Union[str, Any]=None     ,_UpperCAmelCase :	Dict=None     ,_UpperCAmelCase :	Optional[int]=None     ,**_UpperCAmelCase :	List[Any]     ,):
									_a					:				Tuple				=							{}
									if truncation is not None:
											_a					:				Union[str, Any]				=							truncation

									_a					:				List[str]				=							generate_kwargs

									_a					:				Optional[Any]				=							{}
									if return_tensors is not None and return_type is None:
											_a					:				Optional[int]				=							ReturnType.TENSORS if return_tensors else ReturnType.TEXT
									if return_type is not None:
											_a					:				List[Any]				=							return_type

									if clean_up_tokenization_spaces is not None:
											_a					:				Optional[int]				=							clean_up_tokenization_spaces

									if stop_sequence is not None:
											_a					:				List[str]				=							self.tokenizer.encode(_UpperCAmelCase     ,add_special_tokens=_UpperCAmelCase		)
											if len(_UpperCAmelCase		) > 1:
													warnings.warn(
													    'Stopping on a multiple token sequence is not yet supported on transformers. The first token of'
													    ' the stop sequence will be used as the stop sequence string in the interim.'		)
											_a					:				List[Any]				=							stop_sequence_ids[0]

									return preprocess_params, forward_params, postprocess_params







							def 							__lowercase      (							self :	Any     ,_UpperCAmelCase :	int     ,_UpperCAmelCase :	int     ,_UpperCAmelCase :	int		):
									return True







							def 							__lowercase      (							self :	str     ,*_UpperCAmelCase :	Any     ,_UpperCAmelCase :	Union[str, Any]		):
									_a					:				Optional[Any]				=							self.model.config.prefix if self.model.config.prefix is not None else ''
									if isinstance(args[0]     ,_UpperCAmelCase		):
											if self.tokenizer.pad_token_id is None:
													raise ValueError('Please make sure that the tokenizer has a pad_token_id when using a batch input'		)
											_a					:				Optional[Any]				=							([prefix + arg for arg in args[0]],)
											_a					:				Any				=							True

									elif isinstance(args[0]     ,_UpperCAmelCase		):
											_a					:				List[str]				=							(prefix + args[0],)
											_a					:				str				=							False
									else:
											raise ValueError(
											    F""" `args[0]`: {args[0]} have the wrong format. The should be either of type `str` or type `list`"""		)
									_a					:				Optional[Any]				=							self.tokenizer(*_UpperCAmelCase     ,padding=_UpperCAmelCase     ,truncation=_UpperCAmelCase     ,return_tensors=self.framework		)
									# This is produced by tokenizers but is an invalid generate kwargs
									if "token_type_ids" in inputs:
											del inputs["token_type_ids"]
									return inputs







							def __call__(							self :	Optional[int]     ,*_UpperCAmelCase :	List[Any]     ,**_UpperCAmelCase :	Any		):
									_a					:				Tuple				=							super().__call__(*_UpperCAmelCase     ,**_UpperCAmelCase		)
									if (
									    isinstance(args[0]     ,_UpperCAmelCase		)
									    and all(isinstance(_UpperCAmelCase     ,_UpperCAmelCase		) for el in args[0]		)
									    and all(len(_UpperCAmelCase		) == 1 for res in result		)
									):
											return [res[0] for res in result]
									return result







							def 							__lowercase      (							self :	Tuple     ,_UpperCAmelCase :	Union[str, Any]     ,_UpperCAmelCase :	List[str]=TruncationStrategy.DO_NOT_TRUNCATE     ,**_UpperCAmelCase :	int		):
									_a					:				Dict				=							self._parse_and_tokenize(_UpperCAmelCase     ,truncation=_UpperCAmelCase     ,**_UpperCAmelCase		)
									return inputs







							def 							__lowercase      (							self :	Any     ,_UpperCAmelCase :	str     ,**_UpperCAmelCase :	Tuple		):
									if self.framework == "pt":
											_a	, _a					:				int				=							model_inputs['input_ids'].shape
									elif self.framework == "tf":
											_a	, _a					:				Dict				=							tf.shape(model_inputs['input_ids']		).numpy()

									_a					:				Optional[Any]				=							generate_kwargs.get('min_length'     ,self.model.config.min_length		)
									_a					:				Optional[int]				=							generate_kwargs.get('max_length'     ,self.model.config.max_length		)
									self.check_inputs(_UpperCAmelCase     ,generate_kwargs['min_length']     ,generate_kwargs['max_length']		)
									_a					:				List[str]				=							self.model.generate(**_UpperCAmelCase     ,**_UpperCAmelCase		)
									_a					:				int				=							output_ids.shape[0]
									if self.framework == "pt":
											_a					:				int				=							output_ids.reshape(_UpperCAmelCase     ,out_b // in_b     ,*output_ids.shape[1:]		)
									elif self.framework == "tf":
											_a					:				Any				=							tf.reshape(_UpperCAmelCase     ,(in_b, out_b // in_b, *output_ids.shape[1:])		)
									return {"output_ids": output_ids}







							def 							__lowercase      (							self :	Dict     ,_UpperCAmelCase :	Tuple     ,_UpperCAmelCase :	Any=ReturnType.TEXT     ,_UpperCAmelCase :	Dict=False		):
									_a					:				Union[str, Any]				=							[]
									for output_ids in model_outputs["output_ids"][0]:
											if return_type == ReturnType.TENSORS:
													_a					:				int				=							{F"""{self.return_name}_token_ids""": output_ids}
											elif return_type == ReturnType.TEXT:
													_a					:				str				=							{
													    F"""{self.return_name}_text""": self.tokenizer.decode(
													        _UpperCAmelCase     ,skip_special_tokens=_UpperCAmelCase     ,clean_up_tokenization_spaces=_UpperCAmelCase     ,)
													}
											records.append(_UpperCAmelCase		)
									return records

@add_end_docstrings(_UpperCamelCase       )
class      __magic_name__						(   _UpperCamelCase       ):
							lowerCAmelCase	:   Any           = 'summary'







							def __call__(							self :	Any     ,*_UpperCAmelCase :	Union[str, Any]     ,**_UpperCAmelCase :	List[str]		):
									return super().__call__(*_UpperCAmelCase     ,**_UpperCAmelCase		)







							def 							__lowercase      (							self :	Optional[Any]     ,_UpperCAmelCase :	int     ,_UpperCAmelCase :	int     ,_UpperCAmelCase :	int		):
									if max_length < min_length:
											logger.warning(F"""Your min_length={min_length} must be inferior than your max_length={max_length}."""		)

									if input_length < max_length:
											logger.warning(
											    F"""Your max_length is set to {max_length}, but your input_length is only {input_length}. Since this is """
											    'a summarization task, where outputs shorter than the input are typically wanted, you might '
											    F"""consider decreasing max_length manually, e.g. summarizer('...', max_length={input_length//2})"""		)

@add_end_docstrings(_UpperCamelCase       )
class      __magic_name__						(   _UpperCamelCase       ):
							lowerCAmelCase	:   List[Any]           = 'translation'







							def 							__lowercase      (							self :	Optional[int]     ,_UpperCAmelCase :	int     ,_UpperCAmelCase :	int     ,_UpperCAmelCase :	int		):
									if input_length > 0.9 * max_length:
											logger.warning(
											    F"""Your input_length: {input_length} is bigger than 0.9 * max_length: {max_length}. You might consider """
											    'increasing your max_length manually, e.g. translator(\'...\', max_length=400)'		)
									return True







							def 							__lowercase      (							self :	Any     ,*_UpperCAmelCase :	Any     ,_UpperCAmelCase :	List[str]=TruncationStrategy.DO_NOT_TRUNCATE     ,_UpperCAmelCase :	Optional[int]=None     ,_UpperCAmelCase :	Any=None		):
									if getattr(self.tokenizer     ,'_build_translation_inputs'     ,_UpperCAmelCase		):
											return self.tokenizer._build_translation_inputs(
											    *_UpperCAmelCase     ,return_tensors=self.framework     ,truncation=_UpperCAmelCase     ,src_lang=_UpperCAmelCase     ,tgt_lang=_UpperCAmelCase		)
									else:
											return super()._parse_and_tokenize(*_UpperCAmelCase     ,truncation=_UpperCAmelCase		)







							def 							__lowercase      (							self :	Tuple     ,_UpperCAmelCase :	List[Any]=None     ,_UpperCAmelCase :	List[str]=None     ,**_UpperCAmelCase :	Dict		):
									_a	, _a	, _a					:				str				=							super()._sanitize_parameters(**_UpperCAmelCase		)
									if src_lang is not None:
											_a					:				Optional[int]				=							src_lang
									if tgt_lang is not None:
											_a					:				List[Any]				=							tgt_lang
									if src_lang is None and tgt_lang is None:
											# Backward compatibility, direct arguments use is preferred.
											_a					:				int				=							kwargs.get('task'     ,self.task		)
											_a					:				int				=							task.split('_'		)
											if task and len(_UpperCAmelCase		) == 4:
													# translation, XX, to YY
													_a					:				List[Any]				=							items[1]
													_a					:				Any				=							items[3]
									return preprocess_params, forward_params, postprocess_params







							def __call__(							self :	Optional[Any]     ,*_UpperCAmelCase :	Tuple     ,**_UpperCAmelCase :	Optional[int]		):
									return super().__call__(*_UpperCAmelCase     ,**_UpperCAmelCase		)




