





# This model implementation is heavily inspired by https://github.com/haofanwang/ControlNet-for-Diffusers/

import gc
import random
import tempfile
import unittest

import numpy as np
import torch
from PIL import Image
from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer

from diffusers import (
    AutoencoderKL,
    ControlNetModel,
    DDIMScheduler,
    StableDiffusionControlNetImgaImgPipeline,
    UNetaDConditionModel,
)
from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion_controlnet import MultiControlNetModel
from diffusers.utils import floats_tensor, load_image, load_numpy, randn_tensor, slow, torch_device
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu

from ..pipeline_params import (
    IMAGE_TO_IMAGE_IMAGE_PARAMS,
    TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS,
    TEXT_GUIDED_IMAGE_VARIATION_PARAMS,
)
from ..test_pipelines_common import (
    PipelineKarrasSchedulerTesterMixin,
    PipelineLatentTesterMixin,
    PipelineTesterMixin,
)


enable_full_determinism()




class        _a    (    UpperCamelCase__						,			UpperCamelCase__						,			UpperCamelCase__						,			unittest.TestCase):

      """simple docstring"""


      UpperCamelCase__  		=       StableDiffusionControlNetImgaImgPipeline
      UpperCamelCase__  		=       TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"""height""", """width"""}
      UpperCamelCase__  		=       TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS
      UpperCamelCase__  		=       IMAGE_TO_IMAGE_IMAGE_PARAMS.union({"""control_image"""})
      UpperCamelCase__  		=       IMAGE_TO_IMAGE_IMAGE_PARAMS






      def 			UpperCAmelCase_       (		self:			Dict					):
          '''simple docstring'''


          torch.manual_seed(0					)
          UpperCamelCase__:	str					=     UNetaDConditionModel(
              block_out_channels=(32, 64)	,    layers_per_block=2	,    sample_size=32	,    in_channels=4	,    out_channels=4	,    down_block_types=("DownBlock2D", "CrossAttnDownBlock2D")	,    up_block_types=("CrossAttnUpBlock2D", "UpBlock2D")	,    cross_attention_dim=32	,    )
          torch.manual_seed(0					)
          UpperCamelCase__:	Optional[int]					=     ControlNetModel(
              block_out_channels=(32, 64)	,    layers_per_block=2	,    in_channels=4	,    down_block_types=("DownBlock2D", "CrossAttnDownBlock2D")	,    cross_attention_dim=32	,    conditioning_embedding_out_channels=(16, 32)	,    )
          torch.manual_seed(0					)
          UpperCamelCase__:	List[Any]					=     DDIMScheduler(
              beta_start=0.00_085	,    beta_end=0.012	,    beta_schedule="scaled_linear"	,    clip_sample=__lowerCamelCase	,    set_alpha_to_one=__lowerCamelCase	,    )
          torch.manual_seed(0					)
          UpperCamelCase__:	str					=     AutoencoderKL(
              block_out_channels=[32, 64]	,    in_channels=3	,    out_channels=3	,    down_block_types=["DownEncoderBlock2D", "DownEncoderBlock2D"]	,    up_block_types=["UpDecoderBlock2D", "UpDecoderBlock2D"]	,    latent_channels=4	,    )
          torch.manual_seed(0					)
          UpperCamelCase__:	Tuple					=     CLIPTextConfig(
              bos_token_id=0	,    eos_token_id=2	,    hidden_size=32	,    intermediate_size=37	,    layer_norm_eps=1e-05	,    num_attention_heads=4	,    num_hidden_layers=5	,    pad_token_id=1	,    vocab_size=1000	,    )
          UpperCamelCase__:	Union[str, Any]					=     CLIPTextModel(__lowerCamelCase					)
          UpperCamelCase__:	Union[str, Any]					=     CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"					)

          UpperCamelCase__:	int					=     {
              "unet": unet,
              "controlnet": controlnet,
              "scheduler": scheduler,
              "vae": vae,
              "text_encoder": text_encoder,
              "tokenizer": tokenizer,
              "safety_checker": None,
              "feature_extractor": None,
          }
          return components






      def 			UpperCAmelCase_       (		self:			Dict	,    __lowerCamelCase:			Union[str, Any]	,    __lowerCamelCase:			Optional[Any]=0					):
          '''simple docstring'''


          if str(__lowerCamelCase					).startswith("mps"					):
              UpperCamelCase__:	str					=     torch.manual_seed(__lowerCamelCase					)
          else:
              UpperCamelCase__:	Tuple					=     torch.Generator(device=__lowerCamelCase					).manual_seed(__lowerCamelCase					)

          UpperCamelCase__:	int					=     2
          UpperCamelCase__:	Any					=     randn_tensor(
              (1, 3, 32 * controlnet_embedder_scale_factor, 32 * controlnet_embedder_scale_factor)	,    generator=__lowerCamelCase	,    device=torch.device(__lowerCamelCase					)	,    )
          UpperCamelCase__:	Optional[int]					=     floats_tensor(control_image.shape	,    rng=random.Random(__lowerCamelCase					)					).to(__lowerCamelCase					)
          UpperCamelCase__:	Union[str, Any]					=     image.cpu().permute(0	,    2	,    3	,    1					)[0]
          UpperCamelCase__:	Tuple					=     Image.fromarray(np.uinta(__lowerCamelCase					)					).convert("RGB"					).resize((64, 64)					)
          UpperCamelCase__:	Union[str, Any]					=     {
              "prompt": "A painting of a squirrel eating a burger",
              "generator": generator,
              "num_inference_steps": 2,
              "guidance_scale": 6.0,
              "output_type": "numpy",
              "image": image,
              "control_image": control_image,
          }

          return inputs






      def 			UpperCAmelCase_       (		self:			str					):
          '''simple docstring'''


          return self._test_attention_slicing_forward_pass(expected_max_diff=2e-3					)






      @unittest.skipIf(
          torch_device != "cuda" or not is_xformers_available()	,    reason="XFormers attention is only available with CUDA and `xformers` installed"	,    )
      def 			UpperCAmelCase_       (		self:			Optional[int]					):
          '''simple docstring'''


          self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=2e-3					)






      def 			UpperCAmelCase_       (		self:			str					):
          '''simple docstring'''


          self._test_inference_batch_single_identical(expected_max_diff=2e-3					)




class        _a    (    UpperCamelCase__						,			UpperCamelCase__						,			unittest.TestCase):

      """simple docstring"""


      UpperCamelCase__  		=       StableDiffusionControlNetImgaImgPipeline
      UpperCamelCase__  		=       TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"""height""", """width"""}
      UpperCamelCase__  		=       TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS
      UpperCamelCase__  		=       frozenset([])  # TO_DO: add image_params once refactored VaeImageProcessor.preprocess






      def 			UpperCAmelCase_       (		self:			List[str]					):
          '''simple docstring'''


          torch.manual_seed(0					)
          UpperCamelCase__:	List[Any]					=     UNetaDConditionModel(
              block_out_channels=(32, 64)	,    layers_per_block=2	,    sample_size=32	,    in_channels=4	,    out_channels=4	,    down_block_types=("DownBlock2D", "CrossAttnDownBlock2D")	,    up_block_types=("CrossAttnUpBlock2D", "UpBlock2D")	,    cross_attention_dim=32	,    )
          torch.manual_seed(0					)

          def init_weights(__lowerCamelCase:			Union[str, Any]					):
              if isinstance(__lowerCamelCase	,    torch.nn.Convad					):
                  torch.nn.init.normal(m.weight					)
                  m.bias.data.fill_(1.0					)

          UpperCamelCase__:	Optional[Any]					=     ControlNetModel(
              block_out_channels=(32, 64)	,    layers_per_block=2	,    in_channels=4	,    down_block_types=("DownBlock2D", "CrossAttnDownBlock2D")	,    cross_attention_dim=32	,    conditioning_embedding_out_channels=(16, 32)	,    )
          controlneta.controlnet_down_blocks.apply(__lowerCamelCase					)

          torch.manual_seed(0					)
          UpperCamelCase__:	Union[str, Any]					=     ControlNetModel(
              block_out_channels=(32, 64)	,    layers_per_block=2	,    in_channels=4	,    down_block_types=("DownBlock2D", "CrossAttnDownBlock2D")	,    cross_attention_dim=32	,    conditioning_embedding_out_channels=(16, 32)	,    )
          controlneta.controlnet_down_blocks.apply(__lowerCamelCase					)

          torch.manual_seed(0					)
          UpperCamelCase__:	List[Any]					=     DDIMScheduler(
              beta_start=0.00_085	,    beta_end=0.012	,    beta_schedule="scaled_linear"	,    clip_sample=__lowerCamelCase	,    set_alpha_to_one=__lowerCamelCase	,    )
          torch.manual_seed(0					)
          UpperCamelCase__:	Tuple					=     AutoencoderKL(
              block_out_channels=[32, 64]	,    in_channels=3	,    out_channels=3	,    down_block_types=["DownEncoderBlock2D", "DownEncoderBlock2D"]	,    up_block_types=["UpDecoderBlock2D", "UpDecoderBlock2D"]	,    latent_channels=4	,    )
          torch.manual_seed(0					)
          UpperCamelCase__:	Optional[int]					=     CLIPTextConfig(
              bos_token_id=0	,    eos_token_id=2	,    hidden_size=32	,    intermediate_size=37	,    layer_norm_eps=1e-05	,    num_attention_heads=4	,    num_hidden_layers=5	,    pad_token_id=1	,    vocab_size=1000	,    )
          UpperCamelCase__:	Optional[Any]					=     CLIPTextModel(__lowerCamelCase					)
          UpperCamelCase__:	Union[str, Any]					=     CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip"					)

          UpperCamelCase__:	Tuple					=     MultiControlNetModel([controlneta, controlneta]					)

          UpperCamelCase__:	Any					=     {
              "unet": unet,
              "controlnet": controlnet,
              "scheduler": scheduler,
              "vae": vae,
              "text_encoder": text_encoder,
              "tokenizer": tokenizer,
              "safety_checker": None,
              "feature_extractor": None,
          }
          return components






      def 			UpperCAmelCase_       (		self:			Optional[int]	,    __lowerCamelCase:			Optional[int]	,    __lowerCamelCase:			Optional[int]=0					):
          '''simple docstring'''


          if str(__lowerCamelCase					).startswith("mps"					):
              UpperCamelCase__:	List[str]					=     torch.manual_seed(__lowerCamelCase					)
          else:
              UpperCamelCase__:	List[str]					=     torch.Generator(device=__lowerCamelCase					).manual_seed(__lowerCamelCase					)

          UpperCamelCase__:	Tuple					=     2

          UpperCamelCase__:	Tuple					=     [
              randn_tensor(
                  (1, 3, 32 * controlnet_embedder_scale_factor, 32 * controlnet_embedder_scale_factor)	,    generator=__lowerCamelCase	,    device=torch.device(__lowerCamelCase					)	,    ),
              randn_tensor(
                  (1, 3, 32 * controlnet_embedder_scale_factor, 32 * controlnet_embedder_scale_factor)	,    generator=__lowerCamelCase	,    device=torch.device(__lowerCamelCase					)	,    ),
          ]

          UpperCamelCase__:	int					=     floats_tensor(control_image[0].shape	,    rng=random.Random(__lowerCamelCase					)					).to(__lowerCamelCase					)
          UpperCamelCase__:	Any					=     image.cpu().permute(0	,    2	,    3	,    1					)[0]
          UpperCamelCase__:	Optional[Any]					=     Image.fromarray(np.uinta(__lowerCamelCase					)					).convert("RGB"					).resize((64, 64)					)
          UpperCamelCase__:	int					=     {
              "prompt": "A painting of a squirrel eating a burger",
              "generator": generator,
              "num_inference_steps": 2,
              "guidance_scale": 6.0,
              "output_type": "numpy",
              "image": image,
              "control_image": control_image,
          }

          return inputs






      def 			UpperCAmelCase_       (		self:			Union[str, Any]					):
          '''simple docstring'''


          UpperCamelCase__:	Dict					=     self.get_dummy_components()
          UpperCamelCase__:	Union[str, Any]					=     self.pipeline_class(**__lowerCamelCase					)
          pipe.to(__lowerCamelCase					)

          UpperCamelCase__:	List[str]					=     10.0
          UpperCamelCase__:	Any					=     4

          UpperCamelCase__:	Tuple					=     self.get_dummy_inputs(__lowerCamelCase					)
          UpperCamelCase__:	Any					=     steps
          UpperCamelCase__:	Union[str, Any]					=     scale
          UpperCamelCase__:	Union[str, Any]					=     pipe(**__lowerCamelCase					)[0]

          UpperCamelCase__:	Tuple					=     self.get_dummy_inputs(__lowerCamelCase					)
          UpperCamelCase__:	Tuple					=     steps
          UpperCamelCase__:	int					=     scale
          UpperCamelCase__:	Union[str, Any]					=     pipe(**__lowerCamelCase	,    control_guidance_start=0.1	,    control_guidance_end=0.2					)[0]

          UpperCamelCase__:	Union[str, Any]					=     self.get_dummy_inputs(__lowerCamelCase					)
          UpperCamelCase__:	Optional[Any]					=     steps
          UpperCamelCase__:	Union[str, Any]					=     scale
          UpperCamelCase__:	str					=     pipe(**__lowerCamelCase	,    control_guidance_start=[0.1, 0.3]	,    control_guidance_end=[0.2, 0.7]					)[0]

          UpperCamelCase__:	List[Any]					=     self.get_dummy_inputs(__lowerCamelCase					)
          UpperCamelCase__:	Optional[Any]					=     steps
          UpperCamelCase__:	int					=     scale
          UpperCamelCase__:	Union[str, Any]					=     pipe(**__lowerCamelCase	,    control_guidance_start=0.4	,    control_guidance_end=[0.5, 0.8]					)[0]

          # make sure that all outputs are different
          assert np.sum(np.abs(output_a - output_a					)					) > 1e-3
          assert np.sum(np.abs(output_a - output_a					)					) > 1e-3
          assert np.sum(np.abs(output_a - output_a					)					) > 1e-3






      def 			UpperCAmelCase_       (		self:			Dict					):
          '''simple docstring'''


          return self._test_attention_slicing_forward_pass(expected_max_diff=2e-3					)






      @unittest.skipIf(
          torch_device != "cuda" or not is_xformers_available()	,    reason="XFormers attention is only available with CUDA and `xformers` installed"	,    )
      def 			UpperCAmelCase_       (		self:			int					):
          '''simple docstring'''


          self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=2e-3					)






      def 			UpperCAmelCase_       (		self:			Dict					):
          '''simple docstring'''


          self._test_inference_batch_single_identical(expected_max_diff=2e-3					)






      def 			UpperCAmelCase_       (		self:			str					):
          '''simple docstring'''


          UpperCamelCase__:	List[str]					=     self.get_dummy_components()
          UpperCamelCase__:	Optional[Any]					=     self.pipeline_class(**__lowerCamelCase					)
          pipe.to(__lowerCamelCase					)
          pipe.set_progress_bar_config(disable=__lowerCamelCase					)
          with tempfile.TemporaryDirectory() as tmpdir:
              try:
                  # save_pretrained is not implemented for Multi-ControlNet
                  pipe.save_pretrained(__lowerCamelCase					)
              except NotImplementedError:
                  pass




@slow
@require_torch_gpu
class        _a    (    unittest.TestCase):

      """simple docstring"""


      def 			UpperCAmelCase_       (		self:			Optional[int]					):
          '''simple docstring'''


          super().tearDown()
          gc.collect()
          torch.cuda.empty_cache()






      def 			UpperCAmelCase_       (		self:			List[Any]					):
          '''simple docstring'''


          UpperCamelCase__:	List[Any]					=     ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny"					)

          UpperCamelCase__:	Optional[int]					=     StableDiffusionControlNetImgaImgPipeline.from_pretrained(
              "runwayml/stable-diffusion-v1-5"	,    safety_checker=__lowerCamelCase	,    controlnet=__lowerCamelCase					)
          pipe.enable_model_cpu_offload()
          pipe.set_progress_bar_config(disable=__lowerCamelCase					)

          UpperCamelCase__:	Optional[Any]					=     torch.Generator(device="cpu"					).manual_seed(0					)
          UpperCamelCase__:	Any					=     "evil space-punk bird"
          UpperCamelCase__:	Optional[int]					=     load_image(
              "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/bird_canny.png"					).resize((512, 512)					)
          UpperCamelCase__:	Dict					=     load_image(
              "https://huggingface.co/lllyasviel/sd-controlnet-canny/resolve/main/images/bird.png"					).resize((512, 512)					)

          UpperCamelCase__:	Tuple					=     pipe(
              __lowerCamelCase	,    __lowerCamelCase	,    control_image=__lowerCamelCase	,    generator=__lowerCamelCase	,    output_type="np"	,    num_inference_steps=50	,    strength=0.6	,    )

          UpperCamelCase__:	int					=     output.images[0]

          assert image.shape == (512, 512, 3)

          UpperCamelCase__:	Dict					=     load_numpy(
              "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/img2img.npy"					)

          assert np.abs(expected_image - image					).max() < 9e-2








import os
from shutil import copyfile
from typing import List, Optional, Tuple

import sentencepiece as spm

from ...tokenization_utils import PreTrainedTokenizer
from ...utils import logging


A__:    Union[str, Any]  	=	logging.get_logger(__name__)

A__:    int  	=	{'''vocab_file''': '''sentencepiece.model'''}

A__:    Dict  	=	{
    '''vocab_file''': {
        '''google/rembert''': '''https://huggingface.co/google/rembert/resolve/main/sentencepiece.model''',
    },
}

A__:    Any  	=	{
    '''google/rembert''': 256,
}




class        _a    (    UpperCamelCase__):

      """simple docstring"""


      UpperCamelCase__  		=       VOCAB_FILES_NAMES
      UpperCamelCase__  		=       PRETRAINED_VOCAB_FILES_MAP
      UpperCamelCase__  		=       PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES






      def __init__(		self:			str	,    __lowerCamelCase:			Optional[Any]	,    __lowerCamelCase:			List[str]=False	,    __lowerCamelCase:			Optional[Any]=True	,    __lowerCamelCase:			Dict=True	,    __lowerCamelCase:			Tuple="[CLS]"	,    __lowerCamelCase:			List[str]="[SEP]"	,    __lowerCamelCase:			List[str]="[UNK]"	,    __lowerCamelCase:			Union[str, Any]="[SEP]"	,    __lowerCamelCase:			List[Any]="[PAD]"	,    __lowerCamelCase:			Optional[int]="[CLS]"	,    __lowerCamelCase:			str="[MASK]"	,    **__lowerCamelCase:			Union[str, Any]	,    ):
          '''simple docstring'''


          super().__init__(
              do_lower_case=__lowerCamelCase	,    remove_space=__lowerCamelCase	,    keep_accents=__lowerCamelCase	,    bos_token=__lowerCamelCase	,    eos_token=__lowerCamelCase	,    unk_token=__lowerCamelCase	,    sep_token=__lowerCamelCase	,    pad_token=__lowerCamelCase	,    cls_token=__lowerCamelCase	,    mask_token=__lowerCamelCase	,    **__lowerCamelCase	,    )

          UpperCamelCase__:	Optional[int]					=     do_lower_case
          UpperCamelCase__:	Optional[int]					=     remove_space
          UpperCamelCase__:	str					=     keep_accents
          UpperCamelCase__:	Union[str, Any]					=     vocab_file

          UpperCamelCase__:	Any					=     spm.SentencePieceProcessor()
          self.sp_model.Load(__lowerCamelCase					)






      @property
      def 			UpperCAmelCase_       (		self:			Any					):
          '''simple docstring'''


          return len(self.sp_model					)






      def 			UpperCAmelCase_       (		self:			Optional[Any]					):
          '''simple docstring'''


          UpperCamelCase__:	List[Any]					=     {self.convert_ids_to_tokens(__lowerCamelCase					): i for i in range(self.vocab_size					)}
          vocab.update(self.added_tokens_encoder					)
          return vocab






      def __getstate__(		self:			Optional[int]					):
          '''simple docstring'''


          UpperCamelCase__:	Any					=     self.__dict__.copy()
          UpperCamelCase__:	str					=     None
          return state






      def __setstate__(		self:			Optional[int]	,    __lowerCamelCase:			Union[str, Any]					):
          '''simple docstring'''


          UpperCamelCase__:	int					=     d
          UpperCamelCase__:	List[Any]					=     spm.SentencePieceProcessor()
          self.sp_model.Load(self.vocab_file					)






      def 			UpperCAmelCase_       (		self:			Tuple	,    __lowerCamelCase:			str	,    __lowerCamelCase:			Optional[Any]=False					):
          '''simple docstring'''


          UpperCamelCase__:	Union[str, Any]					=     self.sp_model.EncodeAsPieces(__lowerCamelCase					)
          return pieces






      def 			UpperCAmelCase_       (		self:			Tuple	,    __lowerCamelCase:			Union[str, Any]					):
          '''simple docstring'''


          return self.sp_model.PieceToId(__lowerCamelCase					)






      def 			UpperCAmelCase_       (		self:			Tuple	,    __lowerCamelCase:			Optional[int]					):
          '''simple docstring'''


          return self.sp_model.IdToPiece(__lowerCamelCase					)






      def 			UpperCAmelCase_       (		self:			Optional[Any]	,    __lowerCamelCase:			Any					):
          '''simple docstring'''


          UpperCamelCase__:	Optional[Any]					=     self.sp_model.decode_pieces(__lowerCamelCase					)
          return out_string






      def 			UpperCAmelCase_       (		self:			Any	,    __lowerCamelCase:			List[int]	,    __lowerCamelCase:			Optional[List[int]] = None					):
          '''simple docstring'''


          UpperCamelCase__:	int					=     [self.sep_token_id]
          UpperCamelCase__:	int					=     [self.cls_token_id]
          if token_ids_a is None:
              return cls + token_ids_a + sep
          return cls + token_ids_a + sep + token_ids_a + sep






      def 			UpperCAmelCase_       (		self:			List[str]	,    __lowerCamelCase:			List[int]	,    __lowerCamelCase:			Optional[List[int]] = None	,    __lowerCamelCase:			bool = False					):
          '''simple docstring'''


          if already_has_special_tokens:
              if token_ids_a is not None:
                  raise ValueError(
                      "You should not supply a second sequence if the provided sequence of "
                      "ids is already formatted with special tokens for the model."					)
              return [1 if x in [self.sep_token_id, self.cls_token_id] else 0 for x in token_ids_a]

          if token_ids_a is not None:
              return [1] + ([0] * len(__lowerCamelCase					)) + [1] + ([0] * len(__lowerCamelCase					)) + [1]
          return [1] + ([0] * len(__lowerCamelCase					)) + [1]






      def 			UpperCAmelCase_       (		self:			Any	,    __lowerCamelCase:			List[int]	,    __lowerCamelCase:			Optional[List[int]] = None					):
          '''simple docstring'''


          UpperCamelCase__:	Dict					=     [self.sep_token_id]
          UpperCamelCase__:	Dict					=     [self.cls_token_id]

          if token_ids_a is None:
              return len(cls + token_ids_a + sep					) * [0]
          return len(cls + token_ids_a + sep					) * [0] + len(token_ids_a + sep					) * [1]






      def 			UpperCAmelCase_       (		self:			Optional[Any]	,    __lowerCamelCase:			str	,    __lowerCamelCase:			Optional[str] = None					):
          '''simple docstring'''


          if not os.path.isdir(__lowerCamelCase					):
              logger.error("Vocabulary path ({}) should be a directory".format(__lowerCamelCase					)					)
              return
          UpperCamelCase__:	Dict					=     os.path.join(
              __lowerCamelCase	,    (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]					)

          if os.path.abspath(self.vocab_file					) != os.path.abspath(__lowerCamelCase					):
              copyfile(self.vocab_file	,    __lowerCamelCase					)

          return (out_vocab_file,)

