code: 
  '''simple docstring'''
  
  
  
  import json
  import os
  from functools import lru_cache
  from typing import TYPE_CHECKING, List, Optional, Tuple
  
  import regex as re
  
  from ...tokenization_utils import AddedToken, PreTrainedTokenizer
  from ...utils import logging
  
  
  if TYPE_CHECKING:
  				from transformers.pipelines.conversational import Conversation
  
  __A          =    logging.get_logger(__name__)
  
  __A          =    {
      "vocab_file": "vocab.json",
      "merges_file": "merges.txt",
  }
  
  __A          =    {
      "vocab_file": {
          "gpt2": "https://huggingface.co/gpt2/resolve/main/vocab.json",
          "gpt2-medium": "https://huggingface.co/gpt2-medium/resolve/main/vocab.json",
          "gpt2-large": "https://huggingface.co/gpt2-large/resolve/main/vocab.json",
          "gpt2-xl": "https://huggingface.co/gpt2-xl/resolve/main/vocab.json",
          "distilgpt2": "https://huggingface.co/distilgpt2/resolve/main/vocab.json",
      },
      "merges_file": {
          "gpt2": "https://huggingface.co/gpt2/resolve/main/merges.txt",
          "gpt2-medium": "https://huggingface.co/gpt2-medium/resolve/main/merges.txt",
          "gpt2-large": "https://huggingface.co/gpt2-large/resolve/main/merges.txt",
          "gpt2-xl": "https://huggingface.co/gpt2-xl/resolve/main/merges.txt",
          "distilgpt2": "https://huggingface.co/distilgpt2/resolve/main/merges.txt",
      },
  }
  
  __A          =    {
      "gpt2": 1_024,
      "gpt2-medium": 1_024,
      "gpt2-large": 1_024,
      "gpt2-xl": 1_024,
      "distilgpt2": 1_024,
  }
  
  
  
  
  
  @lru_cache()
  def  _A		(							):
  						lowercase__							 =       (
  						    list(range(ord("""!"""	)		,		ord("""~"""	) + 1	)	) + list(range(ord("""¡"""	)		,		ord("""¬"""	) + 1	)	) + list(range(ord("""®"""	)		,		ord("""ÿ"""	) + 1	)	)
  						)
  						lowercase__							 =       bs[:]
  						lowercase__							 =       0
  						for b in range(2**8	):
  												if b not in bs:
  																		bs.append(lowercase__	)
  																		cs.append(2**8 + n	)
  																		n += 1
  						lowercase__							 =       [chr(lowercase__	) for n in cs]
  						return dict(zip(lowercase__		,		lowercase__	)	)
  
  
  
  
  
  def  _A		(							lowercase__	):
  						lowercase__							 =       set()
  						lowercase__							 =       word[0]
  						for char in word[1:]:
  												pairs.add((prev_char, char)	)
  												lowercase__							 =       char
  						return pairs
  
  
  
  
  
  
  
  class 			A							(       __UpperCAmelCase				):
  			lowerCamelCase							:							List[str]       		=  VOCAB_FILES_NAMES
  			lowerCamelCase							:							Any       		=  PRETRAINED_VOCAB_FILES_MAP
  			lowerCamelCase							:							int       		=  PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
  			lowerCamelCase							:							List[str]       		=  ["""input_ids""", """attention_mask"""]
  
  
  
  			def __init__(					self       ,     lowerCamelCase__       ,     lowerCamelCase__       ,     lowerCamelCase__="replace"       ,     lowerCamelCase__="<|endoftext|>"       ,     lowerCamelCase__="<|endoftext|>"       ,     lowerCamelCase__="<|endoftext|>"       ,     lowerCamelCase__=None       ,     lowerCamelCase__=False       ,     lowerCamelCase__=False       ,     **lowerCamelCase__       ,     )			->		Tuple:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       AddedToken(lowerCamelCase__       ,     lstrip=lowerCamelCase__       ,     rstrip=lowerCamelCase__       ) if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ) else bos_token
  									lowercase__							 =       AddedToken(lowerCamelCase__       ,     lstrip=lowerCamelCase__       ,     rstrip=lowerCamelCase__       ) if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ) else eos_token
  									lowercase__							 =       AddedToken(lowerCamelCase__       ,     lstrip=lowerCamelCase__       ,     rstrip=lowerCamelCase__       ) if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ) else unk_token
  									lowercase__							 =       AddedToken(lowerCamelCase__       ,     lstrip=lowerCamelCase__       ,     rstrip=lowerCamelCase__       ) if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ) else pad_token
  									super().__init__(
  									    errors=lowerCamelCase__       ,     unk_token=lowerCamelCase__       ,     bos_token=lowerCamelCase__       ,     eos_token=lowerCamelCase__       ,     pad_token=lowerCamelCase__       ,     add_prefix_space=lowerCamelCase__       ,     add_bos_token=lowerCamelCase__       ,     **lowerCamelCase__       ,     )
  									lowercase__							 =       add_bos_token
  
  									with open(lowerCamelCase__       ,     encoding="""utf-8"""       ) as vocab_handle:
  															lowercase__							 =       json.load(lowerCamelCase__       )
  									lowercase__							 =       {v: k for k, v in self.encoder.items()}
  									lowercase__							 =       errors  # how to handle errors in decoding
  									lowercase__							 =       bytes_to_unicode()
  									lowercase__							 =       {v: k for k, v in self.byte_encoder.items()}
  									with open(lowerCamelCase__       ,     encoding="""utf-8"""       ) as merges_handle:
  															lowercase__							 =       merges_handle.read().split("""\n"""       )[1:-1]
  									lowercase__							 =       [tuple(merge.split()       ) for merge in bpe_merges]
  									lowercase__							 =       dict(zip(lowerCamelCase__       ,     range(len(lowerCamelCase__       )       )       )       )
  									lowercase__							 =       {}
  									lowercase__							 =       add_prefix_space
  
  									# Should have added re.IGNORECASE so BPE merges can happen for capitalized versions of contractions
  									lowercase__							 =       re.compile(R"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+"""       )
  
  
  
  			@property
  			def A__ (					self       )			->		str:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									return len(self.encoder       )
  
  
  
  			def A__ (					self       )			->		str:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									return dict(self.encoder       ,     **self.added_tokens_encoder       )
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       )			->		Optional[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									if token in self.cache:
  															return self.cache[token]
  									lowercase__							 =       tuple(lowerCamelCase__       )
  									lowercase__							 =       get_pairs(lowerCamelCase__       )
  
  									if not pairs:
  															return token
  
  									while True:
  															lowercase__							 =       min(lowerCamelCase__       ,     key=lambda lowerCamelCase__       : self.bpe_ranks.get(lowerCamelCase__       ,     float("""inf"""       )       )       )
  															if bigram not in self.bpe_ranks:
  																					break
  															lowercase__ ,						lowercase__							 =       bigram
  															lowercase__							 =       []
  															lowercase__							 =       0
  															while i < len(lowerCamelCase__       ):
  																					try:
  																											lowercase__							 =       word.index(lowerCamelCase__       ,     lowerCamelCase__       )
  																					except ValueError:
  																											new_word.extend(word[i:]       )
  																											break
  																					else:
  																											new_word.extend(word[i:j]       )
  																											lowercase__							 =       j
  
  																					if word[i] == first and i < len(lowerCamelCase__       ) - 1 and word[i + 1] == second:
  																											new_word.append(first + second       )
  																											i += 2
  																					else:
  																											new_word.append(word[i]       )
  																											i += 1
  															lowercase__							 =       tuple(lowerCamelCase__       )
  															lowercase__							 =       new_word
  															if len(lowerCamelCase__       ) == 1:
  																					break
  															else:
  																					lowercase__							 =       get_pairs(lowerCamelCase__       )
  									lowercase__							 =       """ """.join(lowerCamelCase__       )
  									lowercase__							 =       word
  									return word
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       ,     lowerCamelCase__=None       )			->		Optional[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									if self.add_bos_token:
  															lowercase__							 =       [self.bos_token_id]
  									else:
  															lowercase__							 =       []
  
  									lowercase__							 =       bos_token_ids + token_ids_a
  
  									if token_ids_a is None:
  															return output
  
  									return output + bos_token_ids + token_ids_a
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       ,     lowerCamelCase__ = None       ,     lowerCamelCase__ = False       )			->		List[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									if already_has_special_tokens:
  															return super().get_special_tokens_mask(
  															    token_ids_a=lowerCamelCase__       ,     token_ids_a=lowerCamelCase__       ,     already_has_special_tokens=lowerCamelCase__       )
  
  									if not self.add_bos_token:
  															return super().get_special_tokens_mask(
  															    token_ids_a=lowerCamelCase__       ,     token_ids_a=lowerCamelCase__       ,     already_has_special_tokens=lowerCamelCase__       )
  
  									if token_ids_a is None:
  															return [1] + ([0] * len(lowerCamelCase__       ))
  									return [1] + ([0] * len(lowerCamelCase__       )) + [1] + ([0] * len(lowerCamelCase__       ))
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       )			->		Any:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       []
  									for token in re.findall(self.pat       ,     lowerCamelCase__       ):
  															lowercase__							 =       """""".join(
  															    self.byte_encoder[b] for b in token.encode("""utf-8"""       )       )  # Maps all our bytes to unicode strings, avoiding control tokens of the BPE (spaces in our case)
  															bpe_tokens.extend(bpe_token for bpe_token in self.bpe(lowerCamelCase__       ).split(""" """       )       )
  									return bpe_tokens
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       )			->		Optional[Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									return self.encoder.get(lowerCamelCase__       ,     self.encoder.get(self.unk_token       )       )
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       )			->		Union[str, Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									return self.decoder.get(lowerCamelCase__       )
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       )			->		Any:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       """""".join(lowerCamelCase__       )
  									lowercase__							 =       bytearray([self.byte_decoder[c] for c in text]       ).decode("""utf-8"""       ,     errors=self.errors       )
  									return text
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       ,     lowerCamelCase__ = None       )			->		Tuple[str]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									if not os.path.isdir(lowerCamelCase__       ):
  															logger.error(F'''Vocabulary path ({save_directory}) should be a directory'''       )
  															return
  									lowercase__							 =       os.path.join(
  									    lowerCamelCase__       ,     (filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""vocab_file"""]       )
  									lowercase__							 =       os.path.join(
  									    lowerCamelCase__       ,     (filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""merges_file"""]       )
  
  									with open(lowerCamelCase__       ,     """w"""       ,     encoding="""utf-8"""       ) as f:
  															f.write(json.dumps(self.encoder       ,     indent=2       ,     sort_keys=lowerCamelCase__       ,     ensure_ascii=lowerCamelCase__       ) + """\n"""       )
  
  									lowercase__							 =       0
  									with open(lowerCamelCase__       ,     """w"""       ,     encoding="""utf-8"""       ) as writer:
  															writer.write("""#version: 0.2\n"""       )
  															for bpe_tokens, token_index in sorted(self.bpe_ranks.items()       ,     key=lambda lowerCamelCase__       : kv[1]       ):
  																					if index != token_index:
  																											logger.warning(
  																											    F'''Saving vocabulary to {merge_file}: BPE merge indices are not consecutive.'''
  																											    """ Please check that the tokenizer is not corrupted!"""       )
  																											lowercase__							 =       token_index
  																					writer.write(""" """.join(lowerCamelCase__       ) + """\n"""       )
  																					index += 1
  
  									return vocab_file, merge_file
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       ,     lowerCamelCase__=False       ,     **lowerCamelCase__       )			->		Optional[Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       kwargs.pop("""add_prefix_space"""       ,     self.add_prefix_space       )
  									if is_split_into_words or add_prefix_space:
  															lowercase__							 =       """ """ + text
  									return (text, kwargs)
  
  
  
  			def A__ (					self       ,     lowerCamelCase__       )			->		List[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       []
  									for is_user, text in conversation.iter_texts():
  															input_ids.extend(self.encode(lowerCamelCase__       ,     add_special_tokens=lowerCamelCase__       ) + [self.eos_token_id]       )
  									if len(lowerCamelCase__       ) > self.model_max_length:
  															lowercase__							 =       input_ids[-self.model_max_length :]
  									return input_ids
  
  
  
  
  
  
  
style_context: 
  '''simple docstring'''
  
  
  
  import os
  import tempfile
  import unittest
  
  import numpy as np
  import torch
  
  from diffusers.models import ModelMixin, UNetaDConditionModel
  from diffusers.models.attention_processor import AttnProcessor, LoRAAttnProcessor
  from diffusers.utils import (
      floats_tensor,
      logging,
      skip_mps,
      torch_device,
  )
  from diffusers.utils.import_utils import is_xformers_available
  from diffusers.utils.testing_utils import enable_full_determinism
  
  from .test_modeling_common import ModelTesterMixin, UNetTesterMixin
  
  
  enable_full_determinism()
  
  __A          =    logging.get_logger(__name__)
  
  
  
  
  
  def  _A		(							lowercase__		,		lowercase__ = True	):
  						lowercase__							 =       {}
  						for name in model.attn_processors.keys():
  												lowercase__							 =       name.endswith("""attn2.processor"""	) and not (
  												    name.startswith("""transformer_in"""	) or """temp_attentions""" in name.split("""."""	)
  												)
  												lowercase__							 =       model.config.cross_attention_dim if has_cross_attention else None
  												if name.startswith("""mid_block"""	):
  																		lowercase__							 =       model.config.block_out_channels[-1]
  												elif name.startswith("""up_blocks"""	):
  																		lowercase__							 =       int(name[len("""up_blocks."""	)]	)
  																		lowercase__							 =       list(reversed(model.config.block_out_channels	)	)[block_id]
  												elif name.startswith("""down_blocks"""	):
  																		lowercase__							 =       int(name[len("""down_blocks."""	)]	)
  																		lowercase__							 =       model.config.block_out_channels[block_id]
  												elif name.startswith("""transformer_in"""	):
  																		# Note that the `8 * ...` comes from: https://github.com/huggingface/diffusers/blob/7139f0e874f10b2463caa8cbd585762a309d12d6/src/diffusers/models/unet_3d_condition.py#L148
  																		lowercase__							 =       8 * model.config.attention_head_dim
  
  												lowercase__							 =       LoRAAttnProcessor(hidden_size=lowercase__		,		cross_attention_dim=lowercase__	)
  												lowercase__							 =       lora_attn_procs[name].to(model.device	)
  
  												if mock_weights:
  																		# add 1 to weights to mock trained weights
  																		with torch.no_grad():
  																								lora_attn_procs[name].to_q_lora.up.weight += 1
  																								lora_attn_procs[name].to_k_lora.up.weight += 1
  																								lora_attn_procs[name].to_v_lora.up.weight += 1
  																								lora_attn_procs[name].to_out_lora.up.weight += 1
  
  						return lora_attn_procs
  
  
  
  
  
  
  
  @skip_mps
  class 			A							(       __UpperCAmelCase		,						__UpperCAmelCase		,						unittest.TestCase				):
  			lowerCamelCase							:							List[Any]       		=  UNetaDConditionModel
  			lowerCamelCase							:							int       		=  """sample"""
  
  
  
  			@property
  			def A__ (					self       )			->		Optional[Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       4
  									lowercase__							 =       4
  									lowercase__							 =       4
  									lowercase__							 =       (32, 32)
  
  									lowercase__							 =       floats_tensor((batch_size, num_channels, num_frames) + sizes       ).to(lowerCamelCase__       )
  									lowercase__							 =       torch.tensor([10]       ).to(lowerCamelCase__       )
  									lowercase__							 =       floats_tensor((batch_size, 4, 32)       ).to(lowerCamelCase__       )
  
  									return {"sample": noise, "timestep": time_step, "encoder_hidden_states": encoder_hidden_states}
  
  
  
  			@property
  			def A__ (					self       )			->		Any:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									return (4, 4, 32, 32)
  
  
  
  			@property
  			def A__ (					self       )			->		Union[str, Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									return (4, 4, 32, 32)
  
  
  
  			def A__ (					self       )			->		Optional[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__							 =       {
  									    """block_out_channels""": (32, 64),
  									    """down_block_types""": (
  									        """CrossAttnDownBlock3D""",
  									        """DownBlock3D""",
  									    ),
  									    """up_block_types""": ("""UpBlock3D""", """CrossAttnUpBlock3D"""),
  									    """cross_attention_dim""": 32,
  									    """attention_head_dim""": 8,
  									    """out_channels""": 4,
  									    """in_channels""": 4,
  									    """layers_per_block""": 1,
  									    """sample_size""": 32,
  									}
  									lowercase__							 =       self.dummy_input
  									return init_dict, inputs_dict
  
  
  
  			@unittest.skipIf(
  			    torch_device != """cuda""" or not is_xformers_available()       ,     reason="""XFormers attention is only available with CUDA and `xformers` installed"""       ,     )
  			def A__ (					self       )			->		str:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  
  									model.enable_xformers_memory_efficient_attention()
  
  									assert (
  									    model.mid_block.attentions[0].transformer_blocks[0].attna.processor.__class__.__name__
  									    == "XFormersAttnProcessor"
  									), "xformers is not enabled"
  
  
  
  			def A__ (					self       )			->		Dict:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       32
  
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  									model.eval()
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       )
  
  															if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ):
  																					lowercase__							 =       output.sample
  
  									self.assertIsNotNone(lowerCamelCase__       )
  									lowercase__							 =       inputs_dict["""sample"""].shape
  									self.assertEqual(output.shape       ,     lowerCamelCase__       ,     """Input and output shapes do not match"""       )
  
  
  
  			def A__ (					self       )			->		List[Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  									model.eval()
  
  									with torch.no_grad():
  															# Warmup pass when using mps (see #372)
  															if torch_device == "mps" and isinstance(lowerCamelCase__       ,     lowerCamelCase__       ):
  																					model(**self.dummy_input       )
  
  															lowercase__							 =       model(**lowerCamelCase__       )
  															if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ):
  																					lowercase__							 =       first.sample
  
  															lowercase__							 =       model(**lowerCamelCase__       )
  															if isinstance(lowerCamelCase__       ,     lowerCamelCase__       ):
  																					lowercase__							 =       second.sample
  
  									lowercase__							 =       first.cpu().numpy()
  									lowercase__							 =       second.cpu().numpy()
  									lowercase__							 =       out_a[~np.isnan(lowerCamelCase__       )]
  									lowercase__							 =       out_a[~np.isnan(lowerCamelCase__       )]
  									lowercase__							 =       np.amax(np.abs(out_a - out_a       )       )
  									self.assertLessEqual(lowerCamelCase__       ,     1e-5       )
  
  
  
  			def A__ (					self       )			->		Any:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  									model.eval()
  
  									model.set_attention_slice("""auto"""       )
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       )
  									assert output is not None
  
  									model.set_attention_slice("""max"""       )
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       )
  									assert output is not None
  
  									model.set_attention_slice(2       )
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       )
  									assert output is not None
  
  
  
  			def A__ (					self       )			->		Union[str, Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       )
  
  									# make sure we can set a list of attention processors
  									model.set_attn_processor(lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									# test that attn processors can be set to itself
  									model.set_attn_processor(model.attn_processors       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.0}       ).sample
  															lowercase__							 =       model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.5}       ).sample
  															lowercase__							 =       model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.5}       ).sample
  
  									assert (samplea - samplea).abs().max() < 3e-3
  									assert (samplea - samplea).abs().max() < 3e-3
  
  									# sample 2 and sample 3 should be different
  									assert (samplea - samplea).abs().max() > 3e-3
  
  
  
  			def A__ (					self       )			->		Optional[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									torch.manual_seed(0       )
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       )
  									model.set_attn_processor(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.5}       ).sample
  
  									with tempfile.TemporaryDirectory() as tmpdirname:
  															model.save_attn_procs(lowerCamelCase__       )
  															self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__       ,     """pytorch_lora_weights.bin"""       )       )       )
  															torch.manual_seed(0       )
  															lowercase__							 =       self.model_class(**lowerCamelCase__       )
  															new_model.to(lowerCamelCase__       )
  															new_model.load_attn_procs(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       new_model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.5}       ).sample
  
  									assert (sample - new_sample).abs().max() < 1e-3
  
  									# LoRA and no LoRA should NOT be the same
  									assert (sample - old_sample).abs().max() > 1e-4
  
  
  
  			def A__ (					self       )			->		Any:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									torch.manual_seed(0       )
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       )
  									model.set_attn_processor(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.5}       ).sample
  
  									with tempfile.TemporaryDirectory() as tmpdirname:
  															model.save_attn_procs(lowerCamelCase__       ,     safe_serialization=lowerCamelCase__       )
  															self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__       ,     """pytorch_lora_weights.safetensors"""       )       )       )
  															torch.manual_seed(0       )
  															lowercase__							 =       self.model_class(**lowerCamelCase__       )
  															new_model.to(lowerCamelCase__       )
  															new_model.load_attn_procs(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       new_model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.5}       ).sample
  
  									assert (sample - new_sample).abs().max() < 3e-3
  
  									# LoRA and no LoRA should NOT be the same
  									assert (sample - old_sample).abs().max() > 1e-4
  
  
  
  			def A__ (					self       )			->		Dict:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									torch.manual_seed(0       )
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       ,     mock_weights=lowerCamelCase__       )
  									model.set_attn_processor(lowerCamelCase__       )
  									# Saving as torch, properly reloads with directly filename
  									with tempfile.TemporaryDirectory() as tmpdirname:
  															model.save_attn_procs(lowerCamelCase__       )
  															self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__       ,     """pytorch_lora_weights.bin"""       )       )       )
  															torch.manual_seed(0       )
  															lowercase__							 =       self.model_class(**lowerCamelCase__       )
  															new_model.to(lowerCamelCase__       )
  															new_model.load_attn_procs(lowerCamelCase__       ,     weight_name="""pytorch_lora_weights.bin"""       )
  
  
  
  			def A__ (					self       )			->		List[Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									torch.manual_seed(0       )
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       ,     mock_weights=lowerCamelCase__       )
  									model.set_attn_processor(lowerCamelCase__       )
  									# Saving as torch, properly reloads with directly filename
  									with tempfile.TemporaryDirectory() as tmpdirname:
  															model.save_attn_procs(lowerCamelCase__       )
  															self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__       ,     """pytorch_lora_weights.bin"""       )       )       )
  															torch.manual_seed(0       )
  															lowercase__							 =       self.model_class(**lowerCamelCase__       )
  															new_model.to(lowerCamelCase__       )
  															with self.assertRaises(lowerCamelCase__       ) as e:
  																					new_model.load_attn_procs(lowerCamelCase__       ,     use_safetensors=lowerCamelCase__       )
  															self.assertIn("""Error no file named pytorch_lora_weights.safetensors"""       ,     str(e.exception       )       )
  
  
  
  			def A__ (					self       )			->		Any:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       8
  
  									torch.manual_seed(0       )
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       )
  									model.set_attn_processor(lowerCamelCase__       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ,     cross_attention_kwargs={"""scale""": 0.0}       ).sample
  
  									model.set_attn_processor(AttnProcessor()       )
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  									assert (sample - new_sample).abs().max() < 1e-4
  									assert (sample - old_sample).abs().max() < 3e-3
  
  
  
  			@unittest.skipIf(
  			    torch_device != """cuda""" or not is_xformers_available()       ,     reason="""XFormers attention is only available with CUDA and `xformers` installed"""       ,     )
  			def A__ (					self       )			->		Optional[int]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  
  									lowercase__							 =       4
  
  									torch.manual_seed(0       )
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  									lowercase__							 =       create_lora_layers(lowerCamelCase__       )
  									model.set_attn_processor(lowerCamelCase__       )
  
  									# default
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  															model.enable_xformers_memory_efficient_attention()
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  															model.disable_xformers_memory_efficient_attention()
  															lowercase__							 =       model(**lowerCamelCase__       ).sample
  
  									assert (sample - on_sample).abs().max() < 1e-4
  									assert (sample - off_sample).abs().max() < 1e-4
  
  
  
  			def A__ (					self       )			->		List[Any]:
  
  
  
  
  									'''simple docstring'''
  
  
  
  									lowercase__ ,						lowercase__							 =       self.prepare_init_args_and_inputs_for_common()
  									lowercase__							 =       32
  
  									lowercase__							 =       self.model_class(**lowerCamelCase__       )
  									model.to(lowerCamelCase__       )
  									model.eval()
  
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       )[0]
  
  									model.enable_forward_chunking()
  									with torch.no_grad():
  															lowercase__							 =       model(**lowerCamelCase__       )[0]
  
  									self.assertEqual(output.shape       ,     output_a.shape       ,     """Shape doesn't match"""       )
  									assert np.abs(output.cpu() - output_a.cpu()       ).max() < 1e-2
  
  
  # (todo: sayakpaul) implement SLOW tests.
  
  
  
  
  
  
  