"""simple docstring"""





import gc
import random
import unittest

import numpy as np
import torch
from transformers import CLIPImageProcessor, CLIPVisionConfig, CLIPVisionModel

from diffusers import HeunDiscreteScheduler, PriorTransformer, ShapEImgaImgPipeline
from diffusers.pipelines.shap_e import ShapERenderer
from diffusers.utils import floats_tensor, load_image, load_numpy, slow
from diffusers.utils.testing_utils import require_torch_gpu, torch_device

from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference
class 			_snake_case  (       __A					,			unittest.TestCase		):
						snake_case__      	=      ShapEImgaImgPipeline
						snake_case__      	=      ["image"]
						snake_case__      	=      ["image"]
						snake_case__      	=      [
						    "num_images_per_prompt",
						    "num_inference_steps",
						    "generator",
						    "latents",
						    "guidance_scale",
						    "frame_size",
						    "output_type",
						    "return_dict",
						]
						snake_case__      	=      False






						@property
						def    lowerCamelCase__  (							self   :      Any     ):
													return 32






						@property
						def    lowerCamelCase__  (							self   :      Optional[int]     ):
													return 32






						@property
						def    lowerCamelCase__  (							self   :      str     ):
													return self.time_input_dim * 4






						@property
						def    lowerCamelCase__  (							self   :      Any     ):
													return 8






						@property
						def    lowerCamelCase__  (							self   :      Union[str, Any]     ):
													torch.manual_seed(0     )
													__lowerCamelCase       :		List[Any]		 =  CLIPVisionConfig(
													    hidden_size=self.text_embedder_hidden_size				,       image_size=64				,       projection_dim=self.text_embedder_hidden_size				,       intermediate_size=37				,       num_attention_heads=4				,       num_channels=3				,       num_hidden_layers=5				,       patch_size=1				,       )

													__lowerCamelCase       :		Optional[int]		 =  CLIPVisionModel(UpperCAmelCase     )
													return model






						@property
						def    lowerCamelCase__  (							self   :      Dict     ):
													__lowerCamelCase       :		Dict		 =  CLIPImageProcessor(
													    crop_size=224				,       do_center_crop=UpperCAmelCase				,       do_normalize=UpperCAmelCase				,       do_resize=UpperCAmelCase				,       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=224				,       )

													return image_processor






						@property
						def    lowerCamelCase__  (							self   :      str     ):
													torch.manual_seed(0     )

													__lowerCamelCase       :		Union[str, Any]		 =  {
													    '''num_attention_heads''': 2,
													    '''attention_head_dim''': 16,
													    '''embedding_dim''': self.time_input_dim,
													    '''num_embeddings''': 32,
													    '''embedding_proj_dim''': self.text_embedder_hidden_size,
													    '''time_embed_dim''': self.time_embed_dim,
													    '''num_layers''': 1,
													    '''clip_embed_dim''': self.time_input_dim * 2,
													    '''additional_embeddings''': 0,
													    '''time_embed_act_fn''': '''gelu''',
													    '''norm_in_type''': '''layer''',
													    '''embedding_proj_norm_type''': '''layer''',
													    '''encoder_hid_proj_type''': None,
													    '''added_emb_type''': None,
													}

													__lowerCamelCase       :		Any		 =  PriorTransformer(**UpperCAmelCase     )
													return model






						@property
						def    lowerCamelCase__  (							self   :      Optional[Any]     ):
													torch.manual_seed(0     )

													__lowerCamelCase       :		List[str]		 =  {
													    '''param_shapes''': (
													        (self.renderer_dim, 93),
													        (self.renderer_dim, 8),
													        (self.renderer_dim, 8),
													        (self.renderer_dim, 8),
													    ),
													    '''d_latent''': self.time_input_dim,
													    '''d_hidden''': self.renderer_dim,
													    '''n_output''': 12,
													    '''background''': (
													        0.1,
													        0.1,
													        0.1,
													    ),
													}
													__lowerCamelCase       :		Optional[int]		 =  ShapERenderer(**UpperCAmelCase     )
													return model






						def    lowerCamelCase__  (							self   :      Union[str, Any]     ):
													__lowerCamelCase       :		str		 =  self.dummy_prior
													__lowerCamelCase       :		List[str]		 =  self.dummy_image_encoder
													__lowerCamelCase       :		str		 =  self.dummy_image_processor
													__lowerCamelCase       :		Dict		 =  self.dummy_renderer

													__lowerCamelCase       :		Optional[Any]		 =  HeunDiscreteScheduler(
													    beta_schedule="exp"				,       num_train_timesteps=1024				,       prediction_type="sample"				,       use_karras_sigmas=UpperCAmelCase				,       clip_sample=UpperCAmelCase				,       clip_sample_range=1.0				,       )
													__lowerCamelCase       :		Any		 =  {
													    '''prior''': prior,
													    '''image_encoder''': image_encoder,
													    '''image_processor''': image_processor,
													    '''renderer''': renderer,
													    '''scheduler''': scheduler,
													}

													return components






						def    lowerCamelCase__  (							self   :      Optional[Any]				,       UpperCAmelCase   :      Union[str, Any]				,       UpperCAmelCase   :      List[str]=0     ):
													__lowerCamelCase       :		List[str]		 =  floats_tensor((1, 3, 64, 64)				,       rng=random.Random(UpperCAmelCase     )     ).to(UpperCAmelCase     )

													if str(UpperCAmelCase     ).startswith("mps"     ):
																				__lowerCamelCase       :		str		 =  torch.manual_seed(UpperCAmelCase     )
													else:
																				__lowerCamelCase       :		Tuple		 =  torch.Generator(device=UpperCAmelCase     ).manual_seed(UpperCAmelCase     )
													__lowerCamelCase       :		List[str]		 =  {
													    '''image''': input_image,
													    '''generator''': generator,
													    '''num_inference_steps''': 1,
													    '''frame_size''': 32,
													    '''output_type''': '''np''',
													}
													return inputs






						def    lowerCamelCase__  (							self   :      Dict     ):
													__lowerCamelCase       :		List[str]		 =  '''cpu'''

													__lowerCamelCase       :		Optional[int]		 =  self.get_dummy_components()

													__lowerCamelCase       :		List[Any]		 =  self.pipeline_class(**UpperCAmelCase     )
													__lowerCamelCase       :		Tuple		 =  pipe.to(UpperCAmelCase     )

													pipe.set_progress_bar_config(disable=UpperCAmelCase     )

													__lowerCamelCase       :		Tuple		 =  pipe(**self.get_dummy_inputs(UpperCAmelCase     )     )
													__lowerCamelCase       :		Tuple		 =  output.images[0]
													__lowerCamelCase       :		int		 =  image[0, -3:, -3:, -1]

													assert image.shape == (20, 32, 32, 3)

													__lowerCamelCase       :		Tuple		 =  np.array(
													    [
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													        0.0_0_0_3_9_2_1_6,
													    ]     )

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






						def    lowerCamelCase__  (							self   :      Tuple     ):
													self._test_inference_batch_consistent(batch_sizes=[1, 2]     )






						def    lowerCamelCase__  (							self   :      Dict     ):
													__lowerCamelCase       :		Tuple		 =  torch_device == '''cpu'''
													__lowerCamelCase       :		List[str]		 =  True
													self._test_inference_batch_single_identical(
													    batch_size=2				,       test_max_difference=UpperCAmelCase				,       relax_max_difference=UpperCAmelCase				,       )







						def    lowerCamelCase__  (							self   :      List[str]     ):
													__lowerCamelCase       :		List[Any]		 =  self.get_dummy_components()
													__lowerCamelCase       :		Optional[int]		 =  self.pipeline_class(**UpperCAmelCase     )
													__lowerCamelCase       :		Optional[Any]		 =  pipe.to(UpperCAmelCase     )
													pipe.set_progress_bar_config(disable=UpperCAmelCase     )

													__lowerCamelCase       :		Optional[Any]		 =  1
													__lowerCamelCase       :		Optional[int]		 =  2

													__lowerCamelCase       :		Tuple		 =  self.get_dummy_inputs(UpperCAmelCase     )

													for key in inputs.keys():
																				if key in self.batch_params:
																											__lowerCamelCase       :		Any		 =  batch_size * [inputs[key]]

													__lowerCamelCase       :		List[Any]		 =  pipe(**UpperCAmelCase				,       num_images_per_prompt=UpperCAmelCase     )[0]

													assert images.shape[0] == batch_size * num_images_per_prompt

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






						def    lowerCamelCase__  (							self   :      List[Any]     ):
													super().tearDown()
													gc.collect()
													torch.cuda.empty_cache()







						def    lowerCamelCase__  (							self   :      str     ):
													__lowerCamelCase       :		Tuple		 =  load_image(
													    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main" "/shap_e/corgi.png"     )
													__lowerCamelCase       :		List[Any]		 =  load_numpy(
													    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
													    "/shap_e/test_shap_e_img2img_out.npy"     )
													__lowerCamelCase       :		int		 =  ShapEImgaImgPipeline.from_pretrained("openai/shap-e-img2img"     )
													__lowerCamelCase       :		str		 =  pipe.to(UpperCAmelCase     )
													pipe.set_progress_bar_config(disable=UpperCAmelCase     )

													__lowerCamelCase       :		Tuple		 =  torch.Generator(device=UpperCAmelCase     ).manual_seed(0     )

													__lowerCamelCase       :		Optional[Any]		 =  pipe(
													    UpperCAmelCase				,       generator=UpperCAmelCase				,       guidance_scale=3.0				,       num_inference_steps=64				,       frame_size=64				,       output_type="np"				,       ).images[0]

													assert images.shape == (20, 64, 64, 3)

													assert_mean_pixel_difference(UpperCAmelCase				,       UpperCAmelCase     )







'''simple docstring'''



from .constants import (
    MODEL_NAME,
    OPTIMIZER_NAME,
    RNG_STATE_NAME,
    SAFE_WEIGHTS_INDEX_NAME,
    SAFE_WEIGHTS_NAME,
    SCALER_NAME,
    SCHEDULER_NAME,
    TORCH_LAUNCH_PARAMS,
    WEIGHTS_INDEX_NAME,
    WEIGHTS_NAME,
)
from .dataclasses import (
    BnbQuantizationConfig,
    ComputeEnvironment,
    CustomDtype,
    DeepSpeedPlugin,
    DistributedDataParallelKwargs,
    DistributedType,
    DynamoBackend,
    FPaRecipeKwargs,
    FullyShardedDataParallelPlugin,
    GradientAccumulationPlugin,
    GradScalerKwargs,
    InitProcessGroupKwargs,
    KwargsHandler,
    LoggerType,
    MegatronLMPlugin,
    PrecisionType,
    ProjectConfiguration,
    RNGType,
    SageMakerDistributedType,
    TensorInformation,
    TorchDynamoPlugin,
)
from .environment import get_int_from_env, parse_choice_from_env, parse_flag_from_env
from .imports import (
    get_ccl_version,
    is_abit_bnb_available,
    is_abit_bnb_available,
    is_aim_available,
    is_bfaa_available,
    is_bnb_available,
    is_botoa_available,
    is_ccl_available,
    is_comet_ml_available,
    is_datasets_available,
    is_deepspeed_available,
    is_fpa_available,
    is_ipex_available,
    is_megatron_lm_available,
    is_mlflow_available,
    is_mps_available,
    is_npu_available,
    is_rich_available,
    is_safetensors_available,
    is_sagemaker_available,
    is_tensorboard_available,
    is_tpu_available,
    is_transformers_available,
    is_wandb_available,
    is_xpu_available,
)
from .modeling import (
    check_device_map,
    check_tied_parameters_in_config,
    check_tied_parameters_on_same_device,
    compute_module_sizes,
    convert_file_size_to_int,
    dtype_byte_size,
    find_tied_parameters,
    get_balanced_memory,
    get_max_layer_size,
    get_max_memory,
    get_mixed_precision_context_manager,
    id_tensor_storage,
    infer_auto_device_map,
    load_checkpoint_in_model,
    load_offloaded_weights,
    load_state_dict,
    named_module_tensors,
    retie_parameters,
    set_module_tensor_to_device,
    shard_checkpoint,
)
from .offload import (
    OffloadedWeightsLoader,
    PrefixedDataset,
    extract_submodules_state_dict,
    load_offloaded_weight,
    offload_state_dict,
    offload_weight,
    save_offload_index,
)
from .operations import (
    broadcast,
    broadcast_object_list,
    concatenate,
    convert_outputs_to_fpaa,
    convert_to_fpaa,
    find_batch_size,
    find_device,
    gather,
    gather_object,
    get_data_structure,
    honor_type,
    initialize_tensors,
    is_namedtuple,
    is_tensor_information,
    is_torch_tensor,
    listify,
    pad_across_processes,
    recursively_apply,
    reduce,
    send_to_device,
    slice_tensors,
)
from .versions import compare_versions, is_torch_version


if is_deepspeed_available():
      from .deepspeed import (
          DeepSpeedEngineWrapper,
          DeepSpeedOptimizerWrapper,
          DeepSpeedSchedulerWrapper,
          DummyOptim,
          DummyScheduler,
          HfDeepSpeedConfig,
      )

from .bnb import has_abit_bnb_layers, load_and_quantize_model
from .fsdp_utils import load_fsdp_model, load_fsdp_optimizer, save_fsdp_model, save_fsdp_optimizer
from .launch import (
    PrepareForLaunch,
    _filter_args,
    prepare_deepspeed_cmd_env,
    prepare_multi_gpu_env,
    prepare_sagemager_args_inputs,
    prepare_simple_launcher_cmd_env,
    prepare_tpu,
)
from .megatron_lm import (
    AbstractTrainStep,
    BertTrainStep,
    GPTTrainStep,
    MegatronEngine,
    MegatronLMDummyDataLoader,
    MegatronLMDummyScheduler,
    MegatronLMOptimizerWrapper,
    MegatronLMSchedulerWrapper,
    TaTrainStep,
    avg_losses_across_data_parallel_group,
    gather_across_data_parallel_groups,
)
from .megatron_lm import initialize as megatron_lm_initialize
from .megatron_lm import prepare_data_loader as megatron_lm_prepare_data_loader
from .megatron_lm import prepare_model as megatron_lm_prepare_model
from .megatron_lm import prepare_optimizer as megatron_lm_prepare_optimizer
from .megatron_lm import prepare_scheduler as megatron_lm_prepare_scheduler
from .memory import find_executable_batch_size, release_memory
from .other import (
    extract_model_from_parallel,
    get_pretty_name,
    is_port_in_use,
    merge_dicts,
    patch_environment,
    save,
    wait_for_everyone,
    write_basic_config,
)
from .random import set_seed, synchronize_rng_state, synchronize_rng_states
from .torch_xla import install_xla
from .tqdm import tqdm
from .transformer_engine import convert_model, has_transformer_engine_layers



