
from __future__ import annotations

from typing import Any




class 						lowercase__  :
	def __init__(			self							:   Dict       ,   UpperCAmelCase_							:   int							):
						SCREAMING_SNAKE_CASE__													= num_of_nodes
						SCREAMING_SNAKE_CASE__													= []
						SCREAMING_SNAKE_CASE__													= {}
	def      A_				(			self							:   Optional[int]       ,   UpperCAmelCase_							:   int       ,   UpperCAmelCase_							:   int       ,   UpperCAmelCase_							:   int							):
						self.m_edges.append([u_node, v_node, weight]							)
	def      A_				(			self							:   Any       ,   UpperCAmelCase_							:   int							):

						if self.m_component[u_node] == u_node:
											return u_node
						return self.find_component(self.m_component[u_node]							)
	def      A_				(			self							:   List[str]       ,   UpperCAmelCase_							:   int							):

						if self.m_component[u_node] != u_node:
											for k in self.m_component:
																SCREAMING_SNAKE_CASE__													= self.find_component(UpperCAmelCase_							)
	def      A_				(			self							:   Optional[Any]       ,   UpperCAmelCase_							:   list[int]       ,   UpperCAmelCase_							:   int       ,   UpperCAmelCase_							:   int							):

						if component_size[u_node] <= component_size[v_node]:
											SCREAMING_SNAKE_CASE__													= v_node
											component_size[v_node] += component_size[u_node]
											self.set_component(UpperCAmelCase_							)

						elif component_size[u_node] >= component_size[v_node]:
											SCREAMING_SNAKE_CASE__													= self.find_component(UpperCAmelCase_							)
											component_size[u_node] += component_size[v_node]
											self.set_component(UpperCAmelCase_							)





	def      A_				(			self							:   Tuple							):
						SCREAMING_SNAKE_CASE__													= []
						SCREAMING_SNAKE_CASE__													= 0

						SCREAMING_SNAKE_CASE__													= [-1] * self.m_num_of_nodes

						# A list of components (initialized to all of the nodes)
						for node in range(self.m_num_of_nodes							):
											self.m_component.update({node: node}							)
											component_size.append(1							)

						SCREAMING_SNAKE_CASE__													= self.m_num_of_nodes

						while num_of_components > 1:
											for edge in self.m_edges:
																SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= edge

																SCREAMING_SNAKE_CASE__													= self.m_component[u]
																SCREAMING_SNAKE_CASE__													= self.m_component[v]

																if u_component != v_component:

																					for component in (u_component, v_component):
																										if (
																										    minimum_weight_edge[component] == -1
																										    or minimum_weight_edge[component][2] > w
																										):
																															SCREAMING_SNAKE_CASE__													= [u, v, w]

											for edge in minimum_weight_edge:
																if isinstance(UpperCAmelCase_       ,   UpperCAmelCase_							):
																					SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= edge

																					SCREAMING_SNAKE_CASE__													= self.m_component[u]
																					SCREAMING_SNAKE_CASE__													= self.m_component[v]

																					if u_component != v_component:
																										mst_weight += w
																										self.union(UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_							)
																										print(F'Added edge [{u} - {v}]\nAdded weight: {w}\n'							)
																										num_of_components -= 1

											SCREAMING_SNAKE_CASE__													= [-1] * self.m_num_of_nodes
						print(F'The total weight of the minimal spanning tree is: {mst_weight}'							)






def 							_lowercase							(     )		->		None:
					'''simple docstring'''




if __name__ == "__main__":
				import doctest

				doctest.testmod()







import json
import os
import unittest

from transformers.models.gptsan_japanese.tokenization_gptsan_japanese import (
    VOCAB_FILES_NAMES,
    GPTSanJapaneseTokenizer,
)
from transformers.testing_utils import require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin




@require_tokenizers
class 						lowercase__  (						_UpperCAmelCase     ,       unittest.TestCase  ):
	A__    :   Any				       =GPTSanJapaneseTokenizer
	A__    :   str				       =False
	A__    :   int				       ={"""do_clean_text""": False, """add_prefix_space""": False}
	def      A_				(			self							:   Any							):
						super().setUp()

						# fmt: off
						SCREAMING_SNAKE_CASE__													= ['こん', 'こんに', 'にちは', 'ばんは', '世界,㔺界', '、', '。', '<BR>', '<SP>', '<TAB>', '<URL>', '<EMAIL>', '<TEL>', '<DATE>', '<PRICE>', '<BLOCK>', '<KIGOU>', '<U2000U2BFF>', '<|emoji1|>', '<unk>', '<|bagoftoken|>', '<|endoftext|>']
						# fmt: on
						SCREAMING_SNAKE_CASE__													= {'emoji': {'\ud83d\ude00': '<|emoji1|>'}, 'emoji_inv': {'<|emoji1|>': '\ud83d\ude00'}}  # 😀
						SCREAMING_SNAKE_CASE__													= {'unk_token': '<unk>'}

						SCREAMING_SNAKE_CASE__													= os.path.join(self.tmpdirname       ,   VOCAB_FILES_NAMES['vocab_file']							)
						SCREAMING_SNAKE_CASE__													= os.path.join(self.tmpdirname       ,   VOCAB_FILES_NAMES['emoji_file']							)
						with open(self.vocab_file       ,   'w'       ,   encoding='utf-8'							) as vocab_writer:
											vocab_writer.write(''.join([x + '\n' for x in vocab_tokens]							)							)
						with open(self.emoji_file       ,   'w'							) as emoji_writer:
											emoji_writer.write(json.dumps(UpperCAmelCase_							)							)
	def      A_				(			self							:   str       ,   **UpperCAmelCase_							:   Optional[Any]							):
						kwargs.update(self.special_tokens_map							)
						return GPTSanJapaneseTokenizer.from_pretrained(self.tmpdirname       ,   **UpperCAmelCase_							)
	def      A_				(			self							:   int       ,   UpperCAmelCase_							:   List[str]							):
						SCREAMING_SNAKE_CASE__													= 'こんにちは、世界。 \nこんばんは、㔺界。😀'
						SCREAMING_SNAKE_CASE__													= 'こんにちは、世界。 \nこんばんは、世界。😀'
						return input_text, output_text
	def      A_				(			self							:   Any       ,   UpperCAmelCase_							:   str							):
						SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.get_input_output_texts(UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.encode(UpperCAmelCase_       ,   add_special_tokens=UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.decode(UpperCAmelCase_       ,   clean_up_tokenization_spaces=UpperCAmelCase_							)
						return text, ids
	def      A_				(			self							:   str							):
						pass  # TODO add if relevant
	def      A_				(			self							:   Tuple							):
						pass  # TODO add if relevant
	def      A_				(			self							:   int							):
						pass  # TODO add if relevant
	def      A_				(			self							:   Optional[int]							):
						SCREAMING_SNAKE_CASE__													= self.get_tokenizer()

						# Testing tokenization
						SCREAMING_SNAKE_CASE__													= 'こんにちは、世界。　こんばんは、㔺界。'
						SCREAMING_SNAKE_CASE__													= ['こん', 'にちは', '、', '世界', '。', '<SP>', 'こん', 'ばんは', '、', '㔺界', '。']
						SCREAMING_SNAKE_CASE__													= tokenizer.tokenize(UpperCAmelCase_							)
						self.assertListEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)

						# Testing conversion to ids without special tokens
						SCREAMING_SNAKE_CASE__													= [0, 2, 5, 4, 6, 8, 0, 3, 5, 4, 6]
						SCREAMING_SNAKE_CASE__													= tokenizer.convert_tokens_to_ids(UpperCAmelCase_							)
						self.assertListEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)

						# Testing conversion to ids with special tokens
						SCREAMING_SNAKE_CASE__													= tokens + [tokenizer.unk_token]
						SCREAMING_SNAKE_CASE__													= [0, 2, 5, 4, 6, 8, 0, 3, 5, 4, 6, 19]
						SCREAMING_SNAKE_CASE__													= tokenizer.convert_tokens_to_ids(UpperCAmelCase_							)
						self.assertListEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
	def      A_				(			self							:   Union[str, Any]							):
						SCREAMING_SNAKE_CASE__													= self.get_tokenizer()

						# Testing tokenization
						SCREAMING_SNAKE_CASE__													= 'こんにちは、<|bagoftoken|>世界。こんばんは、<|bagoftoken|>㔺界。'
						SCREAMING_SNAKE_CASE__													= 'こんにちは、、、、世界。こんばんは、、、、世界。'
						SCREAMING_SNAKE_CASE__													= tokenizer.encode(UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.decode(UpperCAmelCase_							)
						self.assertEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
	@slow
	def      A_				(			self							:   str							):
						SCREAMING_SNAKE_CASE__													= self.tokenizer_class.from_pretrained('Tanrei/GPTSAN-japanese'							)

						# Testing tokenization
						SCREAMING_SNAKE_CASE__													= 'こんにちは、世界。'
						SCREAMING_SNAKE_CASE__													= 'こんばんは、㔺界。😀'
						SCREAMING_SNAKE_CASE__													= 'こんにちは、世界。こんばんは、世界。😀'
						SCREAMING_SNAKE_CASE__													= tokenizer.encode(prefix_text + input_text							)
						SCREAMING_SNAKE_CASE__													= tokenizer.encode(''       ,   prefix_text=prefix_text + input_text							)
						SCREAMING_SNAKE_CASE__													= tokenizer.encode(UpperCAmelCase_       ,   prefix_text=UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.decode(UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.decode(UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.decode(UpperCAmelCase_							)
						self.assertEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
						self.assertEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
						self.assertEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
	@slow
	def      A_				(			self							:   Union[str, Any]							):
						SCREAMING_SNAKE_CASE__													= self.tokenizer_class.from_pretrained('Tanrei/GPTSAN-japanese'							)

						# Testing tokenization
						SCREAMING_SNAKE_CASE__													= 'こんにちは、世界。'
						SCREAMING_SNAKE_CASE__													= 'こんばんは、㔺界。😀'

						SCREAMING_SNAKE_CASE__													= len(tokenizer.encode(UpperCAmelCase_							)							) - 2
						SCREAMING_SNAKE_CASE__													= len(tokenizer.encode(UpperCAmelCase_							)							) - 2

						SCREAMING_SNAKE_CASE__													= [1] + [0] * (len_prefix + len_text + 1)
						SCREAMING_SNAKE_CASE__													= [1] * (len_prefix + len_text + 1) + [0]
						SCREAMING_SNAKE_CASE__													= [1] + [1] * (len_prefix) + [0] * (len_text + 1)

						SCREAMING_SNAKE_CASE__													= tokenizer(prefix_text + input_text							).token_type_ids
						SCREAMING_SNAKE_CASE__													= tokenizer(''       ,   prefix_text=prefix_text + input_text							).token_type_ids
						SCREAMING_SNAKE_CASE__													= tokenizer(UpperCAmelCase_       ,   prefix_text=UpperCAmelCase_							).token_type_ids
						self.assertListEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
						self.assertListEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
						self.assertListEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
	@slow
	def      A_				(			self							:   Tuple							):
						SCREAMING_SNAKE_CASE__													= self.tokenizer_class.from_pretrained('Tanrei/GPTSAN-japanese'							)

						SCREAMING_SNAKE_CASE__													= tokenizer.encode('あンいワ'							)
						SCREAMING_SNAKE_CASE__													= tokenizer.encode(''       ,   prefix_text='あンいワ'							)
						SCREAMING_SNAKE_CASE__													= tokenizer.encode('いワ'       ,   prefix_text='あン'							)

						self.assertEqual(tokenizer.decode(UpperCAmelCase_							)       ,   tokenizer.decode(UpperCAmelCase_							)							)
						self.assertEqual(tokenizer.decode(UpperCAmelCase_							)       ,   tokenizer.decode(UpperCAmelCase_							)							)
						self.assertNotEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
						self.assertNotEqual(UpperCAmelCase_       ,   UpperCAmelCase_							)
						self.assertEqual(x_token_a[1]       ,   x_token_a[-1]							)  # SEG token
						self.assertEqual(x_token_a[1]       ,   x_token_a[3]							)  # SEG token
	@slow
	def      A_				(			self							:   Union[str, Any]							):
						SCREAMING_SNAKE_CASE__													= self.tokenizer_class.from_pretrained('Tanrei/GPTSAN-japanese'							)

						SCREAMING_SNAKE_CASE__													= [['武田信玄', 'は、'], ['織田信長', 'の配下の、']]
						SCREAMING_SNAKE_CASE__													= tokenizer(UpperCAmelCase_       ,   padding=UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= tokenizer.batch_encode_plus(UpperCAmelCase_       ,   padding=UpperCAmelCase_							)

						# fmt: off
						SCREAMING_SNAKE_CASE__													= [[35993, 8640, 25948, 35998, 30647, 35675, 35999, 35999], [35993, 10382, 9868, 35998, 30646, 9459, 30646, 35675]]
						SCREAMING_SNAKE_CASE__													= [[1, 1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0]]
						SCREAMING_SNAKE_CASE__													= [[1, 1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1]]
						# fmt: on
						self.assertListEqual(x_token.input_ids       ,   UpperCAmelCase_							)
						self.assertListEqual(x_token.token_type_ids       ,   UpperCAmelCase_							)
						self.assertListEqual(x_token.attention_mask       ,   UpperCAmelCase_							)
						self.assertListEqual(x_token_a.input_ids       ,   UpperCAmelCase_							)
						self.assertListEqual(x_token_a.token_type_ids       ,   UpperCAmelCase_							)
						self.assertListEqual(x_token_a.attention_mask       ,   UpperCAmelCase_							)
	def      A_				(			self							:   Tuple							):
						# Intentionally convert some words to accommodate character fluctuations unique to Japanese
						pass





	def      A_				(			self							:   List[str]							):
						# tokenizer has no padding token
						pass





