





'''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


lowerCAmelCase_					:    str      	=			get_tests_dir('fixtures/test_sentencepiece.model')

lowerCAmelCase_					:    Optional[int]      	=			{'target_lang': 'fi', 'source_lang': 'en'}
lowerCAmelCase_					:    Optional[int]      	=			'>>zh<<'
lowerCAmelCase_					:    Tuple      	=			'Helsinki-NLP/'

if is_torch_available():
					lowerCAmelCase_					:    int      	=			'pt'
elif is_tf_available():
					lowerCAmelCase_					:    Any      	=			'tf'
else:
					lowerCAmelCase_					:    str      	=			'jax'
@require_sentencepiece
class 				__SCREAMING_SNAKE_CASE  (lowerCamelCase_       ,							unittest.TestCase      ):






				"""simple docstring"""







				__a            =MarianTokenizer
				__a            =False
				__a            =True




				def   UpperCamelCase__   (  self     :					List[str]					):
								super().setUp()
								_a								= ["</s>", "<unk>", "▁This", "▁is", "▁a", "▁t", "est", "\u0120", "<pad>"]
								_a								= dict(zip(__a					,				range(len(__a					)					)					)					)
								_a								= 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"]					)

								_a								= MarianTokenizer.from_pretrained(self.tmpdirname					)
								tokenizer.save_pretrained(self.tmpdirname					)




				def   UpperCamelCase__   (  self     :					Optional[int]					,				**__a     :					Any					):
								return MarianTokenizer.from_pretrained(self.tmpdirname					,				**__a					)




				def   UpperCamelCase__   (  self     :					int					,				__a     :					List[Any]					):
								return (
								    "This is a test",
								    "This is a test",
								)




				def   UpperCamelCase__   (  self     :					Any					):
								_a								= "</s>"
								_a								= 0

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




				def   UpperCamelCase__   (  self     :					int					):
								_a								= 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   UpperCamelCase__   (  self     :					Dict					):
								self.assertEqual(self.get_tokenizer().vocab_size					,				9					)




				def   UpperCamelCase__   (  self     :					List[Any]					):
								_a								= MarianTokenizer.from_pretrained(f'{ORG_NAME}opus-mt-en-de'					)
								_a								= en_de_tokenizer(["I am a small frog"]					,				return_tensors=__a					)
								self.assertIsInstance(__a					,				__a					)
								_a								= [38, 1_21, 14, 6_97, 3_88_48, 0]
								self.assertListEqual(__a					,				batch.input_ids[0]					)

								_a								= tempfile.mkdtemp()
								en_de_tokenizer.save_pretrained(__a					)
								_a								= [x.name for x in Path(__a					).glob("*"					)]
								self.assertIn("source.spm"					,				__a					)
								MarianTokenizer.from_pretrained(__a					)




				def   UpperCamelCase__   (  self     :					List[str]					):
								_a								= self.get_tokenizer()

								_a								= 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   UpperCamelCase__   (  self     :					str					):
								_a								= self.get_tokenizer()
								_a								= 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   UpperCamelCase__   (  self     :					List[Any]					):
								# fmt: off
								_a								= {"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   UpperCamelCase__   (  self     :					List[Any]					):
								_a								= MarianTokenizer.from_pretrained("hf-internal-testing/test-marian-two-vocabs"					)

								_a								= "Tämä on testi"
								_a								= "This is a test"

								_a								= [76, 7, 20_47, 2]
								_a								= [69, 12, 11, 9_40, 2]

								_a								= tokenizer(__a					).input_ids
								self.assertListEqual(__a					,				__a					)

								_a								= tokenizer(text_target=__a					).input_ids
								self.assertListEqual(__a					,				__a					)

								_a								= tokenizer.decode(__a					,				skip_special_tokens=__a					)
								self.assertEqual(__a					,				__a					)








"""simple docstring"""





import os







def      lowerCamelCase__       (							)      ->				List[Any]:
  with open(os.path.dirname(_lowerCamelCase ) + '/grid.txt' ) as f:
    lowerCamelCase_         =						[]  # noqa: E741
    for _ in range(20 ):
      l.append([int(_lowerCamelCase ) for x in f.readline().split()] )

    lowerCamelCase_         =						0

    # right
    for i in range(20 ):
      for j in range(17 ):
        lowerCamelCase_         =						l[i][j] * l[i][j + 1] * l[i][j + 2] * l[i][j + 3]
        if temp > maximum:
          lowerCamelCase_         =						temp

        # down
    for i in range(17 ):
      for j in range(20 ):
        lowerCamelCase_         =						l[i][j] * l[i + 1][j] * l[i + 2][j] * l[i + 3][j]
        if temp > maximum:
          lowerCamelCase_         =						temp

        # diagonal 1
    for i in range(17 ):
      for j in range(17 ):
        lowerCamelCase_         =						l[i][j] * l[i + 1][j + 1] * l[i + 2][j + 2] * l[i + 3][j + 3]
        if temp > maximum:
          lowerCamelCase_         =						temp

        # diagonal 2
    for i in range(17 ):
      for j in range(3		,				20 ):
        lowerCamelCase_         =						l[i][j] * l[i + 1][j - 1] * l[i + 2][j - 2] * l[i + 3][j - 3]
        if temp > maximum:
          lowerCamelCase_         =						temp
    return maximum


if __name__ == "__main__":
  print(solution())




