

# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from ..models.auto import AutoModelForSeqaSeqLM, AutoTokenizer
from .base import PipelineTool

class 				UpperCAmelCase_		(			__lowercase   ):
							"""simple docstring"""







							UpperCAmelCase__       :						Optional[int]	    =    "philschmid/bart-large-cnn-samsum"
							UpperCAmelCase__       :						List[Any]	    =    (
							    "This is a tool that summarizes an English text. It takes an input `text` containing the text to summarize, "
							    "and returns a summary of the text."
							)
							UpperCAmelCase__       :						Tuple	    =    "summarizer"
							UpperCAmelCase__       :						Optional[Any]	    =    AutoTokenizer
							UpperCAmelCase__       :						List[str]	    =    AutoModelForSeqaSeqLM

							UpperCAmelCase__       :						Dict	    =    ["text"]
							UpperCAmelCase__       :						Dict	    =    ["text"]


							def 				__lowercase				(			self       ,							_a       )    ->    List[Any]:
												return self.pre_processor(_a       ,							return_tensors='''pt'''       ,							truncation=_a       )


							def 				__lowercase				(			self       ,							_a       )    ->    List[str]:
												return self.model.generate(**_a       )[0]




							def 				__lowercase				(			self       ,							_a       )    ->    int:
												return self.pre_processor.decode(_a       ,							skip_special_tokens=_a       ,							clean_up_tokenization_spaces=_a       )






import unittest

from transformers import EsmConfig, is_torch_available
from transformers.testing_utils import TestCasePlus, require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
			import torch

			from transformers.models.esm.modeling_esmfold import EsmForProteinFolding

class 				UpperCAmelCase_		:
							"""simple docstring"""







							def __init__(			self       ,							_a       ,							_a=1_3       ,							_a=7       ,							_a=False       ,							_a=True       ,							_a=False       ,							_a=False       ,							_a=1_9       ,							_a=3_2       ,							_a=5       ,							_a=4       ,							_a=3_7       ,							_a="gelu"       ,							_a=0.1       ,							_a=0.1       ,							_a=5_1_2       ,							_a=1_6       ,							_a=2       ,							_a=0.02       ,							_a=3       ,							_a=4       ,							_a=None       ,							)    ->    Union[str, Any]:
												_a	:    Optional[Any]         =		parent
												_a	:    Union[str, Any]         =		batch_size
												_a	:    List[Any]         =		seq_length
												_a	:    Dict         =		is_training
												_a	:    int         =		use_input_mask
												_a	:    str         =		use_token_type_ids
												_a	:    Any         =		use_labels
												_a	:    List[Any]         =		vocab_size
												_a	:    Any         =		hidden_size
												_a	:    int         =		num_hidden_layers
												_a	:    str         =		num_attention_heads
												_a	:    Dict         =		intermediate_size
												_a	:    List[str]         =		hidden_act
												_a	:    Optional[Any]         =		hidden_dropout_prob
												_a	:    Optional[Any]         =		attention_probs_dropout_prob
												_a	:    int         =		max_position_embeddings
												_a	:    Tuple         =		type_vocab_size
												_a	:    str         =		type_sequence_label_size
												_a	:    Any         =		initializer_range
												_a	:    Union[str, Any]         =		num_labels
												_a	:    Dict         =		num_choices
												_a	:    Union[str, Any]         =		scope


							def 				__lowercase				(			self       )    ->    List[Any]:
												_a	:    str         =		ids_tensor([self.batch_size, self.seq_length]       ,							self.vocab_size       )

												_a	:    Dict         =		None
												if self.use_input_mask:
																	_a	:    int         =		random_attention_mask([self.batch_size, self.seq_length]       )

												_a	:    List[Any]         =		None
												_a	:    Tuple         =		None
												_a	:    Any         =		None
												if self.use_labels:
																	_a	:    Tuple         =		ids_tensor([self.batch_size]       ,							self.type_sequence_label_size       )
																	_a	:    Union[str, Any]         =		ids_tensor([self.batch_size, self.seq_length]       ,							self.num_labels       )
																	_a	:    List[Any]         =		ids_tensor([self.batch_size]       ,							self.num_choices       )

												_a	:    str         =		self.get_config()

												return config, input_ids, input_mask, sequence_labels, token_labels, choice_labels


							def 				__lowercase				(			self       )    ->    str:
												_a	:    Optional[int]         =		EsmConfig(
												    vocab_size=3_3       ,							hidden_size=self.hidden_size       ,							pad_token_id=1       ,							num_hidden_layers=self.num_hidden_layers       ,							num_attention_heads=self.num_attention_heads       ,							intermediate_size=self.intermediate_size       ,							hidden_act=self.hidden_act       ,							hidden_dropout_prob=self.hidden_dropout_prob       ,							attention_probs_dropout_prob=self.attention_probs_dropout_prob       ,							max_position_embeddings=self.max_position_embeddings       ,							type_vocab_size=self.type_vocab_size       ,							initializer_range=self.initializer_range       ,							is_folding_model=_a       ,							esmfold_config={'''trunk''': {'''num_blocks''': 2}, '''fp16_esm''': False}       ,							)
												return config


							def 				__lowercase				(			self       ,							_a       ,							_a       ,							_a       ,							_a       ,							_a       ,							_a       )    ->    str:
												_a	:    Union[str, Any]         =		EsmForProteinFolding(config=_a       ).float()
												model.to(_a       )
												model.eval()
												_a	:    str         =		model(_a       ,							attention_mask=_a       )
												_a	:    Union[str, Any]         =		model(_a       )
												_a	:    Optional[int]         =		model(_a       )

												self.parent.assertEqual(result.positions.shape       ,							(8, self.batch_size, self.seq_length, 1_4, 3)       )
												self.parent.assertEqual(result.angles.shape       ,							(8, self.batch_size, self.seq_length, 7, 2)       )




							def 				__lowercase				(			self       )    ->    str:
												_a	:    List[str]         =		self.prepare_config_and_inputs()
												(
												    (
												    _a
												)      ,					(
												    _a
												)      ,					(
												    _a
												)      ,					(
												    _a
												)      ,					(
												    _a
												)      ,					(
												    _a
												)      ,					
												)	:    Optional[Any]         =		config_and_inputs
												_a	:    List[Any]         =		{'''input_ids''': input_ids, '''attention_mask''': input_mask}
												return config, inputs_dict



@require_torch
class 				UpperCAmelCase_		(			__lowercase				,       __lowercase				,       unittest.TestCase   ):
							"""simple docstring"""







							UpperCAmelCase__       :						Any	    =    False

							UpperCAmelCase__       :						Any	    =    (EsmForProteinFolding,) if is_torch_available() else ()
							UpperCAmelCase__       :						Union[str, Any]	    =    ()
							UpperCAmelCase__       :						int	    =    {} if is_torch_available() else {}
							UpperCAmelCase__       :						Optional[int]	    =    False


							def 				__lowercase				(			self       )    ->    List[Any]:
												_a	:    Optional[int]         =		EsmFoldModelTester(self       )
												_a	:    Dict         =		ConfigTester(self       ,							config_class=_a       ,							hidden_size=3_7       )


							def 				__lowercase				(			self       )    ->    List[str]:
												self.config_tester.run_common_tests()


							def 				__lowercase				(			self       )    ->    str:
												_a	:    str         =		self.model_tester.prepare_config_and_inputs()
												self.model_tester.create_and_check_model(*_a       )


							@unittest.skip('''Does not support attention outputs'''       )
							def 				__lowercase				(			self       )    ->    int:
												pass


							@unittest.skip
							def 				__lowercase				(			self       )    ->    List[str]:
												pass


							@unittest.skip('''Esm does not support embedding resizing'''       )
							def 				__lowercase				(			self       )    ->    int:
												pass


							@unittest.skip('''Esm does not support embedding resizing'''       )
							def 				__lowercase				(			self       )    ->    Optional[Any]:
												pass


							@unittest.skip('''ESMFold does not support passing input embeds!'''       )
							def 				__lowercase				(			self       )    ->    int:
												pass


							@unittest.skip('''ESMFold does not support head pruning.'''       )
							def 				__lowercase				(			self       )    ->    str:
												pass


							@unittest.skip('''ESMFold does not support head pruning.'''       )
							def 				__lowercase				(			self       )    ->    Optional[Any]:
												pass


							@unittest.skip('''ESMFold does not support head pruning.'''       )
							def 				__lowercase				(			self       )    ->    Optional[Any]:
												pass


							@unittest.skip('''ESMFold does not support head pruning.'''       )
							def 				__lowercase				(			self       )    ->    Any:
												pass


							@unittest.skip('''ESMFold does not support head pruning.'''       )
							def 				__lowercase				(			self       )    ->    Tuple:
												pass


							@unittest.skip('''ESMFold does not output hidden states in the normal way.'''       )
							def 				__lowercase				(			self       )    ->    Tuple:
												pass


							@unittest.skip('''ESMfold does not output hidden states in the normal way.'''       )
							def 				__lowercase				(			self       )    ->    Tuple:
												pass


							@unittest.skip('''ESMFold only has one output format.'''       )
							def 				__lowercase				(			self       )    ->    Tuple:
												pass


							@unittest.skip('''This test doesn\'t work for ESMFold and doesn\'t test core functionality'''       )
							def 				__lowercase				(			self       )    ->    Dict:
												pass


							@unittest.skip('''ESMFold does not support input chunking.'''       )
							def 				__lowercase				(			self       )    ->    Tuple:
												pass


							@unittest.skip('''ESMFold doesn\'t respect you and it certainly doesn\'t respect your initialization arguments.'''       )
							def 				__lowercase				(			self       )    ->    Optional[Any]:
												pass


							@unittest.skip('''ESMFold doesn\'t support torchscript compilation.'''       )
							def 				__lowercase				(			self       )    ->    List[str]:
												pass


							@unittest.skip('''ESMFold doesn\'t support torchscript compilation.'''       )
							def 				__lowercase				(			self       )    ->    List[str]:
												pass


							@unittest.skip('''ESMFold doesn\'t support torchscript compilation.'''       )
							def 				__lowercase				(			self       )    ->    List[Any]:
												pass


							@unittest.skip('''ESMFold doesn\'t support data parallel.'''       )
							def 				__lowercase				(			self       )    ->    Union[str, Any]:
												pass




							@unittest.skip('''Will be fixed soon by reducing the size of the model used for common tests.'''       )
							def 				__lowercase				(			self       )    ->    Optional[Any]:
												pass



@require_torch
class 				UpperCAmelCase_		(			__lowercase   ):
							"""simple docstring"""







							@slow
							def 				__lowercase				(			self       )    ->    Optional[int]:
												_a	:    Dict         =		EsmForProteinFolding.from_pretrained('''facebook/esmfold_v1'''       ).float()
												model.eval()
												_a	:    Tuple         =		torch.tensor([[0, 6, 4, 1_3, 5, 4, 1_6, 1_2, 1_1, 7, 2]]       )
												_a	:    Optional[Any]         =		model(_a       )['''positions''']
												_a	:    Union[str, Any]         =		torch.tensor([2.5828, 0.7993, -10.9334]       ,							dtype=torch.floataa       )
												self.assertTrue(torch.allclose(position_outputs[0, 0, 0, 0]       ,							_a       ,							atol=1e-4       )       )



