



'''simple docstring'''

import unittest

import numpy as np
import torch
from torch import nn
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModelWithProjection,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import KandinskyVaaPriorPipeline, PriorTransformer, UnCLIPScheduler
from diffusers.utils import torch_device
from diffusers.utils.testing_utils import enable_full_determinism, skip_mps

from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()






class 						a_		(     snake_case    ,   unittest.TestCase    ):
							UpperCAmelCase			:		List[str]        =				KandinskyVaaPriorPipeline
							UpperCAmelCase			:		Tuple        =				["""prompt"""]
							UpperCAmelCase			:		int        =				["""prompt""", """negative_prompt"""]
							UpperCAmelCase			:		Dict        =				[
							    """num_images_per_prompt""",
							    """generator""",
							    """num_inference_steps""",
							    """latents""",
							    """negative_prompt""",
							    """guidance_scale""",
							    """output_type""",
							    """return_dict""",
							]
							UpperCAmelCase			:		Optional[Any]        =				False


							@property
							def    UpperCamelCase     (				self   :						str			)			->					int:
										return 3_2


							@property
							def    UpperCamelCase     (				self   :						Optional[Any]			)			->					Optional[Any]:
										return 3_2


							@property
							def    UpperCamelCase     (				self   :						List[str]			)			->					Union[str, Any]:
										return self.time_input_dim


							@property
							def    UpperCamelCase     (				self   :						Any			)			->					List[str]:
										return self.time_input_dim * 4


							@property
							def    UpperCamelCase     (				self   :						Optional[int]			)			->					Optional[Any]:
										return 1_0_0


							@property
							def    UpperCamelCase     (				self   :						Optional[Any]			)			->					Any:
										snake_case:    Dict      							=CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'			)
										return tokenizer


							@property
							def    UpperCamelCase     (				self   :						Optional[Any]			)			->					Optional[int]:
										torch.manual_seed(0			)
										snake_case:    List[str]      							=CLIPTextConfig(
										    bos_token_id=0      ,						eos_token_id=2      ,						hidden_size=self.text_embedder_hidden_size      ,						projection_dim=self.text_embedder_hidden_size      ,						intermediate_size=3_7      ,						layer_norm_eps=1E-0_5      ,						num_attention_heads=4      ,						num_hidden_layers=5      ,						pad_token_id=1      ,						vocab_size=1_0_0_0      ,						)
										return CLIPTextModelWithProjection(a_			)


							@property
							def    UpperCamelCase     (				self   :						List[Any]			)			->					Union[str, Any]:
										torch.manual_seed(0			)

										snake_case:    List[Any]      							={
										    'num_attention_heads': 2,
										    'attention_head_dim': 1_2,
										    'embedding_dim': self.text_embedder_hidden_size,
										    'num_layers': 1,
										}

										snake_case:    List[str]      							=PriorTransformer(**a_			)
										# clip_std and clip_mean is initialized to be 0 so PriorTransformer.post_process_latents will always return 0 - set clip_std to be 1 so it won't return 0
										snake_case:    Tuple      							=nn.Parameter(torch.ones(model.clip_std.shape			)			)
										return model


							@property
							def    UpperCamelCase     (				self   :						Union[str, Any]			)			->					int:
										torch.manual_seed(0			)
										snake_case:    List[str]      							=CLIPVisionConfig(
										    hidden_size=self.text_embedder_hidden_size      ,						image_size=2_2_4      ,						projection_dim=self.text_embedder_hidden_size      ,						intermediate_size=3_7      ,						num_attention_heads=4      ,						num_channels=3      ,						num_hidden_layers=5      ,						patch_size=1_4      ,						)

										snake_case:    List[str]      							=CLIPVisionModelWithProjection(a_			)
										return model


							@property
							def    UpperCamelCase     (				self   :						Tuple			)			->					List[str]:
										snake_case:    List[str]      							=CLIPImageProcessor(
										    crop_size=2_2_4      ,						do_center_crop=a_      ,						do_normalize=a_      ,						do_resize=a_      ,						image_mean=[0.4_8_1_4_5_4_6_6, 0.4_5_7_8_2_7_5, 0.4_0_8_2_1_0_7_3]      ,						image_std=[0.2_6_8_6_2_9_5_4, 0.2_6_1_3_0_2_5_8, 0.2_7_5_7_7_7_1_1]      ,						resample=3      ,						size=2_2_4      ,						)

										return image_processor


							def    UpperCamelCase     (				self   :						Union[str, Any]			)			->					List[Any]:
										snake_case:    Any      							=self.dummy_prior
										snake_case:    Optional[Any]      							=self.dummy_image_encoder
										snake_case:    Dict      							=self.dummy_text_encoder
										snake_case:    Dict      							=self.dummy_tokenizer
										snake_case:    Dict      							=self.dummy_image_processor

										snake_case:    Tuple      							=UnCLIPScheduler(
										    variance_type='fixed_small_log'      ,						prediction_type='sample'      ,						num_train_timesteps=1_0_0_0      ,						clip_sample=a_      ,						clip_sample_range=1_0.0      ,						)

										snake_case:    str      							={
										    'prior': prior,
										    'image_encoder': image_encoder,
										    'text_encoder': text_encoder,
										    'tokenizer': tokenizer,
										    'scheduler': scheduler,
										    'image_processor': image_processor,
										}

										return components


							def    UpperCamelCase     (				self   :						Tuple      ,						a_   :						Optional[Any]      ,						a_   :						int=0			)			->					List[str]:
										if str(a_			).startswith('mps'			):
													snake_case:    Union[str, Any]      							=torch.manual_seed(a_			)
										else:
													snake_case:    List[str]      							=torch.Generator(device=a_			).manual_seed(a_			)
										snake_case:    str      							={
										    'prompt': 'horse',
										    'generator': generator,
										    'guidance_scale': 4.0,
										    'num_inference_steps': 2,
										    'output_type': 'np',
										}
										return inputs


							def    UpperCamelCase     (				self   :						Optional[int]			)			->					Optional[int]:
										snake_case:    str      							='cpu'

										snake_case:    Tuple      							=self.get_dummy_components()

										snake_case:    Tuple      							=self.pipeline_class(**a_			)
										snake_case:    Union[str, Any]      							=pipe.to(a_			)

										pipe.set_progress_bar_config(disable=a_			)

										snake_case:    int      							=pipe(**self.get_dummy_inputs(a_			)			)
										snake_case:    Any      							=output.image_embeds

										snake_case:    List[Any]      							=pipe(
										    **self.get_dummy_inputs(a_			)      ,						return_dict=a_      ,						)[0]

										snake_case:    Dict      							=image[0, -1_0:]
										snake_case:    Optional[int]      							=image_from_tuple[0, -1_0:]

										assert image.shape == (1, 3_2)

										snake_case:    str      							=np.array(
										    [-0.0_5_3_2, 1.7_1_2_0, 0.3_6_5_6, -1.0_8_5_2, -0.8_9_4_6, -1.1_7_5_6, 0.4_3_4_8, 0.2_4_8_2, 0.5_1_4_6, -0.1_1_5_6]			)

										assert np.abs(image_slice.flatten() - expected_slice			).max() < 1E-2
										assert np.abs(image_from_tuple_slice.flatten() - expected_slice			).max() < 1E-2


							@skip_mps
							def    UpperCamelCase     (				self   :						List[str]			)			->					Union[str, Any]:
										snake_case:    Optional[Any]      							=torch_device == 'cpu'
										snake_case:    Any      							=True
										snake_case:    Any      							=False

										self._test_inference_batch_single_identical(
										    test_max_difference=a_      ,						relax_max_difference=a_      ,						test_mean_pixel_difference=a_      ,						)




							@skip_mps
							def    UpperCamelCase     (				self   :						List[Any]			)			->					int:
										snake_case:    Optional[Any]      							=torch_device == 'cpu'
										snake_case:    Dict      							=False

										self._test_attention_slicing_forward_pass(
										    test_max_difference=a_      ,						test_mean_pixel_difference=a_      ,						)









'''simple docstring'''

import unittest

from transformers import SPIECE_UNDERLINE, XLNetTokenizer, XLNetTokenizerFast
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin


a							   =				get_tests_dir('fixtures/test_sentencepiece.model')






@require_sentencepiece
@require_tokenizers
class 						a_		(     snake_case    ,   unittest.TestCase    ):
							UpperCAmelCase			:		Tuple        =				XLNetTokenizer
							UpperCAmelCase			:		str        =				XLNetTokenizerFast
							UpperCAmelCase			:		str        =				True
							UpperCAmelCase			:		str        =				True


							def    UpperCamelCase     (				self   :						Optional[Any]			)			->					int:
										super().setUp()

										# We have a SentencePiece fixture for testing
										snake_case:    Tuple      							=XLNetTokenizer(a_      ,						keep_accents=a_			)
										tokenizer.sanitize_special_tokens()
										tokenizer.save_pretrained(self.tmpdirname			)


							def    UpperCamelCase     (				self   :						str			)			->					str:
										snake_case:    List[str]      							='<s>'
										snake_case:    Tuple      							=1

										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   :						Any			)			->					int:
										snake_case:    str      							=list(self.get_tokenizer().get_vocab().keys()			)

										self.assertEqual(vocab_keys[0]      ,						'<unk>'			)
										self.assertEqual(vocab_keys[1]      ,						'<s>'			)
										self.assertEqual(vocab_keys[-1]      ,						'<eod>'			)
										self.assertEqual(len(a_			)      ,						1_0_0_6			)


							def    UpperCamelCase     (				self   :						Optional[Any]			)			->					List[Any]:
										self.assertEqual(self.get_tokenizer().vocab_size      ,						1_0_0_0			)


							def    UpperCamelCase     (				self   :						Union[str, Any]			)			->					Tuple:
										snake_case:    str      							=XLNetTokenizer(a_      ,						keep_accents=a_			)

										snake_case:    Dict      							=tokenizer.tokenize('This is a test'			)
										self.assertListEqual(a_      ,						['▁This', '▁is', '▁a', '▁t', 'est']			)

										self.assertListEqual(tokenizer.convert_tokens_to_ids(a_			)      ,						[2_8_5, 4_6, 1_0, 1_7_0, 3_8_2]			)

										snake_case:    List[str]      							=tokenizer.tokenize('I was born in 92000, and this is falsé.'			)
										self.assertListEqual(
										    a_      ,						[
										        SPIECE_UNDERLINE + 'I',
										        SPIECE_UNDERLINE + 'was',
										        SPIECE_UNDERLINE + 'b',
										        'or',
										        'n',
										        SPIECE_UNDERLINE + 'in',
										        SPIECE_UNDERLINE + '',
										        '9',
										        '2',
										        '0',
										        '0',
										        '0',
										        ',',
										        SPIECE_UNDERLINE + 'and',
										        SPIECE_UNDERLINE + 'this',
										        SPIECE_UNDERLINE + 'is',
										        SPIECE_UNDERLINE + 'f',
										        'al',
										        's',
										        'é',
										        '.',
										    ]      ,						)
										snake_case:    Optional[int]      							=tokenizer.convert_tokens_to_ids(a_			)
										self.assertListEqual(a_      ,						[8, 2_1, 8_4, 5_5, 2_4, 1_9, 7, 0, 6_0_2, 3_4_7, 3_4_7, 3_4_7, 3, 1_2, 6_6, 4_6, 7_2, 8_0, 6, 0, 4]			)

										snake_case:    List[str]      							=tokenizer.convert_ids_to_tokens(a_			)
										self.assertListEqual(
										    a_      ,						[
										        SPIECE_UNDERLINE + 'I',
										        SPIECE_UNDERLINE + 'was',
										        SPIECE_UNDERLINE + 'b',
										        'or',
										        'n',
										        SPIECE_UNDERLINE + 'in',
										        SPIECE_UNDERLINE + '',
										        '<unk>',
										        '2',
										        '0',
										        '0',
										        '0',
										        ',',
										        SPIECE_UNDERLINE + 'and',
										        SPIECE_UNDERLINE + 'this',
										        SPIECE_UNDERLINE + 'is',
										        SPIECE_UNDERLINE + 'f',
										        'al',
										        's',
										        '<unk>',
										        '.',
										    ]      ,						)


							def    UpperCamelCase     (				self   :						Dict			)			->					int:
										snake_case:    Tuple      							=XLNetTokenizer(a_      ,						do_lower_case=a_			)
										snake_case:    Optional[int]      							=tokenizer.tokenize('I was born in 92000, and this is falsé.'			)
										self.assertListEqual(
										    a_      ,						[
										        SPIECE_UNDERLINE + '',
										        'i',
										        SPIECE_UNDERLINE + 'was',
										        SPIECE_UNDERLINE + 'b',
										        'or',
										        'n',
										        SPIECE_UNDERLINE + 'in',
										        SPIECE_UNDERLINE + '',
										        '9',
										        '2',
										        '0',
										        '0',
										        '0',
										        ',',
										        SPIECE_UNDERLINE + 'and',
										        SPIECE_UNDERLINE + 'this',
										        SPIECE_UNDERLINE + 'is',
										        SPIECE_UNDERLINE + 'f',
										        'al',
										        'se',
										        '.',
										    ]      ,						)
										self.assertListEqual(tokenizer.tokenize('H\u00E9llo'			)      ,						['▁he', 'll', 'o']			)


							def    UpperCamelCase     (				self   :						Tuple			)			->					Dict:
										snake_case:    str      							=XLNetTokenizer(a_      ,						do_lower_case=a_			)
										snake_case:    List[Any]      							=tokenizer.tokenize('I was born in 92000, and this is falsé.'			)
										self.assertListEqual(
										    a_      ,						[
										        SPIECE_UNDERLINE + 'I',
										        SPIECE_UNDERLINE + 'was',
										        SPIECE_UNDERLINE + 'b',
										        'or',
										        'n',
										        SPIECE_UNDERLINE + 'in',
										        SPIECE_UNDERLINE + '',
										        '9',
										        '2',
										        '0',
										        '0',
										        '0',
										        ',',
										        SPIECE_UNDERLINE + 'and',
										        SPIECE_UNDERLINE + 'this',
										        SPIECE_UNDERLINE + 'is',
										        SPIECE_UNDERLINE + 'f',
										        'al',
										        'se',
										        '.',
										    ]      ,						)


							@slow
							def    UpperCamelCase     (				self   :						List[str]			)			->					Optional[Any]:
										snake_case:    Tuple      							=XLNetTokenizer.from_pretrained('xlnet-base-cased'			)

										snake_case:    Optional[Any]      							=tokenizer.encode('sequence builders'      ,						add_special_tokens=a_			)
										snake_case:    List[str]      							=tokenizer.encode('multi-sequence build'      ,						add_special_tokens=a_			)

										snake_case:    Optional[Any]      							=tokenizer.build_inputs_with_special_tokens(a_			)
										snake_case:    Any      							=tokenizer.build_inputs_with_special_tokens(a_      ,						a_			)

										assert encoded_sentence == text + [4, 3]
										assert encoded_pair == text + [4] + text_a + [4, 3]




							@slow
							def    UpperCamelCase     (				self   :						Dict			)			->					Optional[int]:
										# fmt: off
										snake_case:    Dict      							={'input_ids': [[1_7, 2_1_4_4_2, 2_7_0, 1_7, 1_0, 1_4_6_4_5, 3_1_8, 3_4, 1_7, 4_5_4_6, 3_1_4_5, 7_8_7, 1_3, 7_7_5_2, 2_2_0_1_8, 2_3, 2_1, 1_7, 4_5_4_6, 3_1_4_5, 7_8_7, 1_3, 3_3_5_2, 1_4_4_3_1, 1_3, 5_5_0_0, 1_1, 1_1_7_6, 5_8_0, 1_3, 1_6_8_1_9, 4_7_9_7, 2_3, 1_7, 1_0, 1_7_1_3_5, 6_5_8, 1_9, 4_5_7, 7_9_3_2, 1_3, 1_8_4, 1_9, 3_1_5_4, 1_7_1_3_5, 6_4_6_8, 1_9, 1_4_0_4, 1_2_2_6_9, 1_9, 4_2_2_9, 5_3_5_6, 1_6_2_6_4, 4_6, 1_9, 1_7, 2_0_5_4_5, 1_0_3_9_5, 9, 9, 9, 1_1, 2_8, 6_4_2_1, 9_5_3_1, 2_0_7_2_9, 1_7, 1_0, 3_5_3, 1_7_0_2_2, 1_1, 2_1, 6_4_2_1, 9_5_3_1, 1_6_9_4_9, 1_7, 1_0, 1_1_5_0_9, 7_5_3, 1_1, 3_3, 9_5, 2_4_2_1, 7_3_8_5, 9_5_6, 1_4_4_3_1, 2_6_2_6, 2_5, 8_4_2, 7_3_8_5, 4_8_3_6, 2_1, 1_4_2_9, 2_2_7_2, 9_8_5_5, 3_1_2_0, 1_6_1, 2_4_7_3_8, 1_9, 1_3_2_0_3, 6_5_8, 2_1_8, 7_8_7, 2_1, 4_3_0, 1_8_4_8_2, 8_4_7, 2_6_3_7, 9, 4, 3], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3_2_2, 2_2_1_7_8, 2_7, 1_0_6_4, 2_2, 9_5_6, 1_3, 1_1_1_0_1, 1_4_2_9, 5_8_5_4, 2_4_3_1_3, 1_8_9_5_3, 4_0, 4_2_2, 2_4_3_6_6, 6_8, 1_7_5_8, 3_7, 1_0_4_8_3, 1_4_2_5_7, 3_1, 2_0_7, 2_6_3, 2_1, 2_0_3, 3_7_7_3, 2_5, 7_1, 9_7_3_5, 9, 4, 3], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3_2, 2_0_4_9, 3_4_4_2, 1_7, 1_3_8_9_4, 3_3_8_0, 2_3, 9_5, 1_8, 1_7_6_3_4, 2_2_8_8, 9, 4, 3]], 'token_type_ids': [[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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 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, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]], '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], [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, 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, 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, 1, 1]]}  # noqa: E501
										# fmt: on

										self.tokenizer_integration_test_util(
										    expected_encoding=a_      ,						model_name='xlnet-base-cased'      ,						revision='c841166438c31ec7ca9a106dee7bb312b73ae511'      ,						)




