






"""simple docstring"""



import tempfile
import unittest
from pathlib import Path
from shutil import copyfile

from transformers import BatchEncoding, MarianTokenizer
from transformers.testing_utils import get_tests_dir, require_sentencepiece, slow
from transformers.utils import is_sentencepiece_available, is_tf_available, is_torch_available


if is_sentencepiece_available():
						from transformers.models.marian.tokenization_marian import VOCAB_FILES_NAMES, save_json

from ...test_tokenization_common import TokenizerTesterMixin


__A		:       int  				=		get_tests_dir('''fixtures/test_sentencepiece.model''')

__A		:       List[str]  				=		{'''target_lang''': '''fi''', '''source_lang''': '''en'''}
__A		:       int  				=		'''>>zh<<'''
__A		:       Any  				=		'''Helsinki-NLP/'''

if is_torch_available():
						__A		:       List[Any]  				=		'''pt'''
elif is_tf_available():
						__A		:       Union[str, Any]  				=		'''tf'''
else:
						__A		:       Union[str, Any]  				=		'''jax'''





@require_sentencepiece
class 					_UpperCAmelCase       ( _A   ,						unittest.TestCase							):
					SCREAMING_SNAKE_CASE_		:				Tuple							    =   MarianTokenizer
					SCREAMING_SNAKE_CASE_		:				List[str]							    =   False
					SCREAMING_SNAKE_CASE_		:				Tuple							    =   True




					def   A  (				self     :						Dict   )  ->  Union[str, Any]:
							super().setUp()
							lowercase_ : Optional[int]							       =   ['''</s>''', '''<unk>''', '''▁This''', '''▁is''', '''▁a''', '''▁t''', '''est''', '''\u0120''', '''<pad>''']
							lowercase_ : Dict							       =   dict(zip(A    ,						range(len(A   )   )   )   )
							lowercase_ : Dict							       =   Path(self.tmpdirname   )
							save_json(A    ,						save_dir / VOCAB_FILES_NAMES['''vocab''']   )
							save_json(A    ,						save_dir / VOCAB_FILES_NAMES['''tokenizer_config_file''']   )
							if not (save_dir / VOCAB_FILES_NAMES["source_spm"]).exists():
									copyfile(A    ,						save_dir / VOCAB_FILES_NAMES['''source_spm''']   )
									copyfile(A    ,						save_dir / VOCAB_FILES_NAMES['''target_spm''']   )

							lowercase_ : List[Any]							       =   MarianTokenizer.from_pretrained(self.tmpdirname   )
							tokenizer.save_pretrained(self.tmpdirname   )




					def   A  (				self     :						str    ,						**A     :						List[Any]   )  ->  MarianTokenizer:
							return MarianTokenizer.from_pretrained(self.tmpdirname    ,						**A   )




					def   A  (				self     :						List[str]    ,						A     :						int   )  ->  int:
							return (
							    "This is a test",
							    "This is a test",
							)




					def   A  (				self     :						int   )  ->  int:
							lowercase_ : Tuple							       =   '''</s>'''
							lowercase_ : Dict							       =   0

							self.assertEqual(self.get_tokenizer()._convert_token_to_id(A   )    ,						A   )
							self.assertEqual(self.get_tokenizer()._convert_id_to_token(A   )    ,						A   )




					def   A  (				self     :						List[str]   )  ->  str:
							lowercase_ : Any							       =   list(self.get_tokenizer().get_vocab().keys()   )

							self.assertEqual(vocab_keys[0]    ,						'''</s>'''   )
							self.assertEqual(vocab_keys[1]    ,						'''<unk>'''   )
							self.assertEqual(vocab_keys[-1]    ,						'''<pad>'''   )
							self.assertEqual(len(A   )    ,						9   )




					def   A  (				self     :						str   )  ->  Any:
							self.assertEqual(self.get_tokenizer().vocab_size    ,						9   )




					def   A  (				self     :						Any   )  ->  Optional[int]:
							lowercase_ : List[Any]							       =   MarianTokenizer.from_pretrained(F'''{ORG_NAME}opus-mt-en-de'''   )
							lowercase_ : Dict							       =   en_de_tokenizer(['''I am a small frog''']    ,						return_tensors=A   )
							self.assertIsInstance(A    ,						A   )
							lowercase_ : Optional[int]							       =   [38, 1_21, 14, 6_97, 3_88_48, 0]
							self.assertListEqual(A    ,						batch.input_ids[0]   )

							lowercase_ : Optional[int]							       =   tempfile.mkdtemp()
							en_de_tokenizer.save_pretrained(A   )
							lowercase_ : int							       =   [x.name for x in Path(A   ).glob('''*'''   )]
							self.assertIn('''source.spm'''    ,						A   )
							MarianTokenizer.from_pretrained(A   )




					def   A  (				self     :						List[Any]   )  ->  int:
							lowercase_ : int							       =   self.get_tokenizer()

							lowercase_ : Optional[Any]							       =   tok(
							    ['''I am a small frog''' * 10_00, '''I am a small frog''']    ,						padding=A    ,						truncation=A    ,						return_tensors=A   )
							self.assertIsInstance(A    ,						A   )
							self.assertEqual(batch.input_ids.shape    ,						(2, 5_12)   )




					def   A  (				self     :						Optional[int]   )  ->  str:
							lowercase_ : Tuple							       =   self.get_tokenizer()
							lowercase_ : List[Any]							       =   tok(['''I am a tiny frog''', '''I am a small frog''']    ,						padding=A    ,						return_tensors=A   )
							self.assertIsInstance(A    ,						A   )
							self.assertEqual(batch_smaller.input_ids.shape    ,						(2, 10)   )




					@slow
					def   A  (				self     :						Optional[Any]   )  ->  Union[str, Any]:
							# fmt: off
							lowercase_ : Dict							       =   {'''input_ids''': [[4_34_95, 4_62, 20, 4_21_64, 13_69, 52, 4_64, 1_32, 17_03, 4_92, 13, 74_91, 3_89_99, 6, 8, 4_64, 1_32, 17_03, 4_92, 13, 46_69, 3_78_67, 13, 75_25, 27, 15_93, 9_88, 13, 3_39_72, 70_29, 6, 20, 82_51, 3_83, 2, 2_70, 58_66, 37_88, 2, 23_53, 82_51, 1_23_38, 2, 1_39_58, 3_87, 2, 36_29, 69_53, 1_88, 29_00, 2, 1_39_58, 80_11, 1_15_01, 23, 84_60, 40_73, 3_40_09, 20, 4_35, 1_14_39, 27, 8, 84_60, 40_73, 60_04, 20, 99_88, 3_75, 27, 33, 2_66, 19_45, 10_76, 13_50, 3_78_67, 32_88, 5, 5_77, 10_76, 43_74, 8, 50_82, 5, 2_64_53, 2_57, 5_56, 4_03, 2, 2_42, 1_32, 3_83, 3_16, 4_92, 8, 1_07_67, 6, 3_16, 3_04, 42_39, 3, 0], [1_48, 1_57_22, 19, 18_39, 12, 13_50, 13, 2_23_27, 50_82, 54_18, 4_75_67, 3_59_38, 59, 3_18, 1_95_52, 1_08, 21_83, 54, 1_49_76, 48_35, 32, 5_47, 11_14, 8, 3_15, 24_17, 5, 92, 1_90_88, 3, 0, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00], [36, 63_95, 1_25_70, 3_91_47, 1_15_97, 6, 2_66, 4, 4_54_05, 72_96, 3, 0, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00, 5_81_00]], '''attention_mask''': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}  # noqa: E501
							# fmt: on

							self.tokenizer_integration_test_util(
							    expected_encoding=A    ,						model_name='''Helsinki-NLP/opus-mt-en-de'''    ,						revision='''1a8c2263da11e68e50938f97e10cd57820bd504c'''    ,						decode_kwargs={'''use_source_tokenizer''': True}    ,						)






					def   A  (				self     :						Optional[int]   )  ->  List[str]:
							lowercase_ : Any							       =   MarianTokenizer.from_pretrained('''hf-internal-testing/test-marian-two-vocabs'''   )

							lowercase_ : Optional[Any]							       =   '''Tämä on testi'''
							lowercase_ : Union[str, Any]							       =   '''This is a test'''

							lowercase_ : str							       =   [76, 7, 20_47, 2]
							lowercase_ : Union[str, Any]							       =   [69, 12, 11, 9_40, 2]

							lowercase_ : int							       =   tokenizer(A   ).input_ids
							self.assertListEqual(A    ,						A   )

							lowercase_ : int							       =   tokenizer(text_target=A   ).input_ids
							self.assertListEqual(A    ,						A   )

							lowercase_ : Optional[Any]							       =   tokenizer.decode(A    ,						skip_special_tokens=A   )
							self.assertEqual(A    ,						A   )








'''simple docstring'''


import math

class  SCREAMING_SNAKE_CASE :






    """simple docstring"""





    def __init__(  self      :					Union[str, Any]  ,						UpperCamelCase__      :					Optional[Any]=0 ):  # a graph with Node 0,1,...,N-1


       """simple docstring"""







       UpperCamelCase					=  n
       UpperCamelCase					=  [
           [math.inf for j in range(0  ,						UpperCamelCase__ )] for i in range(0  ,						UpperCamelCase__ )
       ]  # adjacency matrix for weight
       UpperCamelCase					=  [
           [math.inf for j in range(0  ,						UpperCamelCase__ )] for i in range(0  ,						UpperCamelCase__ )
       ]  # dp[i][j] stores minimum distance from i to j






    def  A       (  self      :					Optional[Any]  ,						UpperCamelCase__      :					Union[str, Any]  ,						UpperCamelCase__      :					Union[str, Any]  ,						UpperCamelCase__      :					Tuple ):


       """simple docstring"""







       UpperCamelCase					=  w






    def  A       (  self      :					str ):


       """simple docstring"""







       for k in range(0  ,						self.n ):
          for i in range(0  ,						self.n ):
             for j in range(0  ,						self.n ):
                UpperCamelCase					=  min(self.dp[i][j]  ,						self.dp[i][k] + self.dp[k][j] )






    def  A       (  self      :					Optional[Any]  ,						UpperCamelCase__      :					str  ,						UpperCamelCase__      :					List[Any] ):


       """simple docstring"""







       return self.dp[u][v]


if __name__ == "__main__":
   _lowerCamelCase	:       List[str]      	=	Graph(5)
   graph.add_edge(0, 2, 9)
   graph.add_edge(0, 4, 10)
   graph.add_edge(1, 3, 5)
   graph.add_edge(2, 3, 7)
   graph.add_edge(3, 0, 10)
   graph.add_edge(3, 1, 2)
   graph.add_edge(3, 2, 1)
   graph.add_edge(3, 4, 6)
   graph.add_edge(4, 1, 3)
   graph.add_edge(4, 2, 4)
   graph.add_edge(4, 3, 9)
   graph.floyd_warshall()
   graph.show_min(1, 4)
   graph.show_min(0, 3)

