
"""simple docstring"""





import argparse
import io

import requests
import torch
from omegaconf import OmegaConf

from diffusers import AutoencoderKL
from diffusers.pipelines.stable_diffusion.convert_from_ckpt import (
    assign_to_checkpoint,
    conv_attn_to_linear,
    create_vae_diffusers_config,
    renew_vae_attention_paths,
    renew_vae_resnet_paths,
)







def 	__a     (		__lowerCamelCase,		__lowerCamelCase  ):
   UpperCAmelCase_					:					str			     =    checkpoint

   UpperCAmelCase_					:					int			     =    {}

   UpperCAmelCase_					:					Optional[int]			     =    vae_state_dict["encoder.conv_in.weight"]
   UpperCAmelCase_					:					List[str]			     =    vae_state_dict["encoder.conv_in.bias"]
   UpperCAmelCase_					:					Optional[Any]			     =    vae_state_dict["encoder.conv_out.weight"]
   UpperCAmelCase_					:					Optional[int]			     =    vae_state_dict["encoder.conv_out.bias"]
   UpperCAmelCase_					:					List[Any]			     =    vae_state_dict["encoder.norm_out.weight"]
   UpperCAmelCase_					:					Union[str, Any]			     =    vae_state_dict["encoder.norm_out.bias"]

   UpperCAmelCase_					:					Any			     =    vae_state_dict["decoder.conv_in.weight"]
   UpperCAmelCase_					:					int			     =    vae_state_dict["decoder.conv_in.bias"]
   UpperCAmelCase_					:					Any			     =    vae_state_dict["decoder.conv_out.weight"]
   UpperCAmelCase_					:					Tuple			     =    vae_state_dict["decoder.conv_out.bias"]
   UpperCAmelCase_					:					List[Any]			     =    vae_state_dict["decoder.norm_out.weight"]
   UpperCAmelCase_					:					Tuple			     =    vae_state_dict["decoder.norm_out.bias"]

   UpperCAmelCase_					:					str			     =    vae_state_dict["quant_conv.weight"]
   UpperCAmelCase_					:					Optional[Any]			     =    vae_state_dict["quant_conv.bias"]
   UpperCAmelCase_					:					List[str]			     =    vae_state_dict["post_quant_conv.weight"]
   UpperCAmelCase_					:					List[Any]			     =    vae_state_dict["post_quant_conv.bias"]

   # Retrieves the keys for the encoder down blocks only
   UpperCAmelCase_					:					Optional[Any]			     =    len({".".join(layer.split("."  )[:3]  ) for layer in vae_state_dict if "encoder.down" in layer}  )
   UpperCAmelCase_					:					Optional[Any]			     =    {
       layer_id: [key for key in vae_state_dict if f"""down.{layer_id}""" in key] for layer_id in range(__lowerCamelCase  )
   }

   # Retrieves the keys for the decoder up blocks only
   UpperCAmelCase_					:					Dict			     =    len({".".join(layer.split("."  )[:3]  ) for layer in vae_state_dict if "decoder.up" in layer}  )
   UpperCAmelCase_					:					Optional[int]			     =    {
       layer_id: [key for key in vae_state_dict if f"""up.{layer_id}""" in key] for layer_id in range(__lowerCamelCase  )
   }

   for i in range(__lowerCamelCase  ):
      UpperCAmelCase_					:					Any			     =    [key for key in down_blocks[i] if f"""down.{i}""" in key and f"""down.{i}.downsample""" not in key]

      if f"""encoder.down.{i}.downsample.conv.weight""" in vae_state_dict:
         UpperCAmelCase_					:					Dict			     =    vae_state_dict.pop(
             f"""encoder.down.{i}.downsample.conv.weight"""  )
         UpperCAmelCase_					:					Dict			     =    vae_state_dict.pop(
             f"""encoder.down.{i}.downsample.conv.bias"""  )

      UpperCAmelCase_					:					List[str]			     =    renew_vae_resnet_paths(__lowerCamelCase  )
      UpperCAmelCase_					:					Optional[Any]			     =    {"old": f"""down.{i}.block""", "new": f"""down_blocks.{i}.resnets"""}
      assign_to_checkpoint(__lowerCamelCase,		__lowerCamelCase,		__lowerCamelCase,		additional_replacements=[meta_path],		config=__lowerCamelCase  )

   UpperCAmelCase_					:					List[Any]			     =    [key for key in vae_state_dict if "encoder.mid.block" in key]
   UpperCAmelCase_					:					Tuple			     =    2
   for i in range(1,		num_mid_res_blocks + 1  ):
      UpperCAmelCase_					:					str			     =    [key for key in mid_resnets if f"""encoder.mid.block_{i}""" in key]

      UpperCAmelCase_					:					List[Any]			     =    renew_vae_resnet_paths(__lowerCamelCase  )
      UpperCAmelCase_					:					Optional[int]			     =    {"old": f"""mid.block_{i}""", "new": f"""mid_block.resnets.{i - 1}"""}
      assign_to_checkpoint(__lowerCamelCase,		__lowerCamelCase,		__lowerCamelCase,		additional_replacements=[meta_path],		config=__lowerCamelCase  )

   UpperCAmelCase_					:					Optional[int]			     =    [key for key in vae_state_dict if "encoder.mid.attn" in key]
   UpperCAmelCase_					:					Union[str, Any]			     =    renew_vae_attention_paths(__lowerCamelCase  )
   UpperCAmelCase_					:					int			     =    {"old": "mid.attn_1", "new": "mid_block.attentions.0"}
   assign_to_checkpoint(__lowerCamelCase,		__lowerCamelCase,		__lowerCamelCase,		additional_replacements=[meta_path],		config=__lowerCamelCase  )
   conv_attn_to_linear(__lowerCamelCase  )

   for i in range(__lowerCamelCase  ):
      UpperCAmelCase_					:					Optional[Any]			     =    num_up_blocks - 1 - i
      UpperCAmelCase_					:					Any			     =    [
          key for key in up_blocks[block_id] if f"""up.{block_id}""" in key and f"""up.{block_id}.upsample""" not in key
      ]

      if f"""decoder.up.{block_id}.upsample.conv.weight""" in vae_state_dict:
         UpperCAmelCase_					:					str			     =    vae_state_dict[
             f"""decoder.up.{block_id}.upsample.conv.weight"""
         ]
         UpperCAmelCase_					:					Optional[Any]			     =    vae_state_dict[
             f"""decoder.up.{block_id}.upsample.conv.bias"""
         ]

      UpperCAmelCase_					:					Dict			     =    renew_vae_resnet_paths(__lowerCamelCase  )
      UpperCAmelCase_					:					List[str]			     =    {"old": f"""up.{block_id}.block""", "new": f"""up_blocks.{i}.resnets"""}
      assign_to_checkpoint(__lowerCamelCase,		__lowerCamelCase,		__lowerCamelCase,		additional_replacements=[meta_path],		config=__lowerCamelCase  )

   UpperCAmelCase_					:					Optional[Any]			     =    [key for key in vae_state_dict if "decoder.mid.block" in key]
   UpperCAmelCase_					:					List[Any]			     =    2
   for i in range(1,		num_mid_res_blocks + 1  ):
      UpperCAmelCase_					:					str			     =    [key for key in mid_resnets if f"""decoder.mid.block_{i}""" in key]

      UpperCAmelCase_					:					Tuple			     =    renew_vae_resnet_paths(__lowerCamelCase  )
      UpperCAmelCase_					:					Tuple			     =    {"old": f"""mid.block_{i}""", "new": f"""mid_block.resnets.{i - 1}"""}
      assign_to_checkpoint(__lowerCamelCase,		__lowerCamelCase,		__lowerCamelCase,		additional_replacements=[meta_path],		config=__lowerCamelCase  )

   UpperCAmelCase_					:					Optional[int]			     =    [key for key in vae_state_dict if "decoder.mid.attn" in key]
   UpperCAmelCase_					:					Any			     =    renew_vae_attention_paths(__lowerCamelCase  )
   UpperCAmelCase_					:					Union[str, Any]			     =    {"old": "mid.attn_1", "new": "mid_block.attentions.0"}
   assign_to_checkpoint(__lowerCamelCase,		__lowerCamelCase,		__lowerCamelCase,		additional_replacements=[meta_path],		config=__lowerCamelCase  )
   conv_attn_to_linear(__lowerCamelCase  )
   return new_checkpoint







def 	__a     (		__lowerCamelCase,		__lowerCamelCase,		):
   # Only support V1
   UpperCAmelCase_					:					List[str]			     =    requests.get(
       " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml"  )
   UpperCAmelCase_					:					List[Any]			     =    io.BytesIO(r.content  )

   UpperCAmelCase_					:					Any			     =    OmegaConf.load(__lowerCamelCase  )
   UpperCAmelCase_					:					Union[str, Any]			     =    512
   UpperCAmelCase_					:					Optional[Any]			     =    "cuda" if torch.cuda.is_available() else "cpu"
   if checkpoint_path.endswith("safetensors"  ):
      from safetensors import safe_open

      UpperCAmelCase_					:					int			     =    {}
      with safe_open(__lowerCamelCase,		framework="pt",		device="cpu"  ) as f:
         for key in f.keys():
            UpperCAmelCase_					:					Tuple			     =    f.get_tensor(__lowerCamelCase  )
   else:
      UpperCAmelCase_					:					Any			     =    torch.load(__lowerCamelCase,		map_location=__lowerCamelCase  )["state_dict"]

   # Convert the VAE model.
   UpperCAmelCase_					:					Dict			     =    create_vae_diffusers_config(__lowerCamelCase,		image_size=__lowerCamelCase  )
   UpperCAmelCase_					:					Union[str, Any]			     =    custom_convert_ldm_vae_checkpoint(__lowerCamelCase,		__lowerCamelCase  )

   UpperCAmelCase_					:					int			     =    AutoencoderKL(**__lowerCamelCase  )
   vae.load_state_dict(__lowerCamelCase  )
   vae.save_pretrained(__lowerCamelCase  )


if __name__ == "__main__":
    _a		       =							argparse.ArgumentParser()

    parser.add_argument('--vae_pt_path', default=None, type=str, required=True, help='Path to the VAE.pt to convert.')
    parser.add_argument('--dump_path', default=None, type=str, required=True, help='Path to the VAE.pt to convert.')

    _a		       =							parser.parse_args()

    vae_pt_to_vae_diffuser(args.vae_pt_path, args.dump_path)





'''simple docstring'''






import unicodedata
from dataclasses import dataclass
from typing import Optional, Union

import numpy as np

from transformers.data.data_collator import DataCollatorMixin
from transformers.file_utils import PaddingStrategy
from transformers.tokenization_utils_base import PreTrainedTokenizerBase


def 		_A     (    A__     ,				A__     ,				A__     ,				A__      ):






 """simple docstring"""



 if isinstance(A__     ,				A__      ):
  __lowercase							  = np.full((len(A__      ), sequence_length, 2)     ,				A__      )
 else:
  __lowercase							  = np.full((len(A__      ), sequence_length)     ,				A__      )

 for i, tensor in enumerate(A__      ):
  if padding_side == "right":
   if isinstance(A__     ,				A__      ):
    __lowercase							  = tensor[:sequence_length]
   else:
    __lowercase							  = tensor[:sequence_length]
  else:
   if isinstance(A__     ,				A__      ):
    __lowercase							  = tensor[:sequence_length]
   else:
    __lowercase							  = tensor[:sequence_length]

 return out_tensor.tolist()


def 		_A     (    A__      ):






 """simple docstring"""



 __lowercase							  = ord(A__      )
 if (cp >= 33 and cp <= 47) or (cp >= 58 and cp <= 64) or (cp >= 91 and cp <= 96) or (cp >= 123 and cp <= 126):
  return True
 __lowercase							  = unicodedata.category(A__      )
 if cat.startswith('''P'''      ):
  return True
 return False






@dataclass
class 			lowercase_	(lowerCamelCase__      ):




  """simple docstring"""




  SCREAMING_SNAKE_CASE    :  PreTrainedTokenizerBase
  SCREAMING_SNAKE_CASE    :  Union[bool, str, PaddingStrategy]							=			True
  SCREAMING_SNAKE_CASE    :  Optional[int]							=			None
  SCREAMING_SNAKE_CASE    :  Optional[int]							=			None
  SCREAMING_SNAKE_CASE    :  int							=			-1_0_0
  SCREAMING_SNAKE_CASE    :  str							=			"pt"






  def 					SCREAMING_SNAKE_CASE      (      self   :     List[str]					,lowercase__   :     List[str]			):
   import torch

   __lowercase							  = '''label''' if '''label''' in features[0].keys() else '''labels'''
   __lowercase							  = [feature[label_name] for feature in features] if label_name in features[0].keys() else None
   __lowercase							  = self.tokenizer.pad(
       lowercase__					,padding=self.padding					,max_length=self.max_length					,pad_to_multiple_of=self.pad_to_multiple_of					,return_tensors='''pt''' if labels is None else None					,)

   if labels is None:
    return batch

   __lowercase							  = torch.tensor(batch['''entity_ids''']			).shape[1]
   __lowercase							  = self.tokenizer.padding_side
   if padding_side == "right":
    __lowercase							  = [
        list(lowercase__			) + [self.label_pad_token_id] * (sequence_length - len(lowercase__			)) for label in labels
    ]
   else:
    __lowercase							  = [
        [self.label_pad_token_id] * (sequence_length - len(lowercase__			)) + list(lowercase__			) for label in labels
    ]

   __lowercase							  = [feature['''ner_tags'''] for feature in features]
   __lowercase							  = padding_tensor(lowercase__					,-1					,lowercase__					,lowercase__			)
   __lowercase							  = [feature['''original_entity_spans'''] for feature in features]
   __lowercase							  = padding_tensor(lowercase__					,(-1, -1)					,lowercase__					,lowercase__			)
   __lowercase							  = {k: torch.tensor(lowercase__					,dtype=torch.intaa			) for k, v in batch.items()}

   return batch

