


# flake8: noqa
# Lint as: python3
SCREAMING_SNAKE_CASE       :      int												= [
    "VerificationMode",
    "Version",
    "disable_progress_bar",
    "enable_progress_bar",
    "is_progress_bar_enabled",
    "experimental",
]

from .info_utils import VerificationMode
from .logging import disable_progress_bar, enable_progress_bar, is_progress_bar_enabled
from .version import Version
from .experimental import experimental









'''simple docstring'''




import json
import os
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import CLIPTokenizer, CLIPTokenizerFast
from transformers.models.clip.tokenization_clip import VOCAB_FILES_NAMES
from transformers.testing_utils import require_vision
from transformers.utils import IMAGE_PROCESSOR_NAME, is_vision_available


if is_vision_available():
  from PIL import Image

  from transformers import CLIPImageProcessor, CLIPProcessor


@require_vision
class  SCREAMING_SNAKE_CASE    (unittest.TestCase							):


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Optional[Any]      =       tempfile.mkdtemp()

          # fmt: off
          __A						: Optional[int]      =       ['l', 'o', 'w', 'e', 'r', 's', 't', 'i', 'd', 'n', 'lo', 'l</w>', 'w</w>', 'r</w>', 't</w>', 'low</w>', 'er</w>', 'lowest</w>', 'newer</w>', 'wider', '<unk>', '<|startoftext|>', '<|endoftext|>']
          # fmt: on
          __A						: Tuple      =       dict(zip(_UpperCAmelCase						,	range(len(_UpperCAmelCase))))
          __A						: Any      =       ['#version: 0.2', 'l o', 'lo w</w>', 'e r</w>', '']
          __A						: List[str]      =       {'unk_token': '<unk>'}

          __A						: int      =       os.path.join(self.tmpdirname						,	VOCAB_FILES_NAMES['vocab_file'])
          __A						: Optional[int]      =       os.path.join(self.tmpdirname						,	VOCAB_FILES_NAMES['merges_file'])
          with open(self.vocab_file						,	'w'						,	encoding='utf-8') as fp:
               fp.write(json.dumps(_UpperCAmelCase) + '\n')
          with open(self.merges_file						,	'w'						,	encoding='utf-8') as fp:
               fp.write('\n'.join(_UpperCAmelCase))

          __A						: str      =       {
              'do_resize': True,
              'size': 20,
              'do_center_crop': True,
              'crop_size': 18,
              'do_normalize': True,
              'image_mean': [0.48145466, 0.4578275, 0.40821073],
              'image_std': [0.26862954, 0.26130258, 0.27577711],
          }
          __A						: Union[str, Any]      =       os.path.join(self.tmpdirname						,	_UpperCAmelCase)
          with open(self.image_processor_file						,	'w'						,	encoding='utf-8') as fp:
               json.dump(_UpperCAmelCase						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	**_UpperCAmelCase):

          '''simple docstring'''






          return CLIPTokenizer.from_pretrained(self.tmpdirname						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	**_UpperCAmelCase):

          '''simple docstring'''






          return CLIPTokenizerFast.from_pretrained(self.tmpdirname						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	**_UpperCAmelCase):

          '''simple docstring'''






          return CLIPImageProcessor.from_pretrained(self.tmpdirname						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          shutil.rmtree(self.tmpdirname)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Tuple      =       [np.random.randint(255						,	size=(3, 30, 400)						,	dtype=np.uinta)]

          __A						: Optional[int]      =       [Image.fromarray(np.moveaxis(_UpperCAmelCase						,	0						,	-1)) for x in image_inputs]

          return image_inputs


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: str      =       self.get_tokenizer()
          __A						: int      =       self.get_rust_tokenizer()
          __A						: Any      =       self.get_image_processor()

          __A						: Union[str, Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)
          processor_slow.save_pretrained(self.tmpdirname)
          __A						: Dict      =       CLIPProcessor.from_pretrained(self.tmpdirname						,	use_fast=_UpperCAmelCase)

          __A						: Union[str, Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)
          processor_fast.save_pretrained(self.tmpdirname)
          __A						: Union[str, Any]      =       CLIPProcessor.from_pretrained(self.tmpdirname)

          self.assertEqual(processor_slow.tokenizer.get_vocab()						,	tokenizer_slow.get_vocab())
          self.assertEqual(processor_fast.tokenizer.get_vocab()						,	tokenizer_fast.get_vocab())
          self.assertEqual(tokenizer_slow.get_vocab()						,	tokenizer_fast.get_vocab())
          self.assertIsInstance(processor_slow.tokenizer						,	_UpperCAmelCase)
          self.assertIsInstance(processor_fast.tokenizer						,	_UpperCAmelCase)

          self.assertEqual(processor_slow.image_processor.to_json_string()						,	image_processor.to_json_string())
          self.assertEqual(processor_fast.image_processor.to_json_string()						,	image_processor.to_json_string())
          self.assertIsInstance(processor_slow.image_processor						,	_UpperCAmelCase)
          self.assertIsInstance(processor_fast.image_processor						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Dict      =       CLIPProcessor(tokenizer=self.get_tokenizer()						,	image_processor=self.get_image_processor())
          processor.save_pretrained(self.tmpdirname)

          __A						: Dict      =       self.get_tokenizer(bos_token='(BOS)'						,	eos_token='(EOS)')
          __A						: Any      =       self.get_image_processor(do_normalize=_UpperCAmelCase						,	padding_value=1.0)

          __A						: Tuple      =       CLIPProcessor.from_pretrained(
              self.tmpdirname						,	bos_token='(BOS)'						,	eos_token='(EOS)'						,	do_normalize=_UpperCAmelCase						,	padding_value=1.0)

          self.assertEqual(processor.tokenizer.get_vocab()						,	tokenizer_add_kwargs.get_vocab())
          self.assertIsInstance(processor.tokenizer						,	_UpperCAmelCase)

          self.assertEqual(processor.image_processor.to_json_string()						,	image_processor_add_kwargs.to_json_string())
          self.assertIsInstance(processor.image_processor						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Optional[int]      =       self.get_image_processor()
          __A						: List[Any]      =       self.get_tokenizer()

          __A						: List[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: List[str]      =       self.prepare_image_inputs()

          __A						: Dict      =       image_processor(_UpperCAmelCase						,	return_tensors='np')
          __A						: str      =       processor(images=_UpperCAmelCase						,	return_tensors='np')

          for key in input_image_proc.keys():
               self.assertAlmostEqual(input_image_proc[key].sum()						,	input_processor[key].sum()						,	delta=1e-2)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: List[Any]      =       self.get_image_processor()
          __A						: List[str]      =       self.get_tokenizer()

          __A						: Optional[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: Dict      =       'lower newer'

          __A						: List[Any]      =       processor(text=_UpperCAmelCase)

          __A						: Optional[int]      =       tokenizer(_UpperCAmelCase)

          for key in encoded_tok.keys():
               self.assertListEqual(encoded_tok[key]						,	encoded_processor[key])


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Dict      =       self.get_image_processor()
          __A						: Optional[int]      =       self.get_tokenizer()

          __A						: Optional[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: int      =       'lower newer'
          __A						: Any      =       self.prepare_image_inputs()

          __A						: Tuple      =       processor(text=_UpperCAmelCase						,	images=_UpperCAmelCase)

          self.assertListEqual(list(inputs.keys())						,	['input_ids', 'attention_mask', 'pixel_values'])

          # test if it raises when no input is passed
          with pytest.raises(_UpperCAmelCase):
               processor()


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Any      =       self.get_image_processor()
          __A						: str      =       self.get_tokenizer()

          __A						: Optional[Any]      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: Dict      =       [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

          __A						: str      =       processor.batch_decode(_UpperCAmelCase)
          __A						: Optional[Any]      =       tokenizer.batch_decode(_UpperCAmelCase)

          self.assertListEqual(_UpperCAmelCase						,	_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: Optional[int]      =       self.get_image_processor()
          __A						: int      =       self.get_tokenizer()

          __A						: Any      =       CLIPProcessor(tokenizer=_UpperCAmelCase						,	image_processor=_UpperCAmelCase)

          __A						: Any      =       'lower newer'
          __A						: Any      =       self.prepare_image_inputs()

          __A						: Any      =       processor(text=_UpperCAmelCase						,	images=_UpperCAmelCase)

          self.assertListEqual(list(inputs.keys())						,	processor.model_input_names)