
"""simple docstring"""

from __future__ import annotations

import unittest

import numpy as np

from transformers import LayoutLMConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
      import tensorflow as tf

      from transformers.models.layoutlm.modeling_tf_layoutlm import (
          TF_LAYOUTLM_PRETRAINED_MODEL_ARCHIVE_LIST,
          TFLayoutLMForMaskedLM,
          TFLayoutLMForQuestionAnswering,
          TFLayoutLMForSequenceClassification,
          TFLayoutLMForTokenClassification,
          TFLayoutLMModel,
      )

class __lowerCAmelCase	:





     def __init__(			self			,  __UpperCAmelCase			,  __UpperCAmelCase=13			,  __UpperCAmelCase=7			,  __UpperCAmelCase=True			,  __UpperCAmelCase=True			,  __UpperCAmelCase=True			,  __UpperCAmelCase=True			,  __UpperCAmelCase=99			,  __UpperCAmelCase=32			,  __UpperCAmelCase=2			,  __UpperCAmelCase=4			,  __UpperCAmelCase=37			,  __UpperCAmelCase="gelu"			,  __UpperCAmelCase=0.1			,  __UpperCAmelCase=0.1			,  __UpperCAmelCase=512			,  __UpperCAmelCase=16			,  __UpperCAmelCase=2			,  __UpperCAmelCase=0.0_2			,  __UpperCAmelCase=3			,  __UpperCAmelCase=4			,  __UpperCAmelCase=None			,  __UpperCAmelCase=1000			,  ):

      '''simple docstring'''




      __UpperCamelCase       						= parent
      __UpperCamelCase       						= batch_size
      __UpperCamelCase       						= seq_length
      __UpperCamelCase       						= is_training
      __UpperCamelCase       						= use_input_mask
      __UpperCamelCase       						= use_token_type_ids
      __UpperCamelCase       						= use_labels
      __UpperCamelCase       						= vocab_size
      __UpperCamelCase       						= hidden_size
      __UpperCamelCase       						= num_hidden_layers
      __UpperCamelCase       						= num_attention_heads
      __UpperCamelCase       						= intermediate_size
      __UpperCamelCase       						= hidden_act
      __UpperCamelCase       						= hidden_dropout_prob
      __UpperCamelCase       						= attention_probs_dropout_prob
      __UpperCamelCase       						= max_position_embeddings
      __UpperCamelCase       						= type_vocab_size
      __UpperCamelCase       						= type_sequence_label_size
      __UpperCamelCase       						= initializer_range
      __UpperCamelCase       						= num_labels
      __UpperCamelCase       						= num_choices
      __UpperCamelCase       						= scope
      __UpperCamelCase       						= range_bbox





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= ids_tensor([self.batch_size, self.seq_length]			,  self.vocab_size   )

      # convert bbox to numpy since TF does not support item assignment
      __UpperCamelCase       						= ids_tensor([self.batch_size, self.seq_length, 4]			,  self.range_bbox   ).numpy()
      # Ensure that bbox is legal
      for i in range(bbox.shape[0]   ):
       for j in range(bbox.shape[1]   ):
        if bbox[i, j, 3] < bbox[i, j, 1]:
         __UpperCamelCase       						= bbox[i, j, 3]
         __UpperCamelCase       						= bbox[i, j, 1]
         __UpperCamelCase       						= t
        if bbox[i, j, 2] < bbox[i, j, 0]:
         __UpperCamelCase       						= bbox[i, j, 2]
         __UpperCamelCase       						= bbox[i, j, 0]
         __UpperCamelCase       						= t
      __UpperCamelCase       						= tf.convert_to_tensor(__UpperCAmelCase   )

      __UpperCamelCase       						= None
      if self.use_input_mask:
       __UpperCamelCase       						= random_attention_mask([self.batch_size, self.seq_length]   )

      __UpperCamelCase       						= None
      if self.use_token_type_ids:
       __UpperCamelCase       						= ids_tensor([self.batch_size, self.seq_length]			,  self.type_vocab_size   )

      __UpperCamelCase       						= None
      __UpperCamelCase       						= None
      __UpperCamelCase       						= None
      if self.use_labels:
       __UpperCamelCase       						= ids_tensor([self.batch_size]			,  self.type_sequence_label_size   )
       __UpperCamelCase       						= ids_tensor([self.batch_size, self.seq_length]			,  self.num_labels   )
       __UpperCamelCase       						= ids_tensor([self.batch_size]			,  self.num_choices   )

      __UpperCamelCase       						= LayoutLMConfig(
          vocab_size=self.vocab_size			,  hidden_size=self.hidden_size			,  num_hidden_layers=self.num_hidden_layers			,  num_attention_heads=self.num_attention_heads			,  intermediate_size=self.intermediate_size			,  hidden_act=self.hidden_act			,  hidden_dropout_prob=self.hidden_dropout_prob			,  attention_probs_dropout_prob=self.attention_probs_dropout_prob			,  max_position_embeddings=self.max_position_embeddings			,  type_vocab_size=self.type_vocab_size			,  initializer_range=self.initializer_range			,  )

      return config, input_ids, bbox, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels





     def 		UpperCAmelCase      (			self			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMModel(config=__UpperCAmelCase   )

      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase   )
      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase			,  token_type_ids=__UpperCAmelCase   )
      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase   )
      self.parent.assertEqual(result.last_hidden_state.shape			,  (self.batch_size, self.seq_length, self.hidden_size)   )
      self.parent.assertEqual(result.pooler_output.shape			,  (self.batch_size, self.hidden_size)   )





     def 		UpperCAmelCase      (			self			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMForMaskedLM(config=__UpperCAmelCase   )

      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase			,  labels=__UpperCAmelCase   )
      self.parent.assertEqual(result.logits.shape			,  (self.batch_size, self.seq_length, self.vocab_size)   )





     def 		UpperCAmelCase      (			self			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.num_labels
      __UpperCamelCase       						= TFLayoutLMForSequenceClassification(config=__UpperCAmelCase   )

      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase   )
      self.parent.assertEqual(result.logits.shape			,  (self.batch_size, self.num_labels)   )





     def 		UpperCAmelCase      (			self			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.num_labels
      __UpperCamelCase       						= TFLayoutLMForTokenClassification(config=__UpperCAmelCase   )

      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase			,  labels=__UpperCAmelCase   )
      self.parent.assertEqual(result.logits.shape			,  (self.batch_size, self.seq_length, self.num_labels)   )





     def 		UpperCAmelCase      (			self			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase			,  __UpperCAmelCase   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMForQuestionAnswering(config=__UpperCAmelCase   )

      __UpperCamelCase       						= model(__UpperCAmelCase			,  __UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase   )
      self.parent.assertEqual(result.start_logits.shape			,  (self.batch_size, self.seq_length)   )
      self.parent.assertEqual(result.end_logits.shape			,  (self.batch_size, self.seq_length)   )







     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.prepare_config_and_inputs()
      (
          (
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,			(
          __UpperCamelCase			
      )						,						
      )       						= config_and_inputs
      __UpperCamelCase       						= {
          'input_ids': input_ids,
          'bbox': bbox,
          'token_type_ids': token_type_ids,
          'attention_mask': input_mask,
      }
      return config, inputs_dict


@require_tf
class __lowerCAmelCase	(   __SCREAMING_SNAKE_CASE    ,						__SCREAMING_SNAKE_CASE    ,						unittest.TestCase    ):
     lowercase		     =		(
         (
             TFLayoutLMModel,
             TFLayoutLMForMaskedLM,
             TFLayoutLMForTokenClassification,
             TFLayoutLMForSequenceClassification,
             TFLayoutLMForQuestionAnswering,
         )
         if is_tf_available()
         else ()
     )
     lowercase		     =		(
         {
             "feature-extraction": TFLayoutLMModel,
             "fill-mask": TFLayoutLMForMaskedLM,
             "text-classification": TFLayoutLMForSequenceClassification,
             "token-classification": TFLayoutLMForTokenClassification,
             "zero-shot": TFLayoutLMForSequenceClassification,
         }
         if is_tf_available()
         else {}
     )
     lowercase		     =		False
     lowercase		     =		True
     lowercase		     =		10





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMModelTester(self   )
      __UpperCamelCase       						= ConfigTester(self			,  config_class=__UpperCAmelCase			,  hidden_size=37   )





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      self.config_tester.run_common_tests()





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_model(*__UpperCAmelCase   )





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_masked_lm(*__UpperCAmelCase   )





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_sequence_classification(*__UpperCAmelCase   )





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_token_classification(*__UpperCAmelCase   )





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_for_question_answering(*__UpperCAmelCase   )





     @slow
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      for model_name in TF_LAYOUTLM_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
       __UpperCamelCase       						= TFLayoutLMModel.from_pretrained(__UpperCAmelCase   )
       self.assertIsNotNone(__UpperCAmelCase   )







     @unittest.skip('Onnx compliancy broke with TF 2.10'   )
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      pass






def 							A		(       )   ->			List[Any]:
 # Here we prepare a batch of 2 sequences to test a LayoutLM forward pass on:
 # fmt: off
 __UpperCamelCase       						= tf.convert_to_tensor([[1_0_1,1_0_1_9,1_0_1_4,1_0_1_6,1_0_3_7,1_2_8_4_9,4_7_4_7,1_0_0_4,1_4_2_4_6,2_2_7_8,5_4_3_9,4_5_2_4,5_0_0_2,2_9_3_0,2_1_9_3,2_9_3_0,4_3_4_1,3_2_0_8,1_0_0_5,1_0_5_5,2_1_7_1,2_8_4_8,1_1_3_0_0,3_5_3_1,1_0_2],[1_0_1,4_0_7_0,4_0_3_4,7_0_2_0,1_0_2_4,3_0_5_8,1_0_1_5,1_0_1_3,2_8_6_1,1_0_1_3,6_0_7_0,1_9_2_7_4,2_7_7_2,6_2_0_5,2_7_8_1_4,1_6_1_4_7,1_6_1_4_7,4_3_4_3,2_0_4_7,1_0_2_8_3,1_0_9_6_9,1_4_3_8_9,1_0_1_2,2_3_3_8,1_0_2]]	)  # noqa: E231
 __UpperCamelCase       						= tf.convert_to_tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],]	)  # noqa: E231
 __UpperCamelCase       						= tf.convert_to_tensor([[[0,0,0,0],[4_2_3,2_3_7,4_4_0,2_5_1],[4_2_7,2_7_2,4_4_1,2_8_7],[4_1_9,1_1_5,4_3_7,1_2_9],[9_6_1,8_8_5,9_9_2,9_1_2],[2_5_6,3_8,3_3_0,5_8],[2_5_6,3_8,3_3_0,5_8],[3_3_6,4_2,3_5_3,5_7],[3_6_0,3_9,4_0_1,5_6],[3_6_0,3_9,4_0_1,5_6],[4_1_1,3_9,4_7_1,5_9],[4_7_9,4_1,5_2_8,5_9],[5_3_3,3_9,6_3_0,6_0],[6_7,1_1_3,1_3_4,1_3_1],[1_4_1,1_1_5,2_0_9,1_3_2],[6_8,1_4_9,1_3_3,1_6_6],[1_4_1,1_4_9,1_8_7,1_6_4],[1_9_5,1_4_8,2_8_7,1_6_5],[1_9_5,1_4_8,2_8_7,1_6_5],[1_9_5,1_4_8,2_8_7,1_6_5],[2_9_5,1_4_8,3_4_9,1_6_5],[4_4_1,1_4_9,4_9_2,1_6_6],[4_9_7,1_4_9,5_4_6,1_6_4],[6_4,2_0_1,1_2_5,2_1_8],[1_0_0_0,1_0_0_0,1_0_0_0,1_0_0_0]],[[0,0,0,0],[6_6_2,1_5_0,7_5_4,1_6_6],[6_6_5,1_9_9,7_4_2,2_1_1],[5_1_9,2_1_3,5_5_4,2_2_8],[5_1_9,2_1_3,5_5_4,2_2_8],[1_3_4,4_3_3,1_8_7,4_5_4],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[3_1_4,4_6_9,3_7_6,4_8_2],[5_0_4,6_8_4,5_8_2,7_0_6],[9_4_1,8_2_5,9_7_3,9_0_0],[9_4_1,8_2_5,9_7_3,9_0_0],[9_4_1,8_2_5,9_7_3,9_0_0],[9_4_1,8_2_5,9_7_3,9_0_0],[6_1_0,7_4_9,6_5_2,7_6_5],[1_3_0,6_5_9,1_6_8,6_7_2],[1_7_6,6_5_7,2_3_7,6_7_2],[2_3_8,6_5_7,3_1_2,6_7_2],[4_4_3,6_5_3,6_2_8,6_7_2],[4_4_3,6_5_3,6_2_8,6_7_2],[7_1_6,3_0_1,8_2_5,3_1_7],[1_0_0_0,1_0_0_0,1_0_0_0,1_0_0_0]]]	)  # noqa: E231
 __UpperCamelCase       						= tf.convert_to_tensor([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]	)  # noqa: E231
 # these are sequence labels (i.e. at the token level)
 __UpperCamelCase       						= tf.convert_to_tensor([[-1_0_0,1_0,1_0,1_0,9,1,-1_0_0,7,7,-1_0_0,7,7,4,2,5,2,8,8,-1_0_0,-1_0_0,5,0,3,2,-1_0_0],[-1_0_0,1_2,1_2,1_2,-1_0_0,1_2,1_0,-1_0_0,-1_0_0,-1_0_0,-1_0_0,1_0,1_2,9,-1_0_0,-1_0_0,-1_0_0,1_0,1_0,1_0,9,1_2,-1_0_0,1_0,-1_0_0]]	)  # noqa: E231
 # fmt: on

 return input_ids, attention_mask, bbox, token_type_ids, labels





@require_tf
class __lowerCAmelCase	(   unittest.TestCase    ):





     @slow
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMModel.from_pretrained('microsoft/layoutlm-base-uncased'   )

      __UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase       						= prepare_layoutlm_batch_inputs()

      # forward pass
      __UpperCamelCase       						= model(input_ids=__UpperCAmelCase			,  bbox=__UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase   )

      # test the sequence output on [0, :3, :3]
      __UpperCamelCase       						= tf.convert_to_tensor(
          [[0.1_7_8_5, -0.1_9_4_7, -0.0_4_2_5], [-0.3_2_5_4, -0.2_8_0_7, 0.2_5_5_3], [-0.5_3_9_1, -0.3_3_2_2, 0.3_3_6_4]]			,  )

      self.assertTrue(np.allclose(outputs.last_hidden_state[0, :3, :3]			,  __UpperCAmelCase			,  atol=1E-3   )   )

      # test the pooled output on [1, :3]
      __UpperCamelCase       						= tf.convert_to_tensor([-0.6_5_8_0, -0.0_2_1_4, 0.8_5_5_2]   )

      self.assertTrue(np.allclose(outputs.pooler_output[1, :3]			,  __UpperCAmelCase			,  atol=1E-3   )   )





     @slow
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMForSequenceClassification.from_pretrained('microsoft/layoutlm-base-uncased'			,  num_labels=2   )

      __UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase       						= prepare_layoutlm_batch_inputs()

      # forward pass
      __UpperCamelCase       						= model(
          input_ids=__UpperCAmelCase			,  bbox=__UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase			,  labels=tf.convert_to_tensor([1, 1]   )			,  )

      # test whether we get a loss as a scalar
      __UpperCamelCase       						= outputs.loss
      __UpperCamelCase       						= (2,)
      self.assertEqual(loss.shape			,  __UpperCAmelCase   )

      # test the shape of the logits
      __UpperCamelCase       						= outputs.logits
      __UpperCamelCase       						= (2, 2)
      self.assertEqual(logits.shape			,  __UpperCAmelCase   )





     @slow
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMForTokenClassification.from_pretrained('microsoft/layoutlm-base-uncased'			,  num_labels=13   )

      __UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase       						= prepare_layoutlm_batch_inputs()

      # forward pass
      __UpperCamelCase       						= model(
          input_ids=__UpperCAmelCase			,  bbox=__UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase			,  labels=__UpperCAmelCase   )

      # test the shape of the logits
      __UpperCamelCase       						= outputs.logits
      __UpperCamelCase       						= tf.convert_to_tensor((2, 25, 13)   )
      self.assertEqual(logits.shape			,  __UpperCAmelCase   )







     @slow
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= TFLayoutLMForQuestionAnswering.from_pretrained('microsoft/layoutlm-base-uncased'   )

      __UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase       						= prepare_layoutlm_batch_inputs()

      # forward pass
      __UpperCamelCase       						= model(input_ids=__UpperCAmelCase			,  bbox=__UpperCAmelCase			,  attention_mask=__UpperCAmelCase			,  token_type_ids=__UpperCAmelCase   )

      # test the shape of the logits
      __UpperCamelCase       						= tf.convert_to_tensor((2, 25)   )
      self.assertEqual(outputs.start_logits.shape			,  __UpperCAmelCase   )
      self.assertEqual(outputs.end_logits.shape			,  __UpperCAmelCase   )







"""simple docstring"""

import gc
import random
import unittest

import numpy as np
import torch
from PIL import Image
from transformers import XLMRobertaTokenizerFast

from diffusers import DDIMScheduler, KandinskyInpaintPipeline, KandinskyPriorPipeline, UNetaDConditionModel, VQModel
from diffusers.pipelines.kandinsky.text_encoder import MCLIPConfig, MultilingualCLIP
from diffusers.utils import floats_tensor, load_image, load_numpy, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu

from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference


enable_full_determinism()

class __lowerCAmelCase	(   __SCREAMING_SNAKE_CASE    ,						unittest.TestCase    ):
     lowercase		     =		KandinskyInpaintPipeline
     lowercase		     =		["prompt", "image_embeds", "negative_image_embeds", "image", "mask_image"]
     lowercase		     =		[
         "prompt",
         "negative_prompt",
         "image_embeds",
         "negative_image_embeds",
         "image",
         "mask_image",
     ]
     lowercase		     =		[
         "generator",
         "height",
         "width",
         "latents",
         "guidance_scale",
         "negative_prompt",
         "num_inference_steps",
         "return_dict",
         "guidance_scale",
         "num_images_per_prompt",
         "output_type",
         "return_dict",
     ]
     lowercase		     =		False





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      return 32





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      return 32





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      return self.time_input_dim





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      return self.time_input_dim * 4





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      return 100





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= XLMRobertaTokenizerFast.from_pretrained('YiYiXu/tiny-random-mclip-base'   )
      return tokenizer





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      torch.manual_seed(0   )
      __UpperCamelCase       						= MCLIPConfig(
          numDims=self.cross_attention_dim			,  transformerDimensions=self.text_embedder_hidden_size			,  hidden_size=self.text_embedder_hidden_size			,  intermediate_size=37			,  num_attention_heads=4			,  num_hidden_layers=5			,  vocab_size=1005			,  )

      __UpperCamelCase       						= MultilingualCLIP(__UpperCAmelCase   )
      __UpperCamelCase       						= text_encoder.eval()

      return text_encoder





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      torch.manual_seed(0   )

      __UpperCamelCase       						= {
          'in_channels': 9,
          # Out channels is double in channels because predicts mean and variance
          'out_channels': 8,
          'addition_embed_type': 'text_image',
          'down_block_types': ('ResnetDownsampleBlock2D', 'SimpleCrossAttnDownBlock2D'),
          'up_block_types': ('SimpleCrossAttnUpBlock2D', 'ResnetUpsampleBlock2D'),
          'mid_block_type': 'UNetMidBlock2DSimpleCrossAttn',
          'block_out_channels': (self.block_out_channels_a, self.block_out_channels_a * 2),
          'layers_per_block': 1,
          'encoder_hid_dim': self.text_embedder_hidden_size,
          'encoder_hid_dim_type': 'text_image_proj',
          'cross_attention_dim': self.cross_attention_dim,
          'attention_head_dim': 4,
          'resnet_time_scale_shift': 'scale_shift',
          'class_embed_type': None,
      }

      __UpperCamelCase       						= UNetaDConditionModel(**__UpperCAmelCase   )
      return model





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      return {
          "block_out_channels": [32, 64],
          "down_block_types": ["DownEncoderBlock2D", "AttnDownEncoderBlock2D"],
          "in_channels": 3,
          "latent_channels": 4,
          "layers_per_block": 1,
          "norm_num_groups": 8,
          "norm_type": "spatial",
          "num_vq_embeddings": 12,
          "out_channels": 3,
          "up_block_types": [
              "AttnUpDecoderBlock2D",
              "UpDecoderBlock2D",
          ],
          "vq_embed_dim": 4,
      }





     @property
     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      torch.manual_seed(0   )
      __UpperCamelCase       						= VQModel(**self.dummy_movq_kwargs   )
      return model





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= self.dummy_text_encoder
      __UpperCamelCase       						= self.dummy_tokenizer
      __UpperCamelCase       						= self.dummy_unet
      __UpperCamelCase       						= self.dummy_movq

      __UpperCamelCase       						= DDIMScheduler(
          num_train_timesteps=1000			,  beta_schedule='linear'			,  beta_start=0.0_0_0_8_5			,  beta_end=0.0_1_2			,  clip_sample=__UpperCAmelCase			,  set_alpha_to_one=__UpperCAmelCase			,  steps_offset=1			,  prediction_type='epsilon'			,  thresholding=__UpperCAmelCase			,  )

      __UpperCamelCase       						= {
          'text_encoder': text_encoder,
          'tokenizer': tokenizer,
          'unet': unet,
          'scheduler': scheduler,
          'movq': movq,
      }

      return components





     def 		UpperCAmelCase      (			self			,  __UpperCAmelCase			,  __UpperCAmelCase=0   ):

      '''simple docstring'''




      __UpperCamelCase       						= floats_tensor((1, self.cross_attention_dim)			,  rng=random.Random(__UpperCAmelCase   )   ).to(__UpperCAmelCase   )
      __UpperCamelCase       						= floats_tensor((1, self.cross_attention_dim)			,  rng=random.Random(seed + 1   )   ).to(__UpperCAmelCase   )
      # create init_image
      __UpperCamelCase       						= floats_tensor((1, 3, 64, 64)			,  rng=random.Random(__UpperCAmelCase   )   ).to(__UpperCAmelCase   )
      __UpperCamelCase       						= image.cpu().permute(0			,  2			,  3			,  1   )[0]
      __UpperCamelCase       						= Image.fromarray(np.uinta(__UpperCAmelCase   )   ).convert('RGB'   ).resize((256, 256)   )
      # create mask
      __UpperCamelCase       						= np.ones((64, 64)			,  dtype=np.floataa   )
      __UpperCamelCase       						= 0

      if str(__UpperCAmelCase   ).startswith('mps'   ):
       __UpperCamelCase       						= torch.manual_seed(__UpperCAmelCase   )
      else:
       __UpperCamelCase       						= torch.Generator(device=__UpperCAmelCase   ).manual_seed(__UpperCAmelCase   )
      __UpperCamelCase       						= {
          'prompt': 'horse',
          'image': init_image,
          'mask_image': mask,
          'image_embeds': image_embeds,
          'negative_image_embeds': negative_image_embeds,
          'generator': generator,
          'height': 64,
          'width': 64,
          'num_inference_steps': 2,
          'guidance_scale': 4.0,
          'output_type': 'np',
      }
      return inputs





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= 'cpu'

      __UpperCamelCase       						= self.get_dummy_components()

      __UpperCamelCase       						= self.pipeline_class(**__UpperCAmelCase   )
      __UpperCamelCase       						= pipe.to(__UpperCAmelCase   )

      pipe.set_progress_bar_config(disable=__UpperCAmelCase   )

      __UpperCamelCase       						= pipe(**self.get_dummy_inputs(__UpperCAmelCase   )   )
      __UpperCamelCase       						= output.images

      __UpperCamelCase       						= pipe(
          **self.get_dummy_inputs(__UpperCAmelCase   )			,  return_dict=__UpperCAmelCase			,  )[0]

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

      print(F'image.shape {image.shape}'   )

      assert image.shape == (1, 64, 64, 3)

      __UpperCamelCase       						= np.array(
          [0.8_3_2_6_9_1_9, 0.7_3_7_9_0_4_6_7, 0.2_0_9_1_8_5_8_1, 0.9_3_0_9_6_1_2, 0.5_5_1_1_7_9_1, 0.4_3_7_1_3_3_2_8, 0.5_5_1_3_3_2_1, 0.4_9_9_2_2_9_3_4, 0.5_9_4_9_7_7_8_6]   )

      assert (
          np.abs(image_slice.flatten() - expected_slice   ).max() < 1E-2
      ), F' expected_slice {expected_slice}, but got {image_slice.flatten()}'
      assert (
          np.abs(image_from_tuple_slice.flatten() - expected_slice   ).max() < 1E-2
      ), F' expected_slice {expected_slice}, but got {image_from_tuple_slice.flatten()}'







     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      super().test_inference_batch_single_identical(expected_max_diff=3E-3   )


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





     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      super().tearDown()
      gc.collect()
      torch.cuda.empty_cache()







     def 		UpperCAmelCase      (			self   ):

      '''simple docstring'''




      __UpperCamelCase       						= load_numpy(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'
          '/kandinsky/kandinsky_inpaint_cat_with_hat_fp16.npy'   )

      __UpperCamelCase       						= load_image(
          'https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main' '/kandinsky/cat.png'   )
      __UpperCamelCase       						= np.ones((768, 768)			,  dtype=np.floataa   )
      __UpperCamelCase       						= 0

      __UpperCamelCase       						= 'a hat'

      __UpperCamelCase       						= KandinskyPriorPipeline.from_pretrained(
          'kandinsky-community/kandinsky-2-1-prior'			,  torch_dtype=torch.floataa   )
      pipe_prior.to(__UpperCAmelCase   )

      __UpperCamelCase       						= KandinskyInpaintPipeline.from_pretrained(
          'kandinsky-community/kandinsky-2-1-inpaint'			,  torch_dtype=torch.floataa   )
      __UpperCamelCase       						= pipeline.to(__UpperCAmelCase   )
      pipeline.set_progress_bar_config(disable=__UpperCAmelCase   )

      __UpperCamelCase       						= torch.Generator(device='cpu'   ).manual_seed(0   )
      __UpperCamelCase						,			__UpperCamelCase       						= pipe_prior(
          __UpperCAmelCase			,  generator=__UpperCAmelCase			,  num_inference_steps=5			,  negative_prompt=''			,  ).to_tuple()

      __UpperCamelCase       						= pipeline(
          __UpperCAmelCase			,  image=__UpperCAmelCase			,  mask_image=__UpperCAmelCase			,  image_embeds=__UpperCAmelCase			,  negative_image_embeds=__UpperCAmelCase			,  generator=__UpperCAmelCase			,  num_inference_steps=100			,  height=768			,  width=768			,  output_type='np'			,  )

      __UpperCamelCase       						= output.images[0]

      assert image.shape == (768, 768, 3)

      assert_mean_pixel_difference(__UpperCAmelCase			,  __UpperCAmelCase   )



