'''simple docstring'''




import importlib
import inspect
import json
import os
import re
import shutil
import sys
from pathlib import Path
from typing import Dict, Optional, Union
from urllib import request

from huggingface_hub import HfFolder, cached_download, hf_hub_download, model_info
from packaging import version

from .. import __version__
from . import DIFFUSERS_DYNAMIC_MODULE_NAME, HF_MODULES_CACHE, logging


__SCREAMING_SNAKE_CASE       :     Dict     =  (
    """https://raw.githubusercontent.com/huggingface/diffusers/{revision}/examples/community/{pipeline}.py"""
)


__SCREAMING_SNAKE_CASE       :     List[Any]     =  logging.get_logger(__name__)  # pylint: disable=invalid-name

def 	UpperCamelCase_							(					)    ->    Optional[int]:


       """simple docstring"""







       _UpperCAmelCase     :  int							      =    "https://pypi.org/pypi/diffusers/json"
       _UpperCAmelCase     :  Optional[int]							      =    json.loads(request.urlopen(_UpperCAmelCase    ).read()    )["releases"].keys()
       return sorted(_UpperCAmelCase			,	key=lambda _UpperCAmelCase    : version.Version(_UpperCAmelCase    )    )

def 	UpperCamelCase_							(					)    ->    List[Any]:


       """simple docstring"""







       if HF_MODULES_CACHE in sys.path:
              return

       sys.path.append(_UpperCAmelCase    )
       os.makedirs(_UpperCAmelCase			,	exist_ok=_UpperCAmelCase    )
       _UpperCAmelCase     :  List[Any]							      =    Path(_UpperCAmelCase    ) / "__init__.py"
       if not init_path.exists():
              init_path.touch()

def 	UpperCamelCase_							(					_UpperCAmelCase  :      Union[str, os.PathLike]    )    ->    List[str]:


       """simple docstring"""







       init_hf_modules()
       _UpperCAmelCase     :  List[Any]							      =    Path(_UpperCAmelCase    ) / name
       # If the parent module does not exist yet, recursively create it.
       if not dynamic_module_path.parent.exists():
              create_dynamic_module(dynamic_module_path.parent    )
       os.makedirs(_UpperCAmelCase			,	exist_ok=_UpperCAmelCase    )
       _UpperCAmelCase     :  str							      =    dynamic_module_path / "__init__.py"
       if not init_path.exists():
              init_path.touch()

def 	UpperCamelCase_							(					_UpperCAmelCase  :      Optional[Any]    )    ->    Dict:


       """simple docstring"""







       with open(_UpperCAmelCase			,	"r"			,	encoding="utf-8"    ) as f:
              _UpperCAmelCase     :  Optional[int]							      =    f.read()

       # Imports of the form `import .xxx`
       _UpperCAmelCase     :  str							      =    re.findall("^\s*import\s+\.(\S+)\s*$"			,	_UpperCAmelCase			,	flags=re.MULTILINE    )
       # Imports of the form `from .xxx import yyy`
       relative_imports += re.findall("^\s*from\s+\.(\S+)\s+import"			,	_UpperCAmelCase			,	flags=re.MULTILINE    )
       # Unique-ify
       return list(set(_UpperCAmelCase    )    )

def 	UpperCamelCase_							(					_UpperCAmelCase  :      Optional[int]    )    ->    Any:


       """simple docstring"""







       _UpperCAmelCase     :  Optional[Any]							      =    False
       _UpperCAmelCase     :  Dict							      =    [module_file]
       _UpperCAmelCase     :  Optional[int]							      =    []

       # Let's recurse through all relative imports
       while not no_change:
              _UpperCAmelCase     :  List[str]							      =    []
              for f in files_to_check:
                     new_imports.extend(get_relative_imports(_UpperCAmelCase    )    )

              _UpperCAmelCase     :  str							      =    Path(_UpperCAmelCase    ).parent
              _UpperCAmelCase     :  Optional[Any]							      =    [str(module_path / m    ) for m in new_imports]
              _UpperCAmelCase     :  List[Any]							      =    [f for f in new_import_files if f not in all_relative_imports]
              _UpperCAmelCase     :  Tuple							      =    [F"""{f}.py""" for f in new_import_files]

              _UpperCAmelCase     :  Tuple							      =    len(_UpperCAmelCase    ) == 0
              all_relative_imports.extend(_UpperCAmelCase    )

       return all_relative_imports

def 	UpperCamelCase_							(					_UpperCAmelCase  :      Union[str, Any]    )    ->    Optional[int]:


       """simple docstring"""







       with open(_UpperCAmelCase			,	"r"			,	encoding="utf-8"    ) as f:
              _UpperCAmelCase     :  Optional[Any]							      =    f.read()

       # Imports of the form `import xxx`
       _UpperCAmelCase     :  List[Any]							      =    re.findall("^\s*import\s+(\S+)\s*$"			,	_UpperCAmelCase			,	flags=re.MULTILINE    )
       # Imports of the form `from xxx import yyy`
       imports += re.findall("^\s*from\s+(\S+)\s+import"			,	_UpperCAmelCase			,	flags=re.MULTILINE    )
       # Only keep the top-level module
       _UpperCAmelCase     :  Union[str, Any]							      =    [imp.split("."    )[0] for imp in imports if not imp.startswith("."    )]

       # Unique-ify and test we got them all
       _UpperCAmelCase     :  str							      =    list(set(_UpperCAmelCase    )    )
       _UpperCAmelCase     :  Tuple							      =    []
       for imp in imports:
              try:
                     importlib.import_module(_UpperCAmelCase    )
              except ImportError:
                     missing_packages.append(_UpperCAmelCase    )

       if len(_UpperCAmelCase    ) > 0:
              raise ImportError(
                  "This modeling file requires the following packages that were not found in your environment: "
                  F"""{', '.join(_UpperCAmelCase    )}. Run `pip install {' '.join(_UpperCAmelCase    )}`"""    )

       return get_relative_imports(_UpperCAmelCase    )

def 	UpperCamelCase_							(					_UpperCAmelCase  :      List[Any]			,	_UpperCAmelCase  :      Any    )    ->    Any:


       """simple docstring"""







       _UpperCAmelCase     :  Any							      =    module_path.replace(os.path.sep			,	"."    )
       _UpperCAmelCase     :  str							      =    importlib.import_module(_UpperCAmelCase    )

       if class_name is None:
              return find_pipeline_class(_UpperCAmelCase    )
       return getattr(_UpperCAmelCase			,	_UpperCAmelCase    )

def 	UpperCamelCase_							(					_UpperCAmelCase  :      List[str]    )    ->    Optional[Any]:


       """simple docstring"""







       from ..pipelines import DiffusionPipeline

       _UpperCAmelCase     :  List[Any]							      =    dict(inspect.getmembers(_UpperCAmelCase			,	inspect.isclass    )    )

       _UpperCAmelCase     :  int							      =    None
       for cls_name, cls in cls_members.items():
              if (
                  cls_name != DiffusionPipeline.__name__
                  and issubclass(cls			,	_UpperCAmelCase    )
                  and cls.__module__.split("."    )[0] != "diffusers"
              ):
                     if pipeline_class is not None:
                            raise ValueError(
                                F"""Multiple classes that inherit from {DiffusionPipeline.__name__} have been found:"""
                                F""" {pipeline_class.__name__}, and {cls_name}. Please make sure to define only one in"""
                                F""" {loaded_module}."""    )
                     _UpperCAmelCase     :  Dict							      =    cls

       return pipeline_class

def 	UpperCamelCase_							(					_UpperCAmelCase  :      Union[str, os.PathLike]			,	_UpperCAmelCase  :      str			,	_UpperCAmelCase  :      Optional[Union[str, os.PathLike]] = None			,	_UpperCAmelCase  :      bool = False			,	_UpperCAmelCase  :      bool = False			,	_UpperCAmelCase  :      Optional[Dict[str, str]] = None			,	_UpperCAmelCase  :      Optional[Union[bool, str]] = None			,	_UpperCAmelCase  :      Optional[str] = None			,	_UpperCAmelCase  :      bool = False			,	)    ->    str:


       """simple docstring"""







       _UpperCAmelCase     :  Tuple							      =    str(_UpperCAmelCase    )

       _UpperCAmelCase     :  Optional[int]							      =    os.path.join(_UpperCAmelCase			,	_UpperCAmelCase    )

       if os.path.isfile(_UpperCAmelCase    ):
              _UpperCAmelCase     :  Union[str, Any]							      =    module_file_or_url
              _UpperCAmelCase     :  Optional[Any]							      =    "local"
       elif pretrained_model_name_or_path.count("/"    ) == 0:
              _UpperCAmelCase     :  Tuple							      =    get_diffusers_versions()
              # cut ".dev0"
              _UpperCAmelCase     :  str							      =    "v" + ".".join(__version__.split("."    )[:3]    )

              # retrieve github version that matches
              if revision is None:
                     _UpperCAmelCase     :  Tuple							      =    latest_version if latest_version[1:] in available_versions else "main"
                     logger.info(F"""Defaulting to latest_version: {revision}."""    )
              elif revision in available_versions:
                     _UpperCAmelCase     :  Tuple							      =    F"""v{revision}"""
              elif revision == "main":
                     _UpperCAmelCase     :  Tuple							      =    revision
              else:
                     raise ValueError(
                         F"""`custom_revision`: {revision} does not exist. Please make sure to choose one of"""
                         F""" {', '.join(available_versions + ['main']    )}."""    )

              # community pipeline on GitHub
              _UpperCAmelCase     :  List[str]							      =    COMMUNITY_PIPELINES_URL.format(revision=_UpperCAmelCase			,	pipeline=_UpperCAmelCase    )
              try:
                     _UpperCAmelCase     :  str							      =    cached_download(
                         _UpperCAmelCase			,	cache_dir=_UpperCAmelCase			,	force_download=_UpperCAmelCase			,	proxies=_UpperCAmelCase			,	resume_download=_UpperCAmelCase			,	local_files_only=_UpperCAmelCase			,	use_auth_token=_UpperCAmelCase			,	)
                     _UpperCAmelCase     :  int							      =    "git"
                     _UpperCAmelCase     :  Tuple							      =    pretrained_model_name_or_path + ".py"
              except EnvironmentError:
                     logger.error(F"""Could not locate the {module_file} inside {pretrained_model_name_or_path}."""    )
                     raise
       else:
              try:
                     # Load from URL or cache if already cached
                     _UpperCAmelCase     :  Union[str, Any]							      =    hf_hub_download(
                         _UpperCAmelCase			,	_UpperCAmelCase			,	cache_dir=_UpperCAmelCase			,	force_download=_UpperCAmelCase			,	proxies=_UpperCAmelCase			,	resume_download=_UpperCAmelCase			,	local_files_only=_UpperCAmelCase			,	use_auth_token=_UpperCAmelCase			,	)
                     _UpperCAmelCase     :  Tuple							      =    os.path.join("local"			,	"--".join(pretrained_model_name_or_path.split("/"    )    )    )
              except EnvironmentError:
                     logger.error(F"""Could not locate the {module_file} inside {pretrained_model_name_or_path}."""    )
                     raise

    # Check we have all the requirements in our environment
       _UpperCAmelCase     :  Optional[Any]							      =    check_imports(_UpperCAmelCase    )

       # Now we move the module inside our cached dynamic modules.
       _UpperCAmelCase     :  Optional[Any]							      =    DIFFUSERS_DYNAMIC_MODULE_NAME + os.path.sep + submodule
       create_dynamic_module(_UpperCAmelCase    )
       _UpperCAmelCase     :  List[Any]							      =    Path(_UpperCAmelCase    ) / full_submodule
       if submodule == "local" or submodule == "git":
              # We always copy local files (we could hash the file to see if there was a change, and give them the name of
              # that hash, to only copy when there is a modification but it seems overkill for now).
              # The only reason we do the copy is to avoid putting too many folders in sys.path.
              shutil.copy(_UpperCAmelCase			,	submodule_path / module_file    )
              for module_needed in modules_needed:
                     _UpperCAmelCase     :  Optional[int]							      =    F"""{module_needed}.py"""
                     shutil.copy(os.path.join(_UpperCAmelCase			,	_UpperCAmelCase    )			,	submodule_path / module_needed    )
       else:
              # Get the commit hash
              # TODO: we will get this info in the etag soon, so retrieve it from there and not here.
              if isinstance(_UpperCAmelCase			,	_UpperCAmelCase    ):
                     _UpperCAmelCase     :  List[Any]							      =    use_auth_token
              elif use_auth_token is True:
                     _UpperCAmelCase     :  Tuple							      =    HfFolder.get_token()
              else:
                     _UpperCAmelCase     :  Dict							      =    None

              _UpperCAmelCase     :  Tuple							      =    model_info(_UpperCAmelCase			,	revision=_UpperCAmelCase			,	token=_UpperCAmelCase    ).sha

              # The module file will end up being placed in a subfolder with the git hash of the repo. This way we get the
              # benefit of versioning.
              _UpperCAmelCase     :  Any							      =    submodule_path / commit_hash
              _UpperCAmelCase     :  List[str]							      =    full_submodule + os.path.sep + commit_hash
              create_dynamic_module(_UpperCAmelCase    )

              if not (submodule_path / module_file).exists():
                     shutil.copy(_UpperCAmelCase			,	submodule_path / module_file    )
              # Make sure we also have every file with relative
              for module_needed in modules_needed:
                     if not (submodule_path / module_needed).exists():
                            get_cached_module_file(
                                _UpperCAmelCase			,	F"""{module_needed}.py"""			,	cache_dir=_UpperCAmelCase			,	force_download=_UpperCAmelCase			,	resume_download=_UpperCAmelCase			,	proxies=_UpperCAmelCase			,	use_auth_token=_UpperCAmelCase			,	revision=_UpperCAmelCase			,	local_files_only=_UpperCAmelCase			,	)
       return os.path.join(_UpperCAmelCase			,	_UpperCAmelCase    )


def 	UpperCamelCase_							(					_UpperCAmelCase  :      Union[str, os.PathLike]			,	_UpperCAmelCase  :      str			,	_UpperCAmelCase  :      Optional[str] = None			,	_UpperCAmelCase  :      Optional[Union[str, os.PathLike]] = None			,	_UpperCAmelCase  :      bool = False			,	_UpperCAmelCase  :      bool = False			,	_UpperCAmelCase  :      Optional[Dict[str, str]] = None			,	_UpperCAmelCase  :      Optional[Union[bool, str]] = None			,	_UpperCAmelCase  :      Optional[str] = None			,	_UpperCAmelCase  :      bool = False			,	**_UpperCAmelCase  :      Any			,	)    ->    List[str]:


       """simple docstring"""







       _UpperCAmelCase     :  int							      =    get_cached_module_file(
           _UpperCAmelCase			,	_UpperCAmelCase			,	cache_dir=_UpperCAmelCase			,	force_download=_UpperCAmelCase			,	resume_download=_UpperCAmelCase			,	proxies=_UpperCAmelCase			,	use_auth_token=_UpperCAmelCase			,	revision=_UpperCAmelCase			,	local_files_only=_UpperCAmelCase			,	)
       return get_class_in_module(_UpperCAmelCase			,	final_module.replace(".py"			,	""    )    )









'''simple docstring'''







from __future__ import annotations

import copy
import inspect
import json
import math
import os
import tempfile
import unittest
from importlib import import_module

import numpy as np

from transformers import ViTMAEConfig
from transformers.file_utils import cached_property, is_tf_available, is_vision_available
from transformers.testing_utils import require_tf, require_vision, slow

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


if is_tf_available():
			import tensorflow as tf

			from transformers import TFViTMAEForPreTraining, TFViTMAEModel


if is_vision_available():
			from PIL import Image

			from transformers import ViTImageProcessor

class _lowercase	:




							def __init__(							self:				List[Any]			,							UpperCamelCase__:				Optional[int]			,							UpperCamelCase__:				Dict=13			,							UpperCamelCase__:				int=30			,							UpperCamelCase__:				Optional[int]=2			,							UpperCamelCase__:				Tuple=3			,							UpperCamelCase__:				Any=True			,							UpperCamelCase__:				Dict=True			,							UpperCamelCase__:				Optional[int]=32			,							UpperCamelCase__:				Tuple=2			,							UpperCamelCase__:				Tuple=4			,							UpperCamelCase__:				Optional[Any]=37			,							UpperCamelCase__:				List[Any]="gelu"			,							UpperCamelCase__:				Union[str, Any]=0.1			,							UpperCamelCase__:				List[Any]=0.1			,							UpperCamelCase__:				Tuple=10			,							UpperCamelCase__:				Optional[Any]=0.02			,							UpperCamelCase__:				List[Any]=3			,							UpperCamelCase__:				str=0.6			,							UpperCamelCase__:				str=None			,							):
														lowerCamelCase__					:	List[Any]         =       parent
														lowerCamelCase__					:	Optional[Any]         =       batch_size
														lowerCamelCase__					:	Union[str, Any]         =       image_size
														lowerCamelCase__					:	Any         =       patch_size
														lowerCamelCase__					:	Union[str, Any]         =       num_channels
														lowerCamelCase__					:	Optional[Any]         =       is_training
														lowerCamelCase__					:	int         =       use_labels
														lowerCamelCase__					:	List[str]         =       hidden_size
														lowerCamelCase__					:	Optional[Any]         =       num_hidden_layers
														lowerCamelCase__					:	Any         =       num_attention_heads
														lowerCamelCase__					:	Optional[Any]         =       intermediate_size
														lowerCamelCase__					:	Optional[Any]         =       hidden_act
														lowerCamelCase__					:	Any         =       hidden_dropout_prob
														lowerCamelCase__					:	Tuple         =       attention_probs_dropout_prob
														lowerCamelCase__					:	Dict         =       type_sequence_label_size
														lowerCamelCase__					:	Optional[int]         =       initializer_range
														lowerCamelCase__					:	List[str]         =       mask_ratio
														lowerCamelCase__					:	Optional[int]         =       scope

														# in ViTMAE, the expected sequence length = (num_patches + 1) * (1 - config.mask_ratio), rounded above
														# (we add 1 for the [CLS] token)
														lowerCamelCase__					:	Any         =       (image_size // patch_size) ** 2
														lowerCamelCase__					:	str         =       int(math.ceil((1 - mask_ratio) * (num_patches + 1)     )     )




							def 		lowerCamelCase_				(							self:				Optional[int]     ):
														lowerCamelCase__					:	str         =       floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]     )

														lowerCamelCase__					:	List[Any]         =       None
														if self.use_labels:
																					lowerCamelCase__					:	Union[str, Any]         =       ids_tensor([self.batch_size]			,							self.type_sequence_label_size     )

														lowerCamelCase__					:	Optional[Any]         =       self.get_config()

														return config, pixel_values, labels




							def 		lowerCamelCase_				(							self:				Any     ):
														return ViTMAEConfig(
														    image_size=self.image_size			,							patch_size=self.patch_size			,							num_channels=self.num_channels			,							hidden_size=self.hidden_size			,							num_hidden_layers=self.num_hidden_layers			,							num_attention_heads=self.num_attention_heads			,							intermediate_size=self.intermediate_size			,							decoder_hidden_size=self.hidden_size			,							decoder_num_hidden_layers=self.num_hidden_layers			,							decoder_num_attention_heads=self.num_attention_heads			,							decoder_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			,							is_decoder=UpperCamelCase__			,							initializer_range=self.initializer_range			,							mask_ratio=self.mask_ratio			,							)




							def 		lowerCamelCase_				(							self:				Optional[Any]			,							UpperCamelCase__:				List[Any]			,							UpperCamelCase__:				Dict			,							UpperCamelCase__:				List[str]     ):
														lowerCamelCase__					:	Tuple         =       TFViTMAEModel(config=UpperCamelCase__     )
														lowerCamelCase__					:	int         =       model(UpperCamelCase__			,							training=UpperCamelCase__     )
														self.parent.assertEqual(result.last_hidden_state.shape			,							(self.batch_size, self.seq_length, self.hidden_size)     )




							def 		lowerCamelCase_				(							self:				Tuple			,							UpperCamelCase__:				Tuple			,							UpperCamelCase__:				List[Any]			,							UpperCamelCase__:				Any     ):
														lowerCamelCase__					:	Optional[int]         =       TFViTMAEForPreTraining(UpperCamelCase__     )
														lowerCamelCase__					:	int         =       model(UpperCamelCase__			,							training=UpperCamelCase__     )
														# expected sequence length = num_patches
														lowerCamelCase__					:	List[str]         =       (self.image_size // self.patch_size) ** 2
														lowerCamelCase__					:	Union[str, Any]         =       self.patch_size**2 * self.num_channels
														self.parent.assertEqual(result.logits.shape			,							(self.batch_size, num_patches, expected_num_channels)     )

														# test greyscale images
														lowerCamelCase__					:	List[Any]         =       1
														lowerCamelCase__					:	Union[str, Any]         =       TFViTMAEForPreTraining(UpperCamelCase__     )

														lowerCamelCase__					:	Any         =       floats_tensor([self.batch_size, 1, self.image_size, self.image_size]     )
														lowerCamelCase__					:	Optional[int]         =       model(UpperCamelCase__			,							training=UpperCamelCase__     )
														lowerCamelCase__					:	int         =       self.patch_size**2
														self.parent.assertEqual(result.logits.shape			,							(self.batch_size, num_patches, expected_num_channels)     )




							def 		lowerCamelCase_				(							self:				List[str]     ):
														lowerCamelCase__					:	Union[str, Any]         =       self.prepare_config_and_inputs()
														((lowerCamelCase__)  ,		(lowerCamelCase__)  ,		(lowerCamelCase__))					:	Optional[int]         =       config_and_inputs
														lowerCamelCase__					:	List[Any]         =       {"""pixel_values""": pixel_values}
														return config, inputs_dict



@require_tf
class _lowercase	(				_lowercase				,      _lowercase				,      unittest.TestCase		):
							a				      =       (TFViTMAEModel, TFViTMAEForPreTraining) if is_tf_available() else ()
							a				      =       {"""feature-extraction""": TFViTMAEModel} if is_tf_available() else {}

							a				      =       False
							a				      =       False
							a				      =       False
							a				      =       False




							def 		lowerCamelCase_				(							self:				List[str]     ):
														lowerCamelCase__					:	int         =       TFViTMAEModelTester(self     )
														lowerCamelCase__					:	List[Any]         =       ConfigTester(self			,							config_class=UpperCamelCase__			,							has_text_modality=UpperCamelCase__			,							hidden_size=37     )




							def 		lowerCamelCase_				(							self:				Tuple     ):
														self.config_tester.run_common_tests()




							@unittest.skip(reason="""ViTMAE does not use inputs_embeds"""     )
							def 		lowerCamelCase_				(							self:				Any     ):
														pass




							def 		lowerCamelCase_				(							self:				List[Any]     ):
														lowerCamelCase__  ,		lowerCamelCase__					:	Optional[Any]         =       self.model_tester.prepare_config_and_inputs_for_common()

														for model_class in self.all_model_classes:
																					lowerCamelCase__					:	Dict         =       model_class(UpperCamelCase__     )
																					self.assertIsInstance(model.get_input_embeddings()			,							(tf.keras.layers.Layer)     )
																					lowerCamelCase__					:	Dict         =       model.get_output_embeddings()
																					self.assertTrue(x is None or isinstance(UpperCamelCase__			,							tf.keras.layers.Layer     )     )




							def 		lowerCamelCase_				(							self:				Any     ):
														lowerCamelCase__  ,		lowerCamelCase__					:	List[str]         =       self.model_tester.prepare_config_and_inputs_for_common()

														for model_class in self.all_model_classes:
																					lowerCamelCase__					:	Dict         =       model_class(UpperCamelCase__     )
																					lowerCamelCase__					:	Union[str, Any]         =       inspect.signature(model.call     )
																					# signature.parameters is an OrderedDict => so arg_names order is deterministic
																					lowerCamelCase__					:	str         =       [*signature.parameters.keys()]

																					lowerCamelCase__					:	Tuple         =       ["""pixel_values"""]
																					self.assertListEqual(arg_names[:1]			,							UpperCamelCase__     )




							def 		lowerCamelCase_				(							self:				Optional[int]     ):
														lowerCamelCase__					:	Union[str, Any]         =       self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_model(*UpperCamelCase__     )




							def 		lowerCamelCase_				(							self:				List[Any]     ):
														lowerCamelCase__					:	int         =       self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_for_pretraining(*UpperCamelCase__     )




							def 		lowerCamelCase_				(							self:				List[str]     ):
														# make the mask reproducible
														np.random.seed(2     )

														lowerCamelCase__  ,		lowerCamelCase__					:	Union[str, Any]         =       self.model_tester.prepare_config_and_inputs_for_common()

														lowerCamelCase__					:	Union[str, Any]         =       int((config.image_size // config.patch_size) ** 2     )
														lowerCamelCase__					:	Optional[Any]         =       np.random.uniform(size=(self.model_tester.batch_size, num_patches)     )

														for model_class in self.all_model_classes:
																					lowerCamelCase__					:	Optional[int]         =       model_class(UpperCamelCase__     )
																					lowerCamelCase__					:	Union[str, Any]         =       self._prepare_for_class(UpperCamelCase__			,							UpperCamelCase__     )

																					lowerCamelCase__					:	List[Any]         =       model(UpperCamelCase__			,							noise=UpperCamelCase__     )

																					lowerCamelCase__					:	int         =       copy.deepcopy(self._prepare_for_class(UpperCamelCase__			,							UpperCamelCase__     )     )
																					lowerCamelCase__					:	List[str]         =       model(**UpperCamelCase__			,							noise=UpperCamelCase__     )
																					lowerCamelCase__					:	str         =       outputs_dict[0].numpy()
																					lowerCamelCase__					:	Optional[int]         =       outputs_keywords[0].numpy()

																					self.assertLess(np.sum(np.abs(output_dict - output_keywords     )     )			,							1e-6     )




							def 		lowerCamelCase_				(							self:				Dict     ):
														# make the mask reproducible
														np.random.seed(2     )

														lowerCamelCase__  ,		lowerCamelCase__					:	Union[str, Any]         =       self.model_tester.prepare_config_and_inputs_for_common()

														lowerCamelCase__					:	Tuple         =       int((config.image_size // config.patch_size) ** 2     )
														lowerCamelCase__					:	Optional[Any]         =       np.random.uniform(size=(self.model_tester.batch_size, num_patches)     )

														def prepare_numpy_arrays(UpperCamelCase__:				int     ):
																					lowerCamelCase__					:	Optional[int]         =       {}
																					for k, v in inputs_dict.items():
																												if tf.is_tensor(UpperCamelCase__     ):
																																			lowerCamelCase__					:	List[str]         =       v.numpy()
																												else:
																																			lowerCamelCase__					:	Union[str, Any]         =       np.array(UpperCamelCase__     )

																					return inputs_np_dict

														for model_class in self.all_model_classes:
																					lowerCamelCase__					:	Optional[int]         =       model_class(UpperCamelCase__     )

																					lowerCamelCase__					:	List[Any]         =       self._prepare_for_class(UpperCamelCase__			,							UpperCamelCase__     )
																					lowerCamelCase__					:	str         =       prepare_numpy_arrays(UpperCamelCase__     )

																					lowerCamelCase__					:	int         =       model(UpperCamelCase__			,							noise=UpperCamelCase__     )
																					lowerCamelCase__					:	Any         =       model(**UpperCamelCase__			,							noise=UpperCamelCase__     )
																					self.assert_outputs_same(UpperCamelCase__			,							UpperCamelCase__     )




							def 		lowerCamelCase_				(							self:				Dict			,							UpperCamelCase__:				Dict			,							UpperCamelCase__:				Any			,							UpperCamelCase__:				str     ):
														# make masks reproducible
														np.random.seed(2     )

														lowerCamelCase__					:	List[str]         =       int((tf_model.config.image_size // tf_model.config.patch_size) ** 2     )
														lowerCamelCase__					:	int         =       np.random.uniform(size=(self.model_tester.batch_size, num_patches)     )
														lowerCamelCase__					:	Optional[int]         =       tf.constant(UpperCamelCase__     )

														# Add `noise` argument.
														# PT inputs will be prepared in `super().check_pt_tf_models()` with this added `noise` argument
														lowerCamelCase__					:	Tuple         =       tf_noise

														super().check_pt_tf_models(UpperCamelCase__			,							UpperCamelCase__			,							UpperCamelCase__     )




							def 		lowerCamelCase_				(							self:				Union[str, Any]     ):
														# make mask reproducible
														np.random.seed(2     )

														lowerCamelCase__  ,		lowerCamelCase__					:	Optional[int]         =       self.model_tester.prepare_config_and_inputs_for_common()

														lowerCamelCase__					:	List[Any]         =       {
														    module_member
														    for model_class in self.all_model_classes
														    for module in (import_module(model_class.__module__     ),)
														    for module_member_name in dir(UpperCamelCase__     )
														    if module_member_name.endswith("""MainLayer"""     )
														    # This condition is required, since `modeling_tf_clip.py` has 3 classes whose names end with `MainLayer`.
														    and module_member_name[: -len("""MainLayer"""     )] == model_class.__name__[: -len("""Model"""     )]
														    for module_member in (getattr(UpperCamelCase__			,							UpperCamelCase__     ),)
														    if isinstance(UpperCamelCase__			,							UpperCamelCase__     )
														    and tf.keras.layers.Layer in module_member.__bases__
														    and getattr(UpperCamelCase__			,							"""_keras_serializable"""			,							UpperCamelCase__     )
														}

														lowerCamelCase__					:	List[str]         =       int((config.image_size // config.patch_size) ** 2     )
														lowerCamelCase__					:	Dict         =       np.random.uniform(size=(self.model_tester.batch_size, num_patches)     )
														lowerCamelCase__					:	List[str]         =       tf.convert_to_tensor(UpperCamelCase__     )
														inputs_dict.update({"""noise""": noise}     )

														for main_layer_class in tf_main_layer_classes:
																					lowerCamelCase__					:	List[str]         =       main_layer_class(UpperCamelCase__     )

																					lowerCamelCase__					:	int         =       {
																					    name: tf.keras.Input(tensor.shape[1:]			,							dtype=tensor.dtype     ) for name, tensor in inputs_dict.items()
																					}

																					lowerCamelCase__					:	List[str]         =       tf.keras.Model(UpperCamelCase__			,							outputs=main_layer(UpperCamelCase__     )     )
																					lowerCamelCase__					:	Union[str, Any]         =       model(UpperCamelCase__     )

																					with tempfile.TemporaryDirectory() as tmpdirname:
																												lowerCamelCase__					:	int         =       os.path.join(UpperCamelCase__			,							"""keras_model.h5"""     )
																												model.save(UpperCamelCase__     )
																												lowerCamelCase__					:	int         =       tf.keras.models.load_model(
																												    UpperCamelCase__			,							custom_objects={main_layer_class.__name__: main_layer_class}     )
																												assert isinstance(UpperCamelCase__			,							tf.keras.Model     )
																												lowerCamelCase__					:	Tuple         =       model(UpperCamelCase__     )
																												self.assert_outputs_same(UpperCamelCase__			,							UpperCamelCase__     )




							@slow
							def 		lowerCamelCase_				(							self:				str     ):
														# make mask reproducible
														np.random.seed(2     )

														lowerCamelCase__  ,		lowerCamelCase__					:	Dict         =       self.model_tester.prepare_config_and_inputs_for_common()

														lowerCamelCase__					:	Tuple         =       int((config.image_size // config.patch_size) ** 2     )
														lowerCamelCase__					:	str         =       np.random.uniform(size=(self.model_tester.batch_size, num_patches)     )

														for model_class in self.all_model_classes:
																					lowerCamelCase__					:	Tuple         =       model_class(UpperCamelCase__     )
																					lowerCamelCase__					:	Union[str, Any]         =       self._prepare_for_class(UpperCamelCase__			,							UpperCamelCase__     )
																					lowerCamelCase__					:	List[Any]         =       model(UpperCamelCase__			,							noise=UpperCamelCase__     )

																					if model_class.__name__ == "TFViTMAEModel":
																												lowerCamelCase__					:	Any         =       outputs.last_hidden_state.numpy()
																												lowerCamelCase__					:	List[str]         =       0
																					else:
																												lowerCamelCase__					:	int         =       outputs.logits.numpy()
																												lowerCamelCase__					:	Dict         =       0

																					with tempfile.TemporaryDirectory() as tmpdirname:
																												model.save_pretrained(UpperCamelCase__			,							saved_model=UpperCamelCase__     )
																												lowerCamelCase__					:	Dict         =       model_class.from_pretrained(UpperCamelCase__     )
																												lowerCamelCase__					:	Tuple         =       model(UpperCamelCase__			,							noise=UpperCamelCase__     )

																												if model_class.__name__ == "TFViTMAEModel":
																																			lowerCamelCase__					:	str         =       after_outputs["""last_hidden_state"""].numpy()
																																			lowerCamelCase__					:	Optional[Any]         =       0
																												else:
																																			lowerCamelCase__					:	Union[str, Any]         =       after_outputs["""logits"""].numpy()
																																			lowerCamelCase__					:	List[Any]         =       0

																												lowerCamelCase__					:	int         =       np.amax(np.abs(out_a - out_a     )     )
																												self.assertLessEqual(UpperCamelCase__			,							1e-5     )




							def 		lowerCamelCase_				(							self:				Any     ):
														# make mask reproducible
														np.random.seed(2     )

														lowerCamelCase__  ,		lowerCamelCase__					:	List[str]         =       self.model_tester.prepare_config_and_inputs_for_common()

														lowerCamelCase__					:	Optional[int]         =       int((config.image_size // config.patch_size) ** 2     )
														lowerCamelCase__					:	Union[str, Any]         =       np.random.uniform(size=(self.model_tester.batch_size, num_patches)     )

														for model_class in self.all_model_classes:
																					lowerCamelCase__					:	Optional[int]         =       model_class(UpperCamelCase__     )
																					lowerCamelCase__					:	Any         =       self._prepare_for_class(UpperCamelCase__			,							UpperCamelCase__     )

																					lowerCamelCase__					:	List[str]         =       model(UpperCamelCase__			,							noise=UpperCamelCase__     )
																					lowerCamelCase__					:	List[Any]         =       model.get_config()
																					# make sure that returned config is jsonifiable, which is required by keras
																					json.dumps(UpperCamelCase__     )
																					lowerCamelCase__					:	int         =       model_class.from_config(model.get_config()     )
																					# make sure it also accepts a normal config
																					lowerCamelCase__					:	int         =       model_class.from_config(model.config     )
																					lowerCamelCase__					:	List[Any]         =       new_model(UpperCamelCase__     )  # Build model
																					new_model.set_weights(model.get_weights()     )
																					lowerCamelCase__					:	List[Any]         =       new_model(UpperCamelCase__			,							noise=UpperCamelCase__     )

																					self.assert_outputs_same(UpperCamelCase__			,							UpperCamelCase__     )




							@unittest.skip(
							    reason="""ViTMAE returns a random mask + ids_restore in each forward pass. See test_save_load
    to get deterministic results."""     )
							def 		lowerCamelCase_				(							self:				List[str]     ):
														pass




							@unittest.skip(reason="""ViTMAE returns a random mask + ids_restore in each forward pass. See test_save_load"""     )
							def 		lowerCamelCase_				(							self:				Optional[int]     ):
														pass




							@slow
							def 		lowerCamelCase_				(							self:				List[str]     ):
														lowerCamelCase__					:	Tuple         =       TFViTMAEModel.from_pretrained("""google/vit-base-patch16-224"""     )
														self.assertIsNotNone(UpperCamelCase__     )





def  SCREAMING_SNAKE_CASE_       ()      ->       List[Any]:
							lowerCamelCase__					:	Any         =       Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""      )
							return image



@require_tf
@require_vision
class _lowercase	(				unittest.TestCase		):




							@cached_property
							def 		lowerCamelCase_				(							self:				Optional[Any]     ):
														return ViTImageProcessor.from_pretrained("""facebook/vit-mae-base"""     ) if is_vision_available() else None




							@slow
							def 		lowerCamelCase_				(							self:				List[str]     ):
														# make random mask reproducible across the PT and TF model
														np.random.seed(2     )

														lowerCamelCase__					:	Optional[int]         =       TFViTMAEForPreTraining.from_pretrained("""facebook/vit-mae-base"""     )

														lowerCamelCase__					:	Dict         =       self.default_image_processor
														lowerCamelCase__					:	int         =       prepare_img()
														lowerCamelCase__					:	List[Any]         =       image_processor(images=UpperCamelCase__			,							return_tensors="""tf"""     )

														# prepare a noise vector that will be also used for testing the TF model
														# (this way we can ensure that the PT and TF models operate on the same inputs)
														lowerCamelCase__					:	Tuple         =       ViTMAEConfig()
														lowerCamelCase__					:	Dict         =       int((vit_mae_config.image_size // vit_mae_config.patch_size) ** 2     )
														lowerCamelCase__					:	str         =       np.random.uniform(size=(1, num_patches)     )

														# forward pass
														lowerCamelCase__					:	str         =       model(**UpperCamelCase__			,							noise=UpperCamelCase__     )

														# verify the logits
														lowerCamelCase__					:	Any         =       tf.convert_to_tensor([1, 196, 768]     )
														self.assertEqual(outputs.logits.shape			,							UpperCamelCase__     )

														lowerCamelCase__					:	str         =       tf.convert_to_tensor(
														    [[-0.0_548, -1.7_023, -0.9_325], [0.3_721, -0.5_670, -0.2_233], [0.8_235, -1.3_878, -0.3_524]]     )

														tf.debugging.assert_near(outputs.logits[0, :3, :3]			,							UpperCamelCase__			,							atol=1e-4     )

