


import unittest

from transformers import (
    MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    SummarizationPipeline,
    TFPreTrainedModel,
    pipeline,
)
from transformers.testing_utils import get_gpu_count, is_pipeline_test, require_tf, require_torch, slow, torch_device
from transformers.tokenization_utils import TruncationStrategy

from .test_pipelines_common import ANY


lowerCAmelCase__						:int         =							-1 if torch_device == '''cpu''' else 0

@is_pipeline_test
class 	__a   (       unittest.TestCase    ):
		_a			:						str    			=			MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
		_a			:						Dict    			=			TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)				-> Any:




									"""simple docstring"""





									_UpperCAmelCase					=    SummarizationPipeline(model=_SCREAMING_SNAKE_CASE    ,					tokenizer=_SCREAMING_SNAKE_CASE		)
									return summarizer, ["(CNN)The Palestinian Authority officially became", "Some other text"]
		def 			UpperCAmelCase__       (    self    ,					_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)				-> Union[str, Any]:




									"""simple docstring"""





									_UpperCAmelCase					=    summarizer.model

									_UpperCAmelCase					=    summarizer('(CNN)The Palestinian Authority officially became'		)
									self.assertEqual(_SCREAMING_SNAKE_CASE    ,					[{'summary_text': ANY(_SCREAMING_SNAKE_CASE		)}]		)

									_UpperCAmelCase					=    summarizer(
									    '(CNN)The Palestinian Authority officially became '    ,					num_beams=2    ,					min_length=2    ,					max_length=5    ,					)
									self.assertEqual(_SCREAMING_SNAKE_CASE    ,					[{'summary_text': ANY(_SCREAMING_SNAKE_CASE		)}]		)

									# Some models (Switch Transformers, LED, T5, LongT5, etc) can handle long sequences.
									_UpperCAmelCase					=    [
									    'SwitchTransformersConfig',
									    'T5Config',
									    'LongT5Config',
									    'LEDConfig',
									    'PegasusXConfig',
									    'FSMTConfig',
									    'M2M100Config',
									    'ProphetNetConfig',  # positional embeddings up to a fixed maximum size (otherwise clamping the values)
									]
									if model.config.__class__.__name__ not in model_can_handle_longer_seq:
																# Too long and exception is expected.
																# For TF models, if the weights are initialized in GPU context, we won't get expected index error from
																# the embedding layer.
																if not (
																    isinstance(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)
																    and get_gpu_count() > 0
																    and len(summarizer.model.trainable_weights		) > 0
																):
																							with self.assertRaises(_SCREAMING_SNAKE_CASE		):
																														_UpperCAmelCase					=    summarizer('This ' * 1000		)
									_UpperCAmelCase					=    summarizer('This ' * 1000    ,					truncation=TruncationStrategy.ONLY_FIRST		)
		@require_torch
		def 			UpperCAmelCase__       (    self		)				-> List[str]:




									"""simple docstring"""





									_UpperCAmelCase					=    pipeline(task='summarization'    ,					model='sshleifer/tiny-mbart'    ,					framework='pt'		)
									_UpperCAmelCase					=    summarizer('This is a small test'		)
									self.assertEqual(
									    _SCREAMING_SNAKE_CASE    ,					[
									        {
									            'summary_text': 'เข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไป'
									        }
									    ]    ,					)
		@require_tf
		def 			UpperCAmelCase__       (    self		)				-> Dict:




									"""simple docstring"""





									_UpperCAmelCase					=    pipeline(task='summarization'    ,					model='sshleifer/tiny-mbart'    ,					framework='tf'		)
									_UpperCAmelCase					=    summarizer('This is a small test'		)
									self.assertEqual(
									    _SCREAMING_SNAKE_CASE    ,					[
									        {
									            'summary_text': 'เข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไปเข้าไป'
									        }
									    ]    ,					)






		@require_torch
		@slow
		def 			UpperCAmelCase__       (    self		)				-> int:




									"""simple docstring"""





									_UpperCAmelCase					=    pipeline(task='summarization'    ,					device=_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    (
									    ' (CNN)The Palestinian Authority officially became the 123rd member of the International Criminal Court on'
									    ' Wednesday, a step that gives the court jurisdiction over alleged crimes in Palestinian territories. The'
									    ' formal accession was marked with a ceremony at The Hague, in the Netherlands, where the court is based.'
									    ' The Palestinians signed the ICC\'s founding Rome Statute in January, when they also accepted its'
									    ' jurisdiction over alleged crimes committed "in the occupied Palestinian territory, including East'
									    ' Jerusalem, since June 13, 2014." Later that month, the ICC opened a preliminary examination into the'
									    ' situation in Palestinian territories, paving the way for possible war crimes investigations against'
									    ' Israelis. As members of the court, Palestinians may be subject to counter-charges as well. Israel and'
									    ' the United States, neither of which is an ICC member, opposed the Palestinians\' efforts to join the'
									    ' body. But Palestinian Foreign Minister Riad al-Malki, speaking at Wednesday\'s ceremony, said it was a'
									    ' move toward greater justice. "As Palestine formally becomes a State Party to the Rome Statute today, the'
									    ' world is also a step closer to ending a long era of impunity and injustice," he said, according to an'
									    ' ICC news release. "Indeed, today brings us closer to our shared goals of justice and peace." Judge'
									    ' Kuniko Ozaki, a vice president of the ICC, said acceding to the treaty was just the first step for the'
									    ' Palestinians. "As the Rome Statute today enters into force for the State of Palestine, Palestine'
									    ' acquires all the rights as well as responsibilities that come with being a State Party to the Statute.'
									    ' These are substantive commitments, which cannot be taken lightly," she said. Rights group Human Rights'
									    ' Watch welcomed the development. "Governments seeking to penalize Palestine for joining the ICC should'
									    ' immediately end their pressure, and countries that support universal acceptance of the court\'s treaty'
									    ' should speak out to welcome its membership," said Balkees Jarrah, international justice counsel for the'
									    ' group. \"What\'s objectionable is the attempts to undermine international justice, not Palestine\'s'
									    ' decision to join a treaty to which over 100 countries around the world are members." In January, when'
									    ' the preliminary ICC examination was opened, Israeli Prime Minister Benjamin Netanyahu described it as an'
									    ' outrage, saying the court was overstepping its boundaries. The United States also said it "strongly"'
									    ' disagreed with the court\'s decision. \"As we have said repeatedly, we do not believe that Palestine is a'
									    ' state and therefore we do not believe that it is eligible to join the ICC," the State Department said in'
									    ' a statement. It urged the warring sides to resolve their differences through direct negotiations. "We'
									    ' will continue to oppose actions against Israel at the ICC as counterproductive to the cause of peace,"'
									    ' it said. But the ICC begs to differ with the definition of a state for its purposes and refers to the'
									    ' territories as "Palestine." While a preliminary examination is not a formal investigation, it allows the'
									    ' court to review evidence and determine whether to investigate suspects on both sides. Prosecutor Fatou'
									    ' Bensouda said her office would "conduct its analysis in full independence and impartiality." The war'
									    ' between Israel and Hamas militants in Gaza last summer left more than 2,000 people dead. The inquiry'
									    ' will include alleged war crimes committed since June. The International Criminal Court was set up in'
									    ' 2002 to prosecute genocide, crimes against humanity and war crimes. CNN\'s Vasco Cotovio, Kareem Khadder'
									    ' and Faith Karimi contributed to this report.'
									)
									_UpperCAmelCase					=    (
									    ' The Palestinian Authority becomes the 123rd member of the International Criminal Court . The move gives'
									    ' the court jurisdiction over alleged crimes in Palestinian territories . Israel and the United States'
									    ' opposed the Palestinians\' efforts to join the court . Rights group Human Rights Watch welcomes the move,'
									    ' says governments seeking to penalize Palestine should end pressure .'
									)
									_UpperCAmelCase					=    summarizer(_SCREAMING_SNAKE_CASE		)
									self.assertEqual(result[0]['summary_text']    ,					_SCREAMING_SNAKE_CASE		)





import warnings

from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding

class 	__a   (       UpperCAmelCase    ):
		_a			:						int    			=			['image_processor', 'tokenizer']
		_a			:						Union[str, Any]    			=			'AutoImageProcessor'
		_a			:						Optional[int]    			=			'AutoTokenizer'
		def __init__(    self    ,					_SCREAMING_SNAKE_CASE=None    ,					_SCREAMING_SNAKE_CASE=None    ,					**_SCREAMING_SNAKE_CASE		)				-> Tuple:




									"""simple docstring"""





									_UpperCAmelCase					=    None
									if "feature_extractor" in kwargs:
																warnings.warn(
																    'The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`'
																    ' instead.'    ,					_SCREAMING_SNAKE_CASE    ,					)
																_UpperCAmelCase					=    kwargs.pop('feature_extractor'		)

									_UpperCAmelCase					=    image_processor if image_processor is not None else feature_extractor
									if image_processor is None:
																raise ValueError('You have to specify an image_processor.'		)
									if tokenizer is None:
																raise ValueError('You have to specify a tokenizer.'		)

									super().__init__(_SCREAMING_SNAKE_CASE    ,					_SCREAMING_SNAKE_CASE		)
									_UpperCAmelCase					=    self.image_processor
		def __call__(    self    ,					_SCREAMING_SNAKE_CASE=None    ,					_SCREAMING_SNAKE_CASE=None    ,					_SCREAMING_SNAKE_CASE=None    ,					**_SCREAMING_SNAKE_CASE		)				-> Dict:




									"""simple docstring"""





									if text is None and images is None:
																raise ValueError('You have to specify either text or images. Both cannot be none.'		)

									if text is not None:
																_UpperCAmelCase					=    self.tokenizer(_SCREAMING_SNAKE_CASE    ,					return_tensors=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)

									if images is not None:
																_UpperCAmelCase					=    self.image_processor(_SCREAMING_SNAKE_CASE    ,					return_tensors=_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)

									if text is not None and images is not None:
																_UpperCAmelCase					=    image_features.pixel_values
																return encoding
									elif text is not None:
																return encoding
									else:
																return BatchEncoding(data=dict(**_SCREAMING_SNAKE_CASE		)    ,					tensor_type=_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self    ,					*_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)				-> int:




									"""simple docstring"""





									return self.tokenizer.batch_decode(*_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)
		def 			UpperCAmelCase__       (    self    ,					*_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)				-> Tuple:




									"""simple docstring"""





									return self.tokenizer.decode(*_SCREAMING_SNAKE_CASE    ,					**_SCREAMING_SNAKE_CASE		)
		@property
		def 			UpperCAmelCase__       (    self		)				-> Optional[int]:




									"""simple docstring"""





									_UpperCAmelCase					=    self.tokenizer.model_input_names
									_UpperCAmelCase					=    self.image_processor.model_input_names
									return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names		)		)
		@property
		def 			UpperCAmelCase__       (    self		)				-> Any:




									"""simple docstring"""





									warnings.warn(
									    '`feature_extractor_class` is deprecated and will be removed in v5. Use `image_processor_class` instead.'    ,					_SCREAMING_SNAKE_CASE    ,					)
									return self.image_processor_class






		@property
		def 			UpperCAmelCase__       (    self		)				-> Any:




									"""simple docstring"""





									warnings.warn(
									    '`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead.'    ,					_SCREAMING_SNAKE_CASE    ,					)
									return self.image_processor
