





"""simple docstring"""






import torch
from torch import nn
from transformers import CLIPPreTrainedModel, CLIPVisionModel

from ...models.attention import BasicTransformerBlock
from ...utils import logging


A 			=  logging.get_logger(__name__)  # pylint: disable=invalid-name




class 				__lowercase			(			_UpperCamelCase							):







					'''simple docstring'''




					def __init__(						self	,			_UpperCAmelCase	,			_UpperCAmelCase=768     ):
									super().__init__(_UpperCAmelCase     )
									__a :						str			       =  proj_size

									__a :						Optional[Any]			       =  CLIPVisionModel(_UpperCAmelCase     )
									__a :						List[Any]			       =  PaintByExampleMapper(_UpperCAmelCase     )
									__a :						int			       =  nn.LayerNorm(config.hidden_size     )
									__a :						List[Any]			       =  nn.Linear(config.hidden_size	,			self.proj_size     )

									# uncondition for scaling
									__a :						int			       =  nn.Parameter(torch.randn((1, 1, self.proj_size)     )     )







					def  _lowerCamelCase		(						self	,			_UpperCAmelCase	,			_UpperCAmelCase=False     ):
									__a :						str			       =  self.model(pixel_values=_UpperCAmelCase     )
									__a :						Union[str, Any]			       =  clip_output.pooler_output
									__a :						Optional[int]			       =  self.mapper(latent_states[:, None]     )
									__a :						int			       =  self.final_layer_norm(_UpperCAmelCase     )
									__a :						Optional[Any]			       =  self.proj_out(_UpperCAmelCase     )
									if return_uncond_vector:
													return latent_states, self.uncond_vector

									return latent_states






class 				__lowercase			(			nn.Module							):







					'''simple docstring'''




					def __init__(						self	,			_UpperCAmelCase     ):
									super().__init__()
									__a :						List[str]			       =  (config.num_hidden_layers + 1) // 5
									__a :						Optional[Any]			       =  config.hidden_size
									__a :						str			       =  1
									__a :						Union[str, Any]			       =  nn.ModuleList(
									    [
									        BasicTransformerBlock(_UpperCAmelCase	,			_UpperCAmelCase	,			_UpperCAmelCase	,			activation_fn='''gelu'''	,			attention_bias=_UpperCAmelCase     )
									        for _ in range(_UpperCAmelCase     )
									    ]     )







					def  _lowerCamelCase		(						self	,			_UpperCAmelCase     ):
									for block in self.blocks:
													__a :						Union[str, Any]			       =  block(_UpperCAmelCase     )

									return hidden_states






"""simple docstring"""






# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import sys
import warnings
from os.path import abspath, dirname, join


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
A 			=  abspath(join(dirname(dirname(dirname(__file__))), '''src'''))
sys.path.insert(1, git_repo_path)


# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action='''ignore''', category=FutureWarning)

def     __A      (			a_						:Tuple)		->		Dict:
				from transformers.testing_utils import pytest_addoption_shared

				pytest_addoption_shared(a_)






def     __A      (			a_						:Any)		->		int:
				from transformers.testing_utils import pytest_terminal_summary_main

				__a :						str			       =  terminalreporter.config.getoption('''--make-reports''')
				if make_reports:
								pytest_terminal_summary_main(a_   ,       id=a_)