






import unittest

from cer import CER


lowerCAmelCase_     =			CER()
class   UpperCamelCase			(					unittest.TestCase			):







		"""simple docstring"""



		def    A(	self		:							Union[str, Any]		)     -> Optional[Any]:


						'''simple docstring'''
						A									=   ['White House']
						A									=   ['white house']
						# S = 2, D = 0, I = 0, N = 11, CER = 2 / 11
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.1818181818		) < 1E-6		)
		def    A(	self		:							Optional[int]		)     -> List[str]:


						'''simple docstring'''
						A									=   ['were wolf']
						A									=   ['werewolf']
						# S = 0, D = 0, I = 1, N = 9, CER = 1 / 9
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.1111111		) < 1E-6		)

						A									=   ['werewolf']
						A									=   ['weae     wolf']
						# S = 1, D = 1, I = 0, N = 8, CER = 0.25
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.25		) < 1E-6		)

						# consecutive whitespaces case 1
						A									=   ['were wolf']
						A									=   ['were               wolf']
						# S = 0, D = 0, I = 0, N = 9, CER = 0
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.0		) < 1E-6		)

						# consecutive whitespaces case 2
						A									=   ['were   wolf']
						A									=   ['were               wolf']
						# S = 0, D = 0, I = 0, N = 9, CER = 0
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.0		) < 1E-6		)
		def    A(	self		:							Dict		)     -> List[Any]:


						'''simple docstring'''
						A									=   ['werewolf']
						A									=   ['weaewolf']
						# S = 1, D = 0, I = 0, N = 8, CER = 0.125
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.125		) < 1E-6		)
		def    A(	self		:							Any		)     -> Optional[int]:


						'''simple docstring'''
						A									=   ['werewolf']
						A									=   ['wereawolf']
						# S = 0, D = 1, I = 0, N = 8, CER = 0.125
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.125		) < 1E-6		)
		def    A(	self		:							Optional[int]		)     -> str:


						'''simple docstring'''
						A									=   ['werewolf']
						A									=   ['wereolf']
						# S = 0, D = 0, I = 1, N = 8, CER = 0.125
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.125		) < 1E-6		)
		def    A(	self		:							Any		)     -> Optional[Any]:


						'''simple docstring'''
						A									=   ['werewolf']
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertEqual(_SCREAMING_SNAKE_CASE    ,0.0		)
		def    A(	self		:							List[str]		)     -> Any:


						'''simple docstring'''
						A									=   ['werewolf', 'I am your father']
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertEqual(_SCREAMING_SNAKE_CASE    ,0.0		)

						A									=   ['werewolf', 'I am your father', 'doge']
						A									=   ['werxwolf', 'I       am your father', 'doge']
						# S = 1, D = 0, I = 0, N = 28, CER = 1 / 28
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.03571428		) < 1E-6		)
		def    A(	self		:							List[str]		)     -> Optional[Any]:


						'''simple docstring'''
						A									=   ['My hovercraft', 'is full of eels']
						A									=   ['My hovercraft is full', ' of eels']
						# S = 0, D = 0, I = 2, N = 28, CER = 2 / 28
						# whitespace at the front of " of eels" will be strip during preporcessing
						# so need to insert 2 whitespaces
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE    ,concatenate_texts=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.071428		) < 1E-6		)
		def    A(	self		:							Union[str, Any]		)     -> List[str]:


						'''simple docstring'''
						A									=   ['我能吞下玻璃而不伤身体']
						A									=   [' 能吞虾玻璃而 不霜身体啦']
						# S = 3, D = 2, I = 0, N = 11, CER = 5 / 11
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.4545454545		) < 1E-6		)

						A									=   ['我能吞下玻璃', '而不伤身体']
						A									=   ['我    能 吞 下 玻 璃', '而不伤身体']
						# S = 0, D = 5, I = 0, N = 11, CER = 5 / 11
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertTrue(abs(char_error_rate - 0.454545454545		) < 1E-6		)

						A									=   ['我能吞下玻璃而不伤身体']
						A									=   cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)
						self.assertFalse(_SCREAMING_SNAKE_CASE    ,0.0		)







		def    A(	self		:							Tuple		)     -> Tuple:


						'''simple docstring'''
						A									=   ['']
						A									=   ['Hypothesis']
						with self.assertRaises(_SCREAMING_SNAKE_CASE		):
										cer.compute(predictions=_SCREAMING_SNAKE_CASE    ,references=_SCREAMING_SNAKE_CASE		)


if __name__ == "__main__":
					unittest.main()













import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin


if is_torch_available():
					import torch

if is_vision_available():
					from PIL import Image

					from transformers import CLIPImageProcessor
class   UpperCamelCase			(					unittest.TestCase			):







		"""simple docstring"""



		def __init__(	self		:							int    ,_SCREAMING_SNAKE_CASE		:							Any    ,_SCREAMING_SNAKE_CASE		:							Optional[int]=7    ,_SCREAMING_SNAKE_CASE		:							List[Any]=3    ,_SCREAMING_SNAKE_CASE		:							int=1_8    ,_SCREAMING_SNAKE_CASE		:							Tuple=3_0    ,_SCREAMING_SNAKE_CASE		:							Optional[Any]=4_0_0    ,_SCREAMING_SNAKE_CASE		:							Dict=True    ,_SCREAMING_SNAKE_CASE		:							int=None    ,_SCREAMING_SNAKE_CASE		:							Tuple=True    ,_SCREAMING_SNAKE_CASE		:							Any=None    ,_SCREAMING_SNAKE_CASE		:							Dict=True    ,_SCREAMING_SNAKE_CASE		:							List[str]=[0.48145466, 0.4578275, 0.40821073]    ,_SCREAMING_SNAKE_CASE		:							int=[0.26862954, 0.26130258, 0.27577711]    ,_SCREAMING_SNAKE_CASE		:							Union[str, Any]=True    ,)     -> List[str]:


						'''simple docstring'''
						A									=   size if size is not None else {'shortest_edge': 2_0}
						A									=   crop_size if crop_size is not None else {'height': 1_8, 'width': 1_8}
						A									=   parent
						A									=   batch_size
						A									=   num_channels
						A									=   image_size
						A									=   min_resolution
						A									=   max_resolution
						A									=   do_resize
						A									=   size
						A									=   do_center_crop
						A									=   crop_size
						A									=   do_normalize
						A									=   image_mean
						A									=   image_std
						A									=   do_convert_rgb
		def    A(	self		:							List[str]		)     -> Optional[int]:


						'''simple docstring'''
						return {
						    "do_resize": self.do_resize,
						    "size": self.size,
						    "do_center_crop": self.do_center_crop,
						    "crop_size": self.crop_size,
						    "do_normalize": self.do_normalize,
						    "image_mean": self.image_mean,
						    "image_std": self.image_std,
						    "do_convert_rgb": self.do_convert_rgb,
						}







		def    A(	self		:							Optional[int]    ,_SCREAMING_SNAKE_CASE		:							str=False    ,_SCREAMING_SNAKE_CASE		:							List[str]=False    ,_SCREAMING_SNAKE_CASE		:							Optional[Any]=False		)     -> str:


						'''simple docstring'''
						assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"

						if equal_resolution:
										A									=   []
										for i in range(self.batch_size		):
														image_inputs.append(
														    np.random.randint(
														        2_5_5    ,size=(self.num_channels, self.max_resolution, self.max_resolution)    ,dtype=np.uinta		)		)
						else:
										A									=   []
										for i in range(self.batch_size		):
														A			,		A									=   np.random.choice(np.arange(self.min_resolution    ,self.max_resolution		)    ,2		)
														image_inputs.append(np.random.randint(2_5_5    ,size=(self.num_channels, width, height)    ,dtype=np.uinta		)		)

						if not numpify and not torchify:
										# PIL expects the channel dimension as last dimension
										A									=   [Image.fromarray(np.moveaxis(_SCREAMING_SNAKE_CASE    ,0    ,-1		)		) for x in image_inputs]

						if torchify:
										A									=   [torch.from_numpy(_SCREAMING_SNAKE_CASE		) for x in image_inputs]

						return image_inputs


@require_torch
@require_vision
class   UpperCamelCase			(					snake_case__      ,							unittest.TestCase			):







		"""simple docstring"""



		snake_case			 = CLIPImageProcessor if is_vision_available() else None
		def    A(	self		:							Optional[Any]		)     -> Union[str, Any]:


						'''simple docstring'''
						A									=   CLIPImageProcessingTester(self		)
		@property
		def    A(	self		:							Optional[int]		)     -> Any:


						'''simple docstring'''
						return self.image_processor_tester.prepare_image_processor_dict()
		def    A(	self		:							Optional[int]		)     -> Tuple:


						'''simple docstring'''
						A									=   self.image_processing_class(**self.image_processor_dict		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_resize'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'size'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_center_crop'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'center_crop'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_normalize'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'image_mean'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'image_std'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_convert_rgb'		)		)
		def    A(	self		:							Optional[Any]		)     -> int:


						'''simple docstring'''
						A									=   self.image_processing_class.from_dict(self.image_processor_dict		)
						self.assertEqual(image_processor.size    ,{'shortest_edge': 2_0}		)
						self.assertEqual(image_processor.crop_size    ,{'height': 1_8, 'width': 1_8}		)

						A									=   self.image_processing_class.from_dict(self.image_processor_dict    ,size=4_2    ,crop_size=8_4		)
						self.assertEqual(image_processor.size    ,{'shortest_edge': 4_2}		)
						self.assertEqual(image_processor.crop_size    ,{'height': 8_4, 'width': 8_4}		)
		def    A(	self		:							Any		)     -> Union[str, Any]:


						'''simple docstring'''
						pass
		def    A(	self		:							Tuple		)     -> Optional[int]:


						'''simple docstring'''
						# Initialize image_processing
						A									=   self.image_processing_class(**self.image_processor_dict		)
						# create random PIL images
						A									=   self.image_processor_tester.prepare_inputs(equal_resolution=_SCREAMING_SNAKE_CASE		)
						for image in image_inputs:
										self.assertIsInstance(_SCREAMING_SNAKE_CASE    ,Image.Image		)

						# Test not batched input
						A									=   image_processing(image_inputs[0]    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        1,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)

						# Test batched
						A									=   image_processing(_SCREAMING_SNAKE_CASE    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        self.image_processor_tester.batch_size,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)
		def    A(	self		:							int		)     -> Tuple:


						'''simple docstring'''
						# Initialize image_processing
						A									=   self.image_processing_class(**self.image_processor_dict		)
						# create random numpy tensors
						A									=   self.image_processor_tester.prepare_inputs(equal_resolution=_SCREAMING_SNAKE_CASE    ,numpify=_SCREAMING_SNAKE_CASE		)
						for image in image_inputs:
										self.assertIsInstance(_SCREAMING_SNAKE_CASE    ,np.ndarray		)

						# Test not batched input
						A									=   image_processing(image_inputs[0]    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        1,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)

						# Test batched
						A									=   image_processing(_SCREAMING_SNAKE_CASE    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        self.image_processor_tester.batch_size,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)







		def    A(	self		:							str		)     -> str:


						'''simple docstring'''
						# Initialize image_processing
						A									=   self.image_processing_class(**self.image_processor_dict		)
						# create random PyTorch tensors
						A									=   self.image_processor_tester.prepare_inputs(equal_resolution=_SCREAMING_SNAKE_CASE    ,torchify=_SCREAMING_SNAKE_CASE		)
						for image in image_inputs:
										self.assertIsInstance(_SCREAMING_SNAKE_CASE    ,torch.Tensor		)

						# Test not batched input
						A									=   image_processing(image_inputs[0]    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        1,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)

						# Test batched
						A									=   image_processing(_SCREAMING_SNAKE_CASE    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        self.image_processor_tester.batch_size,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)


@require_torch
@require_vision
class   UpperCamelCase			(					snake_case__      ,							unittest.TestCase			):







		"""simple docstring"""



		snake_case			 = CLIPImageProcessor if is_vision_available() else None
		def    A(	self		:							Tuple		)     -> Union[str, Any]:


						'''simple docstring'''
						A									=   CLIPImageProcessingTester(self    ,num_channels=4		)
						A									=   3
		@property
		def    A(	self		:							str		)     -> Dict:


						'''simple docstring'''
						return self.image_processor_tester.prepare_image_processor_dict()
		def    A(	self		:							Any		)     -> int:


						'''simple docstring'''
						A									=   self.image_processing_class(**self.image_processor_dict		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_resize'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'size'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_center_crop'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'center_crop'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_normalize'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'image_mean'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'image_std'		)		)
						self.assertTrue(hasattr(_SCREAMING_SNAKE_CASE    ,'do_convert_rgb'		)		)
		def    A(	self		:							Any		)     -> str:


						'''simple docstring'''
						pass







		def    A(	self		:							Union[str, Any]		)     -> Dict:


						'''simple docstring'''
						# Initialize image_processing
						A									=   self.image_processing_class(**self.image_processor_dict		)
						# create random PIL images
						A									=   self.image_processor_tester.prepare_inputs(equal_resolution=_SCREAMING_SNAKE_CASE		)
						for image in image_inputs:
										self.assertIsInstance(_SCREAMING_SNAKE_CASE    ,Image.Image		)

						# Test not batched input
						A									=   image_processing(image_inputs[0]    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        1,
						        self.expected_encoded_image_num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)

						# Test batched
						A									=   image_processing(_SCREAMING_SNAKE_CASE    ,return_tensors='pt'		).pixel_values
						self.assertEqual(
						    encoded_images.shape    ,(
						        self.image_processor_tester.batch_size,
						        self.expected_encoded_image_num_channels,
						        self.image_processor_tester.crop_size['height'],
						        self.image_processor_tester.crop_size['width'],
						    )    ,)





