
import numpy as np
import torch
import torch.nn as nn
from transformers import CLIPConfig, CLIPVisionModelWithProjection, PreTrainedModel

from ...utils import logging


__lowerCAmelCase					   =       logging.get_logger(__name__)





class     lowerCamelCase      (       __lowerCamelCase					):
	UpperCamelCase_  :					Optional[Any]    		=	CLIPConfig

	UpperCamelCase_  :					Optional[Any]    		=	['CLIPEncoderLayer']







	def __init__(     self      :List[str]   ,     lowercase      :CLIPConfig			)		->      int:







				"""simple docstring"""






				super().__init__(lowercase			)

				SCREAMING_SNAKE_CASE     						= CLIPVisionModelWithProjection(config.vision_config			)

				SCREAMING_SNAKE_CASE     						= nn.Linear(config.vision_config.projection_dim   ,     1			)
				SCREAMING_SNAKE_CASE     						= nn.Linear(config.vision_config.projection_dim   ,     1			)







	@torch.no_grad()
	def  snake_case__     (     self      :Any   ,     lowercase      :Dict   ,     lowercase      :Union[str, Any]   ,     lowercase      :int=0.5   ,     lowercase      :List[Any]=0.5			)		->      int:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= self.vision_model(lowercase			)[0]

				SCREAMING_SNAKE_CASE     						= self.p_head(lowercase			)
				SCREAMING_SNAKE_CASE     						= nsfw_detected.flatten()
				SCREAMING_SNAKE_CASE     						= nsfw_detected > p_threshold
				SCREAMING_SNAKE_CASE     						= nsfw_detected.tolist()

				if any(lowercase			):
							logger.warning(
							    '''Potential NSFW content was detected in one or more images. A black image will be returned instead.'''
							    ''' Try again with a different prompt and/or seed.'''			)

				for idx, nsfw_detected_ in enumerate(lowercase			):
							if nsfw_detected_:
										SCREAMING_SNAKE_CASE     						= np.zeros(images[idx].shape			)

				SCREAMING_SNAKE_CASE     						= self.w_head(lowercase			)
				SCREAMING_SNAKE_CASE     						= watermark_detected.flatten()
				SCREAMING_SNAKE_CASE     						= watermark_detected > w_threshold
				SCREAMING_SNAKE_CASE     						= watermark_detected.tolist()

				if any(lowercase			):
							logger.warning(
							    '''Potential watermarked content was detected in one or more images. A black image will be returned instead.'''
							    ''' Try again with a different prompt and/or seed.'''			)

				for idx, watermark_detected_ in enumerate(lowercase			):
							if watermark_detected_:
										SCREAMING_SNAKE_CASE     						= np.zeros(images[idx].shape			)

				return images, nsfw_detected, watermark_detected

from ...configuration_utils import PretrainedConfig
from ...utils import logging


__lowerCAmelCase					   =       logging.get_logger(__name__)

__lowerCAmelCase					   =       {
    'alibaba-damo/mgp-str-base': 'https://huggingface.co/alibaba-damo/mgp-str-base/resolve/main/config.json',
}





class     lowerCamelCase      (       __lowerCamelCase					):
	UpperCamelCase_  :					Union[str, Any]    		=	'mgp-str'







	def __init__(     self      :Union[str, Any]   ,     lowercase      :Union[str, Any]=[3_2, 1_2_8]   ,     lowercase      :Tuple=4   ,     lowercase      :Optional[int]=3   ,     lowercase      :Union[str, Any]=2_7   ,     lowercase      :List[str]=3_8   ,     lowercase      :Optional[Any]=5_0_2_5_7   ,     lowercase      :str=3_0_5_2_2   ,     lowercase      :Dict=7_6_8   ,     lowercase      :List[Any]=1_2   ,     lowercase      :List[str]=1_2   ,     lowercase      :Optional[Any]=4.0   ,     lowercase      :Optional[Any]=True   ,     lowercase      :str=False   ,     lowercase      :Optional[Any]=1e-5   ,     lowercase      :List[str]=0.0   ,     lowercase      :List[Any]=0.0   ,     lowercase      :Optional[int]=0.0   ,     lowercase      :Dict=False   ,     lowercase      :Optional[Any]=0.02   ,     **lowercase      :Optional[Any]   ,     )		->      Dict:







				"""simple docstring"""






				super().__init__(**lowercase			)

				SCREAMING_SNAKE_CASE     						= image_size
				SCREAMING_SNAKE_CASE     						= patch_size
				SCREAMING_SNAKE_CASE     						= num_channels
				SCREAMING_SNAKE_CASE     						= max_token_length
				SCREAMING_SNAKE_CASE     						= num_character_labels
				SCREAMING_SNAKE_CASE     						= num_bpe_labels
				SCREAMING_SNAKE_CASE     						= num_wordpiece_labels
				SCREAMING_SNAKE_CASE     						= hidden_size
				SCREAMING_SNAKE_CASE     						= num_hidden_layers
				SCREAMING_SNAKE_CASE     						= num_attention_heads
				SCREAMING_SNAKE_CASE     						= mlp_ratio
				SCREAMING_SNAKE_CASE     						= distilled
				SCREAMING_SNAKE_CASE     						= layer_norm_eps
				SCREAMING_SNAKE_CASE     						= drop_rate
				SCREAMING_SNAKE_CASE     						= qkv_bias
				SCREAMING_SNAKE_CASE     						= attn_drop_rate
				SCREAMING_SNAKE_CASE     						= drop_path_rate
				SCREAMING_SNAKE_CASE     						= output_aa_attentions
				SCREAMING_SNAKE_CASE     						= initializer_range