


'''simple docstring'''

import inspect
import unittest

from transformers import MobileNetVaConfig
from transformers.testing_utils import require_torch, require_vision, slow, torch_device
from transformers.utils import cached_property, is_torch_available, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
 import torch

 from transformers import MobileNetVaForImageClassification, MobileNetVaModel
 from transformers.models.mobilenet_va.modeling_mobilenet_va import MOBILENET_V1_PRETRAINED_MODEL_ARCHIVE_LIST


if is_vision_available():
 from PIL import Image

 from transformers import MobileNetVaImageProcessor
class     __lowerCAmelCase		(lowercase_	):





      '''simple docstring'''






      def  UpperCamelCase__						(self       :       Optional[int]					):

             '''simple docstring'''







             lowercase__      =					self.config_class(**self.inputs_dict					)
             self.parent.assertTrue(hasattr(UpperCamelCase  ,		'''tf_padding'''					)					)
             self.parent.assertTrue(hasattr(UpperCamelCase  ,		'''depth_multiplier'''					)					)






class     __lowerCAmelCase		:





      '''simple docstring'''






      def __init__(self       :       List[Any]  ,		UpperCamelCase       :       Any  ,		UpperCamelCase       :       Union[str, Any]=13  ,		UpperCamelCase       :       Tuple=3  ,		UpperCamelCase       :       str=32  ,		UpperCamelCase       :       int=0.25  ,		UpperCamelCase       :       Optional[int]=8  ,		UpperCamelCase       :       str=True  ,		UpperCamelCase       :       Union[str, Any]=1024  ,		UpperCamelCase       :       int=32  ,		UpperCamelCase       :       Tuple="relu6"  ,		UpperCamelCase       :       Any=0.1  ,		UpperCamelCase       :       Tuple=0.02  ,		UpperCamelCase       :       List[str]=True  ,		UpperCamelCase       :       str=True  ,		UpperCamelCase       :       Optional[Any]=10  ,		UpperCamelCase       :       Optional[int]=None  ,		):

             '''simple docstring'''







             lowercase__      =					parent
             lowercase__      =					batch_size
             lowercase__      =					num_channels
             lowercase__      =					image_size
             lowercase__      =					depth_multiplier
             lowercase__      =					min_depth
             lowercase__      =					tf_padding
             lowercase__      =					int(last_hidden_size * depth_multiplier					)
             lowercase__      =					output_stride
             lowercase__      =					hidden_act
             lowercase__      =					classifier_dropout_prob
             lowercase__      =					use_labels
             lowercase__      =					is_training
             lowercase__      =					num_labels
             lowercase__      =					initializer_range
             lowercase__      =					scope



      def  UpperCamelCase__						(self       :       Optional[int]					):

             '''simple docstring'''







             lowercase__      =					floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]					)

             lowercase__      =					None
             lowercase__      =					None
             if self.use_labels:
                    lowercase__      =					ids_tensor([self.batch_size]  ,		self.num_labels					)
                    lowercase__      =					ids_tensor([self.batch_size, self.image_size, self.image_size]  ,		self.num_labels					)

             lowercase__      =					self.get_config()

             return config, pixel_values, labels, pixel_labels



      def  UpperCamelCase__						(self       :       Optional[int]					):

             '''simple docstring'''







             return MobileNetVaConfig(
                 num_channels=self.num_channels  ,		image_size=self.image_size  ,		depth_multiplier=self.depth_multiplier  ,		min_depth=self.min_depth  ,		tf_padding=self.tf_padding  ,		hidden_act=self.hidden_act  ,		classifier_dropout_prob=self.classifier_dropout_prob  ,		initializer_range=self.initializer_range  ,		)



      def  UpperCamelCase__						(self       :       List[str]  ,		UpperCamelCase       :       Any  ,		UpperCamelCase       :       Tuple  ,		UpperCamelCase       :       str  ,		UpperCamelCase       :       Tuple					):

             '''simple docstring'''







             lowercase__      =					MobileNetVaModel(config=UpperCamelCase					)
             model.to(UpperCamelCase					)
             model.eval()
             lowercase__      =					model(UpperCamelCase					)
             self.parent.assertEqual(
                 result.last_hidden_state.shape  ,		(
                     self.batch_size,
                     self.last_hidden_size,
                     self.image_size // self.output_stride,
                     self.image_size // self.output_stride,
                 )  ,		)



      def  UpperCamelCase__						(self       :       Optional[int]  ,		UpperCamelCase       :       Tuple  ,		UpperCamelCase       :       str  ,		UpperCamelCase       :       Optional[int]  ,		UpperCamelCase       :       Optional[int]					):

             '''simple docstring'''







             lowercase__      =					self.num_labels
             lowercase__      =					MobileNetVaForImageClassification(UpperCamelCase					)
             model.to(UpperCamelCase					)
             model.eval()
             lowercase__      =					model(UpperCamelCase  ,		labels=UpperCamelCase					)
             self.parent.assertEqual(result.logits.shape  ,		(self.batch_size, self.num_labels)					)






      def  UpperCamelCase__						(self       :       Tuple					):

             '''simple docstring'''







             lowercase__      =					self.prepare_config_and_inputs()
             lowercase__     ,lowercase__     ,lowercase__     ,lowercase__      =					config_and_inputs
             lowercase__      =					{'''pixel_values''': pixel_values}
             return config, inputs_dict






@require_torch
class     __lowerCAmelCase		(lowercase_    ,	lowercase_    ,	unittest.TestCase	):





      '''simple docstring'''






      lowerCAmelCase__   :	List[str]       =				(MobileNetVaModel, MobileNetVaForImageClassification) if is_torch_available() else ()
      lowerCAmelCase__   :	int       =				(
          {"""feature-extraction""": MobileNetVaModel, """image-classification""": MobileNetVaForImageClassification}
          if is_torch_available()
          else {}
      )

      lowerCAmelCase__   :	List[str]       =				False
      lowerCAmelCase__   :	str       =				False
      lowerCAmelCase__   :	Optional[Any]       =				False
      lowerCAmelCase__   :	Tuple       =				False



      def  UpperCamelCase__						(self       :       Any					):

             '''simple docstring'''







             lowercase__      =					MobileNetVaModelTester(self					)
             lowercase__      =					MobileNetVaConfigTester(self  ,		config_class=UpperCamelCase  ,		has_text_modality=UpperCamelCase					)



      def  UpperCamelCase__						(self       :       List[Any]					):

             '''simple docstring'''







             self.config_tester.run_common_tests()



      @unittest.skip(reason='''MobileNetV1 does not use inputs_embeds'''					)
      def  UpperCamelCase__						(self       :       Any					):

             '''simple docstring'''







             pass



      @unittest.skip(reason='''MobileNetV1 does not support input and output embeddings'''					)
      def  UpperCamelCase__						(self       :       int					):

             '''simple docstring'''







             pass



      @unittest.skip(reason='''MobileNetV1 does not output attentions'''					)
      def  UpperCamelCase__						(self       :       Any					):

             '''simple docstring'''







             pass



      def  UpperCamelCase__						(self       :       str					):

             '''simple docstring'''







             lowercase__     ,lowercase__      =					self.model_tester.prepare_config_and_inputs_for_common()

             for model_class in self.all_model_classes:
                    lowercase__      =					model_class(UpperCamelCase					)
                    lowercase__      =					inspect.signature(model.forward					)
                    # signature.parameters is an OrderedDict => so arg_names order is deterministic
                    lowercase__      =					[*signature.parameters.keys()]

                    lowercase__      =					['''pixel_values''']
                    self.assertListEqual(arg_names[:1]  ,		UpperCamelCase					)



      def  UpperCamelCase__						(self       :       Any					):

             '''simple docstring'''







             lowercase__      =					self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_model(*UpperCamelCase					)



      def  UpperCamelCase__						(self       :       Union[str, Any]					):

             '''simple docstring'''







             def check_hidden_states_output(UpperCamelCase       :       str  ,		UpperCamelCase       :       Any  ,		UpperCamelCase       :       Dict					):
                    lowercase__      =					model_class(UpperCamelCase					)
                    model.to(UpperCamelCase					)
                    model.eval()

                    with torch.no_grad():
                           lowercase__      =					model(**self._prepare_for_class(UpperCamelCase  ,		UpperCamelCase					)					)

                    lowercase__      =					outputs.hidden_states

                    lowercase__      =					26
                    self.assertEqual(len(UpperCamelCase					)  ,		UpperCamelCase					)

             lowercase__     ,lowercase__      =					self.model_tester.prepare_config_and_inputs_for_common()

             for model_class in self.all_model_classes:
                    lowercase__      =					True
                    check_hidden_states_output(UpperCamelCase  ,		UpperCamelCase  ,		UpperCamelCase					)

                    # check that output_hidden_states also work using config
                    del inputs_dict["output_hidden_states"]
                    lowercase__      =					True

                    check_hidden_states_output(UpperCamelCase  ,		UpperCamelCase  ,		UpperCamelCase					)



      def  UpperCamelCase__						(self       :       List[Any]					):

             '''simple docstring'''







             lowercase__      =					self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_for_image_classification(*UpperCamelCase					)






      @slow
      def  UpperCamelCase__						(self       :       Union[str, Any]					):

             '''simple docstring'''







             for model_name in MOBILENET_V1_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                    lowercase__      =					MobileNetVaModel.from_pretrained(UpperCamelCase					)
                    self.assertIsNotNone(UpperCamelCase					)






def _SCREAMING_SNAKE_CASE ()			->			Any:






       """simple docstring"""







       lowercase__      =					Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''			)
       return image

@require_torch
@require_vision
class     __lowerCAmelCase		(unittest.TestCase	):





      '''simple docstring'''






      @cached_property
      def  UpperCamelCase__						(self       :       Any					):

             '''simple docstring'''







             return (
                 MobileNetVaImageProcessor.from_pretrained('''google/mobilenet_v1_1.0_224'''					) if is_vision_available() else None
             )






      @slow
      def  UpperCamelCase__						(self       :       List[Any]					):

             '''simple docstring'''







             lowercase__      =					MobileNetVaForImageClassification.from_pretrained('''google/mobilenet_v1_1.0_224'''					).to(UpperCamelCase					)

             lowercase__      =					self.default_image_processor
             lowercase__      =					prepare_img()
             lowercase__      =					image_processor(images=UpperCamelCase  ,		return_tensors='''pt'''					).to(UpperCamelCase					)

             # forward pass
             with torch.no_grad():
                    lowercase__      =					model(**UpperCamelCase					)

             # verify the logits
             lowercase__      =					torch.Size((1, 1001)					)
             self.assertEqual(outputs.logits.shape  ,		UpperCamelCase					)

             lowercase__      =					torch.tensor([-4.17_39, -1.12_33, 3.12_05]					).to(UpperCamelCase					)

             self.assertTrue(torch.allclose(outputs.logits[0, :3]  ,		UpperCamelCase  ,		atol=1E-4					)					)








'''simple docstring'''

import argparse

import torch

from diffusers.pipelines.stable_diffusion.convert_from_ckpt import download_from_original_stable_diffusion_ckpt


if __name__ == "__main__":
 lowerCamelCase				:  int    		=      argparse.ArgumentParser()

 parser.add_argument(
     '--checkpoint_path', default=None, type=str, required=True, help='Path to the checkpoint to convert.'
 )
 # !wget https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml
 parser.add_argument(
     '--original_config_file',
     default=None,
     type=str,
     help='The YAML config file corresponding to the original architecture.',
 )
 parser.add_argument(
     '--num_in_channels',
     default=None,
     type=int,
     help='The number of input channels. If `None` number of input channels will be automatically inferred.',
 )
 parser.add_argument(
     '--scheduler_type',
     default='pndm',
     type=str,
     help='Type of scheduler to use. Should be one of [\'pndm\', \'lms\', \'ddim\', \'euler\', \'euler-ancestral\', \'dpm\']',
 )
 parser.add_argument(
     '--pipeline_type',
     default=None,
     type=str,
     help=(
         'The pipeline type. One of \'FrozenOpenCLIPEmbedder\', \'FrozenCLIPEmbedder\', \'PaintByExample\''
         '. If `None` pipeline will be automatically inferred.'
     ),
 )
 parser.add_argument(
     '--image_size',
     default=None,
     type=int,
     help=(
         'The image size that the model was trained on. Use 512 for Stable Diffusion v1.X and Stable Siffusion v2'
         ' Base. Use 768 for Stable Diffusion v2.'
     ),
 )
 parser.add_argument(
     '--prediction_type',
     default=None,
     type=str,
     help=(
         'The prediction type that the model was trained on. Use \'epsilon\' for Stable Diffusion v1.X and Stable'
         ' Diffusion v2 Base. Use \'v_prediction\' for Stable Diffusion v2.'
     ),
 )
 parser.add_argument(
     '--extract_ema',
     action='store_true',
     help=(
         'Only relevant for checkpoints that have both EMA and non-EMA weights. Whether to extract the EMA weights'
         ' or not. Defaults to `False`. Add `--extract_ema` to extract the EMA weights. EMA weights usually yield'
         ' higher quality images for inference. Non-EMA weights are usually better to continue fine-tuning.'
     ),
 )
 parser.add_argument(
     '--upcast_attention',
     action='store_true',
     help=(
         'Whether the attention computation should always be upcasted. This is necessary when running stable'
         ' diffusion 2.1.'
     ),
 )
 parser.add_argument(
     '--from_safetensors',
     action='store_true',
     help='If `--checkpoint_path` is in `safetensors` format, load checkpoint with safetensors instead of PyTorch.',
 )
 parser.add_argument(
     '--to_safetensors',
     action='store_true',
     help='Whether to store pipeline in safetensors format or not.',
 )
 parser.add_argument('--dump_path', default=None, type=str, required=True, help='Path to the output model.')
 parser.add_argument('--device', type=str, help='Device to use (e.g. cpu, cuda:0, cuda:1, etc.)')
 parser.add_argument(
     '--stable_unclip',
     type=str,
     default=None,
     required=False,
     help='Set if this is a stable unCLIP model. One of \'txt2img\' or \'img2img\'.',
 )
 parser.add_argument(
     '--stable_unclip_prior',
     type=str,
     default=None,
     required=False,
     help='Set if this is a stable unCLIP txt2img model. Selects which prior to use. If `--stable_unclip` is set to `txt2img`, the karlo prior (https://huggingface.co/kakaobrain/karlo-v1-alpha/tree/main/prior) is selected by default.',
 )
 parser.add_argument(
     '--clip_stats_path',
     type=str,
     help='Path to the clip stats file. Only required if the stable unclip model\'s config specifies `model.params.noise_aug_config.params.clip_stats_path`.',
     required=False,
 )
 parser.add_argument(
     '--controlnet', action='store_true', default=None, help='Set flag if this is a controlnet checkpoint.'
 )
 parser.add_argument('--half', action='store_true', help='Save weights in half precision.')
 parser.add_argument(
     '--vae_path',
     type=str,
     default=None,
     required=False,
     help='Set to a path, hub id to an already converted vae to not convert it again.',
 )
 lowerCamelCase				:  str    		=      parser.parse_args()

 lowerCamelCase				:  Tuple    		=      download_from_original_stable_diffusion_ckpt(
     checkpoint_path=args.checkpoint_path,
     original_config_file=args.original_config_file,
     image_size=args.image_size,
     prediction_type=args.prediction_type,
     model_type=args.pipeline_type,
     extract_ema=args.extract_ema,
     scheduler_type=args.scheduler_type,
     num_in_channels=args.num_in_channels,
     upcast_attention=args.upcast_attention,
     from_safetensors=args.from_safetensors,
     device=args.device,
     stable_unclip=args.stable_unclip,
     stable_unclip_prior=args.stable_unclip_prior,
     clip_stats_path=args.clip_stats_path,
     controlnet=args.controlnet,
     vae_path=args.vae_path,
 )

 if args.half:
  pipe.to(torch_dtype=torch.floataa)

 if args.controlnet:
  # only save the controlnet model
  pipe.controlnet.save_pretrained(args.dump_path, safe_serialization=args.to_safetensors)
 else:
  pipe.save_pretrained(args.dump_path, safe_serialization=args.to_safetensors)




