





import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel

from diffusers import DDIMScheduler, LDMPipeline, UNetaDModel, VQModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch, slow, torch_device


enable_full_determinism()

class 	A_       (unittest.TestCase			):
	@property
	def      _lowercase				(    self		):






				'''simple docstring'''







				torch.manual_seed(0		)
				UpperCAmelCase   		=				UNetaDModel(
				    block_out_channels=(3_2, 6_4)							,					layers_per_block=2							,					sample_size=3_2							,					in_channels=3							,					out_channels=3							,					down_block_types=('''DownBlock2D''', '''AttnDownBlock2D''')							,					up_block_types=('''AttnUpBlock2D''', '''UpBlock2D''')							,					)
				return model
	@property
	def      _lowercase				(    self		):






				'''simple docstring'''







				torch.manual_seed(0		)
				UpperCAmelCase   		=				VQModel(
				    block_out_channels=[3_2, 6_4]							,					in_channels=3							,					out_channels=3							,					down_block_types=['''DownEncoderBlock2D''', '''DownEncoderBlock2D''']							,					up_block_types=['''UpDecoderBlock2D''', '''UpDecoderBlock2D''']							,					latent_channels=3							,					)
				return model
	@property
	def      _lowercase				(    self		):






				'''simple docstring'''







				torch.manual_seed(0		)
				UpperCAmelCase   		=				CLIPTextConfig(
				    bos_token_id=0							,					eos_token_id=2							,					hidden_size=3_2							,					intermediate_size=3_7							,					layer_norm_eps=1E-05							,					num_attention_heads=4							,					num_hidden_layers=5							,					pad_token_id=1							,					vocab_size=1_0_0_0							,					)
				return CLIPTextModel(_A		)







	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				self.dummy_uncond_unet
				UpperCAmelCase   		=				DDIMScheduler()
				UpperCAmelCase   		=				self.dummy_vq_model

				UpperCAmelCase   		=				LDMPipeline(unet=_A							,					vqvae=_A							,					scheduler=_A		)
				ldm.to(_A		)
				ldm.set_progress_bar_config(disable=_A		)

				UpperCAmelCase   		=				torch.manual_seed(0		)
				UpperCAmelCase   		=				ldm(generator=_A							,					num_inference_steps=2							,					output_type='''numpy'''		).images

				UpperCAmelCase   		=				torch.manual_seed(0		)
				UpperCAmelCase   		=				ldm(generator=_A							,					num_inference_steps=2							,					output_type='''numpy'''							,					return_dict=_A		)[0]

				UpperCAmelCase   		=				image[0, -3:, -3:, -1]
				UpperCAmelCase   		=				image_from_tuple[0, -3:, -3:, -1]

				assert image.shape == (1, 6_4, 6_4, 3)
				UpperCAmelCase   		=				np.array([0.85_12, 0.8_18, 0.64_11, 0.68_08, 0.44_65, 0.56_18, 0.46, 0.62_31, 0.51_72]		)
				UpperCAmelCase   		=				1E-2 if torch_device != """mps""" else 3E-2

				assert np.abs(image_slice.flatten() - expected_slice		).max() < tolerance
				assert np.abs(image_from_tuple_slice.flatten() - expected_slice		).max() < tolerance

@slow
@require_torch
class 	A_       (unittest.TestCase			):
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				LDMPipeline.from_pretrained('''CompVis/ldm-celebahq-256'''		)
				ldm.to(_A		)
				ldm.set_progress_bar_config(disable=_A		)

				UpperCAmelCase   		=				torch.manual_seed(0		)
				UpperCAmelCase   		=				ldm(generator=_A							,					num_inference_steps=5							,					output_type='''numpy'''		).images

				UpperCAmelCase   		=				image[0, -3:, -3:, -1]

				assert image.shape == (1, 2_5_6, 2_5_6, 3)
				UpperCAmelCase   		=				np.array([0.43_99, 0.4_49_75, 0.4_68_25, 0.4_74, 0.43_59, 0.45_81, 0.4_50_95, 0.43_41, 0.44_47]		)
				UpperCAmelCase   		=				1E-2 if torch_device != """mps""" else 3E-2

				assert np.abs(image_slice.flatten() - expected_slice		).max() < tolerance





from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


lowercase  :					str						    =							{
    """configuration_funnel""": ["""FUNNEL_PRETRAINED_CONFIG_ARCHIVE_MAP""", """FunnelConfig"""],
    """convert_funnel_original_tf_checkpoint_to_pytorch""": [],
    """tokenization_funnel""": ["""FunnelTokenizer"""],
}

try:
  if not is_tokenizers_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  lowercase  :					Tuple						    =							["""FunnelTokenizerFast"""]

try:
  if not is_torch_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  lowercase  :					List[str]						    =							[
      """FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST""",
      """FunnelBaseModel""",
      """FunnelForMaskedLM""",
      """FunnelForMultipleChoice""",
      """FunnelForPreTraining""",
      """FunnelForQuestionAnswering""",
      """FunnelForSequenceClassification""",
      """FunnelForTokenClassification""",
      """FunnelModel""",
      """FunnelPreTrainedModel""",
      """load_tf_weights_in_funnel""",
  ]

try:
  if not is_tf_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  lowercase  :					Optional[Any]						    =							[
      """TF_FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST""",
      """TFFunnelBaseModel""",
      """TFFunnelForMaskedLM""",
      """TFFunnelForMultipleChoice""",
      """TFFunnelForPreTraining""",
      """TFFunnelForQuestionAnswering""",
      """TFFunnelForSequenceClassification""",
      """TFFunnelForTokenClassification""",
      """TFFunnelModel""",
      """TFFunnelPreTrainedModel""",
  ]


if TYPE_CHECKING:
  from .configuration_funnel import FUNNEL_PRETRAINED_CONFIG_ARCHIVE_MAP, FunnelConfig
  from .tokenization_funnel import FunnelTokenizer

  try:
    if not is_tokenizers_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .tokenization_funnel_fast import FunnelTokenizerFast

  try:
    if not is_torch_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_funnel import (
        FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST,
        FunnelBaseModel,
        FunnelForMaskedLM,
        FunnelForMultipleChoice,
        FunnelForPreTraining,
        FunnelForQuestionAnswering,
        FunnelForSequenceClassification,
        FunnelForTokenClassification,
        FunnelModel,
        FunnelPreTrainedModel,
        load_tf_weights_in_funnel,
    )

  try:
    if not is_tf_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_tf_funnel import (
        TF_FUNNEL_PRETRAINED_MODEL_ARCHIVE_LIST,
        TFFunnelBaseModel,
        TFFunnelForMaskedLM,
        TFFunnelForMultipleChoice,
        TFFunnelForPreTraining,
        TFFunnelForQuestionAnswering,
        TFFunnelForSequenceClassification,
        TFFunnelForTokenClassification,
        TFFunnelModel,
        TFFunnelPreTrainedModel,
    )

else:
  import sys

  lowercase  :					Any						    =							_LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)
