'''simple docstring'''






import os
import sys
import tempfile
import unittest
import unittest.mock as mock
from pathlib import Path

from huggingface_hub import HfFolder, delete_repo
from huggingface_hub.file_download import http_get
from requests.exceptions import HTTPError

from transformers import (
    AlbertTokenizer,
    AutoTokenizer,
    BertTokenizer,
    BertTokenizerFast,
    GPTaTokenizerFast,
    is_tokenizers_available,
)
from transformers.testing_utils import TOKEN, USER, is_staging_test, require_tokenizers
from transformers.tokenization_utils import Trie


sys.path.append(str(Path(__file__).parent.parent / '''utils'''))

from test_module.custom_tokenization import CustomTokenizer  # noqa E402


if is_tokenizers_available():
   from test_module.custom_tokenization_fast import CustomTokenizerFast







class lowercase_       (		unittest.TestCase			):







   """simple docstring"""

   def 	__UpperCAmelCase   (      self      :			int     )  ->			List[str]:
        # A mock response for an HTTP head request to emulate server down
        _A    		=  mock.Mock()
        _A    		=  5_00
        _A    		=  {}
        _A    		=  HTTPError
        _A    		=  {}

        # Download this model to make sure it's in the cache.
        _A    		=  BertTokenizer.from_pretrained('hf-internal-testing/tiny-random-bert'     )

        # Under the mock environment we get a 500 error when trying to reach the tokenizer.
        with mock.patch('requests.Session.request', return_value=UpperCamelCase__     ) as mock_head:
             _A    		=  BertTokenizer.from_pretrained('hf-internal-testing/tiny-random-bert'     )
             # This check we did call the fake head request
             mock_head.assert_called()
   @require_tokenizers
   def 	__UpperCAmelCase   (      self      :			int     )  ->			List[Any]:
        # A mock response for an HTTP head request to emulate server down
        _A    		=  mock.Mock()
        _A    		=  5_00
        _A    		=  {}
        _A    		=  HTTPError
        _A    		=  {}

        # Download this model to make sure it's in the cache.
        _A    		=  GPTaTokenizerFast.from_pretrained('gpt2'     )

        # Under the mock environment we get a 500 error when trying to reach the tokenizer.
        with mock.patch('requests.Session.request', return_value=UpperCamelCase__     ) as mock_head:
             _A    		=  GPTaTokenizerFast.from_pretrained('gpt2'     )
             # This check we did call the fake head request
             mock_head.assert_called()
   def 	__UpperCAmelCase   (      self      :			Optional[int]     )  ->			Any:
        # This test is for deprecated behavior and can be removed in v5
        try:
             _A    		=  tempfile.mktemp()
             with open(UpperCamelCase__, 'wb'     ) as f:
                  http_get('https://huggingface.co/albert-base-v1/resolve/main/spiece.model', UpperCamelCase__     )

             _A    		=  AlbertTokenizer.from_pretrained(UpperCamelCase__     )
        finally:
             os.remove(UpperCamelCase__     )

        # Supporting this legacy load introduced a weird bug where the tokenizer would load local files if they are in
        # the current folder and have the right name.
        if os.path.isfile('tokenizer.json'     ):
             # We skip the test if the user has a `tokenizer.json` in this folder to avoid deleting it.
             return
        try:
             with open('tokenizer.json', 'wb'     ) as f:
                  http_get('https://huggingface.co/hf-internal-testing/tiny-random-bert/blob/main/tokenizer.json', UpperCamelCase__     )
             _A    		=  AutoTokenizer.from_pretrained('hf-internal-testing/tiny-random-gpt2'     )
             # The tiny random BERT has a vocab size of 1024, tiny gpt2 as a vocab size of 1000
             self.assertEqual(tokenizer.vocab_size, 10_00     )
             # Tokenizer should depend on the remote checkpoint, not the local tokenizer.json file.

        finally:
             os.remove('tokenizer.json'     )

   def 	__UpperCAmelCase   (      self      :			Tuple     )  ->			Optional[int]:
        # This test is for deprecated behavior and can be removed in v5
        _A    		=  AlbertTokenizer.from_pretrained('https://huggingface.co/albert-base-v1/resolve/main/spiece.model'     )







@is_staging_test
class lowercase_       (		unittest.TestCase			):







   """simple docstring"""

   __lowerCAmelCase         =   ["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]", "bla", "blou"]
   @classmethod
   def 	__UpperCAmelCase   (      cls      :			List[str]     )  ->			str:
        _A    		=  TOKEN
        HfFolder.save_token(UpperCamelCase__     )
   @classmethod
   def 	__UpperCAmelCase   (      cls      :			Union[str, Any]     )  ->			Optional[int]:
        try:
             delete_repo(token=cls._token, repo_id='test-tokenizer'     )
        except HTTPError:
             pass

        try:
             delete_repo(token=cls._token, repo_id='valid_org/test-tokenizer-org'     )
        except HTTPError:
             pass

        try:
             delete_repo(token=cls._token, repo_id='test-dynamic-tokenizer'     )
        except HTTPError:
             pass
   def 	__UpperCAmelCase   (      self      :			Any     )  ->			List[Any]:
        with tempfile.TemporaryDirectory() as tmp_dir:
             _A    		=  os.path.join(UpperCamelCase__, 'vocab.txt'     )
             with open(UpperCamelCase__, 'w', encoding='utf-8'     ) as vocab_writer:
                  vocab_writer.write(''.join([x + '\n' for x in self.vocab_tokens]     )     )
             _A    		=  BertTokenizer(UpperCamelCase__     )

        tokenizer.push_to_hub('test-tokenizer', use_auth_token=self._token     )
        _A    		=  BertTokenizer.from_pretrained(f'{USER}/test-tokenizer'     )
        self.assertDictEqual(new_tokenizer.vocab, tokenizer.vocab     )

        # Reset repo
        delete_repo(token=self._token, repo_id='test-tokenizer'     )

        # Push to hub via save_pretrained
        with tempfile.TemporaryDirectory() as tmp_dir:
             tokenizer.save_pretrained(UpperCamelCase__, repo_id='test-tokenizer', push_to_hub=UpperCamelCase__, use_auth_token=self._token     )

        _A    		=  BertTokenizer.from_pretrained(f'{USER}/test-tokenizer'     )
        self.assertDictEqual(new_tokenizer.vocab, tokenizer.vocab     )
   def 	__UpperCAmelCase   (      self      :			Optional[Any]     )  ->			Optional[int]:
        with tempfile.TemporaryDirectory() as tmp_dir:
             _A    		=  os.path.join(UpperCamelCase__, 'vocab.txt'     )
             with open(UpperCamelCase__, 'w', encoding='utf-8'     ) as vocab_writer:
                  vocab_writer.write(''.join([x + '\n' for x in self.vocab_tokens]     )     )
             _A    		=  BertTokenizer(UpperCamelCase__     )

        tokenizer.push_to_hub('valid_org/test-tokenizer-org', use_auth_token=self._token     )
        _A    		=  BertTokenizer.from_pretrained('valid_org/test-tokenizer-org'     )
        self.assertDictEqual(new_tokenizer.vocab, tokenizer.vocab     )

        # Reset repo
        delete_repo(token=self._token, repo_id='valid_org/test-tokenizer-org'     )

        # Push to hub via save_pretrained
        with tempfile.TemporaryDirectory() as tmp_dir:
             tokenizer.save_pretrained(
                 UpperCamelCase__, repo_id='valid_org/test-tokenizer-org', push_to_hub=UpperCamelCase__, use_auth_token=self._token     )

        _A    		=  BertTokenizer.from_pretrained('valid_org/test-tokenizer-org'     )
        self.assertDictEqual(new_tokenizer.vocab, tokenizer.vocab     )

   @require_tokenizers
   def 	__UpperCAmelCase   (      self      :			Dict     )  ->			Dict:
        CustomTokenizer.register_for_auto_class()
        with tempfile.TemporaryDirectory() as tmp_dir:
             _A    		=  os.path.join(UpperCamelCase__, 'vocab.txt'     )
             with open(UpperCamelCase__, 'w', encoding='utf-8'     ) as vocab_writer:
                  vocab_writer.write(''.join([x + '\n' for x in self.vocab_tokens]     )     )
             _A    		=  CustomTokenizer(UpperCamelCase__     )

        # No fast custom tokenizer
        tokenizer.push_to_hub('test-dynamic-tokenizer', use_auth_token=self._token     )

        _A    		=  AutoTokenizer.from_pretrained(f'{USER}/test-dynamic-tokenizer', trust_remote_code=UpperCamelCase__     )
        # Can't make an isinstance check because the new_model.config is from the CustomTokenizer class of a dynamic module
        self.assertEqual(tokenizer.__class__.__name__, 'CustomTokenizer'     )

        # Fast and slow custom tokenizer
        CustomTokenizerFast.register_for_auto_class()
        with tempfile.TemporaryDirectory() as tmp_dir:
             _A    		=  os.path.join(UpperCamelCase__, 'vocab.txt'     )
             with open(UpperCamelCase__, 'w', encoding='utf-8'     ) as vocab_writer:
                  vocab_writer.write(''.join([x + '\n' for x in self.vocab_tokens]     )     )

             _A    		=  BertTokenizerFast.from_pretrained(UpperCamelCase__     )
             bert_tokenizer.save_pretrained(UpperCamelCase__     )
             _A    		=  CustomTokenizerFast.from_pretrained(UpperCamelCase__     )

        tokenizer.push_to_hub('test-dynamic-tokenizer', use_auth_token=self._token     )

        _A    		=  AutoTokenizer.from_pretrained(f'{USER}/test-dynamic-tokenizer', trust_remote_code=UpperCamelCase__     )
        # Can't make an isinstance check because the new_model.config is from the FakeConfig class of a dynamic module
        self.assertEqual(tokenizer.__class__.__name__, 'CustomTokenizerFast'     )
        _A    		=  AutoTokenizer.from_pretrained(
            f'{USER}/test-dynamic-tokenizer', use_fast=UpperCamelCase__, trust_remote_code=UpperCamelCase__     )
        # Can't make an isinstance check because the new_model.config is from the FakeConfig class of a dynamic module
        self.assertEqual(tokenizer.__class__.__name__, 'CustomTokenizer'     )







class lowercase_       (		unittest.TestCase			):







   """simple docstring"""

   def 	__UpperCAmelCase   (      self      :			List[str]     )  ->			Tuple:
        _A    		=  Trie()
        trie.add('Hello 友達'     )
        self.assertEqual(trie.data, {'H': {'e': {'l': {'l': {'o': {' ': {'友': {'達': {'': 1}}}}}}}}}     )
        trie.add('Hello'     )
        trie.data
        self.assertEqual(trie.data, {'H': {'e': {'l': {'l': {'o': {'': 1, ' ': {'友': {'達': {'': 1}}}}}}}}}     )
   def 	__UpperCAmelCase   (      self      :			Any     )  ->			int:
        _A    		=  Trie()
        self.assertEqual(trie.split('[CLS] This is a extra_id_100'     ), ['[CLS] This is a extra_id_100']     )
        trie.add('[CLS]'     )
        trie.add('extra_id_1'     )
        trie.add('extra_id_100'     )
        self.assertEqual(trie.split('[CLS] This is a extra_id_100'     ), ['[CLS]', ' This is a ', 'extra_id_100']     )
   def 	__UpperCAmelCase   (      self      :			Optional[Any]     )  ->			Optional[int]:
        _A    		=  Trie()
        trie.add('A'     )
        self.assertEqual(trie.split('ABC'     ), ['A', 'BC']     )
        self.assertEqual(trie.split('BCA'     ), ['BC', 'A']     )
   def 	__UpperCAmelCase   (      self      :			Union[str, Any]     )  ->			str:
        _A    		=  Trie()
        trie.add('TOKEN]'     )
        trie.add('[SPECIAL_TOKEN]'     )
        self.assertEqual(trie.split('This is something [SPECIAL_TOKEN]'     ), ['This is something ', '[SPECIAL_TOKEN]']     )
   def 	__UpperCAmelCase   (      self      :			str     )  ->			Any:
        _A    		=  Trie()
        trie.add('A'     )
        trie.add('P'     )
        trie.add('[SPECIAL_TOKEN]'     )
        self.assertEqual(trie.split('This is something [SPECIAL_TOKEN]'     ), ['This is something ', '[SPECIAL_TOKEN]']     )
   def 	__UpperCAmelCase   (      self      :			Dict     )  ->			Optional[int]:
        _A    		=  Trie()
        trie.add('AB'     )
        trie.add('B'     )
        trie.add('C'     )
        self.assertEqual(trie.split('ABC'     ), ['AB', 'C']     )
   def 	__UpperCAmelCase   (      self      :			Tuple     )  ->			Tuple:
        _A    		=  Trie()
        trie.add('ABC'     )
        trie.add('B'     )
        trie.add('CD'     )
        self.assertEqual(trie.split('ABCD'     ), ['ABC', 'D']     )

   def 	__UpperCAmelCase   (      self      :			Optional[int]     )  ->			Any:
        # Even if the offsets are wrong, we necessarily output correct string
        # parts.
        _A    		=  Trie()
        _A    		=  trie.cut_text('ABC', [0, 0, 2, 1, 2, 3]     )
        self.assertEqual(UpperCamelCase__, ['AB', 'C']     )











import colorsys

from PIL import Image  # type: ignore






def 	UpperCamelCase	(							snake_case__  : float						,snake_case__  : float						,snake_case__  : int	):




     '''simple docstring'''






     __snake_case      :List[Any] 							=    x
     __snake_case      :str 							=    y
     for step in range(snake_case__	):  # noqa: B007
          __snake_case      :Tuple 							=    a * a - b * b + x
          __snake_case      :Dict 							=    2 * a * b + y
          __snake_case      :str 							=    a_new

          # divergence happens for all complex number with an absolute value
          # greater than 4
          if a * a + b * b > 4:
               break
     return step / (max_step - 1)






def 	UpperCamelCase	(							snake_case__  : float	):




     '''simple docstring'''






     if distance == 1:
          return (0, 0, 0)
     else:
          return (255, 255, 255)






def 	UpperCamelCase	(							snake_case__  : float	):




     '''simple docstring'''






     if distance == 1:
          return (0, 0, 0)
     else:
          return tuple(round(i * 255	) for i in colorsys.hsv_to_rgb(snake_case__						,1						,1	)	)






def 	UpperCamelCase	(							snake_case__  : int = 800						,snake_case__  : int = 600						,snake_case__  : float = -0.6						,snake_case__  : float = 0						,snake_case__  : float = 3.2						,snake_case__  : int = 50						,snake_case__  : bool = True						,):




     '''simple docstring'''






     __snake_case      :Tuple 							=    Image.new("""RGB"""						,(image_width, image_height)	)
     __snake_case      :Dict 							=    img.load()

     # loop through the image-coordinates
     for image_x in range(snake_case__	):
          for image_y in range(snake_case__	):
               # determine the figure-coordinates based on the image-coordinates
               __snake_case      :Dict 							=    figure_width / image_width * image_height
               __snake_case      :Any 							=    figure_center_x + (image_x / image_width - 0.5) * figure_width
               __snake_case      :List[str] 							=    figure_center_y + (image_y / image_height - 0.5) * figure_height

               __snake_case      :Tuple 							=    get_distance(snake_case__						,snake_case__						,snake_case__	)

               # color the corresponding pixel based on the selected coloring-function
               if use_distance_color_coding:
                    __snake_case      :Optional[int] 							=    get_color_coded_rgb(snake_case__	)
               else:
                    __snake_case      :Optional[int] 							=    get_black_and_white_rgb(snake_case__	)

     return img


if __name__ == "__main__":
     import doctest

     doctest.testmod()

     # colored version, full figure
     lowerCamelCase__       		=  get_image()

     # uncomment for colored version, different section, zoomed in
     # img = get_image(figure_center_x = -0.6, figure_center_y = -0.4,
     # figure_width = 0.8)

     # uncomment for black and white version, full figure
     # img = get_image(use_distance_color_coding = False)

     # uncomment to save the image
     # img.save("mandelbrot.png")

     img.show()


