


"""simple docstring"""
from typing import Any, Dict, Optional

import torch
import torch.nn.functional as F
from torch import nn

from ..utils import maybe_allow_in_graph
from .activations import get_activation
from .attention_processor import Attention
from .embeddings import CombinedTimestepLabelEmbeddings



@maybe_allow_in_graph
class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_				,       a_				,       a_=0.0				,       a_ = None				,       a_ = "geglu"				,       a_ = None				,       a_ = False				,       a_ = False				,       a_ = False				,       a_ = False				,       a_ = True				,       a_ = "layer_norm"				,       a_ = False				,       ):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						List[Any]						=				only_cross_attention

			__snake_case	:						Union[str, Any]						=				(num_embeds_ada_norm is not None) and norm_type == '''ada_norm_zero'''
			__snake_case	:						Any						=				(num_embeds_ada_norm is not None) and norm_type == '''ada_norm'''

			if norm_type in ("ada_norm", "ada_norm_zero") and num_embeds_ada_norm is None:
				raise ValueError(
				    f"""`norm_type` is set to {norm_type}, but `num_embeds_ada_norm` is not defined. Please make sure to"""
				    f""" define `num_embeds_ada_norm` if setting `norm_type` to {norm_type}."""					)

			# Define 3 blocks. Each block has its own normalization layer.
			# 1. Self-Attn
			if self.use_ada_layer_norm:
				__snake_case	:						Dict						=				AdaLayerNorm(a_				,       a_					)
			elif self.use_ada_layer_norm_zero:
				__snake_case	:						int						=				AdaLayerNormZero(a_				,       a_					)
			else:
				__snake_case	:						Optional[Any]						=				nn.LayerNorm(a_				,       elementwise_affine=a_					)
			__snake_case	:						Any						=				Attention(
			    query_dim=a_				,       heads=a_				,       dim_head=a_				,       dropout=a_				,       bias=a_				,       cross_attention_dim=cross_attention_dim if only_cross_attention else None				,       upcast_attention=a_				,       )

			# 2. Cross-Attn
			if cross_attention_dim is not None or double_self_attention:
				# We currently only use AdaLayerNormZero for self attention where there will only be one attention block.
				# I.e. the number of returned modulation chunks from AdaLayerZero would not make sense if returned during
				# the second cross attention block.
				__snake_case	:						Dict						=				(
				    AdaLayerNorm(a_				,       a_					)
				    if self.use_ada_layer_norm
				    else nn.LayerNorm(a_				,       elementwise_affine=a_					)
				)
				__snake_case	:						List[Any]						=				Attention(
				    query_dim=a_				,       cross_attention_dim=cross_attention_dim if not double_self_attention else None				,       heads=a_				,       dim_head=a_				,       dropout=a_				,       bias=a_				,       upcast_attention=a_				,       )  # is self-attn if encoder_hidden_states is none
			else:
				__snake_case	:						int						=				None
				__snake_case	:						Union[str, Any]						=				None

			# 3. Feed-forward
			__snake_case	:						Optional[int]						=				nn.LayerNorm(a_				,       elementwise_affine=a_					)
			__snake_case	:						Optional[Any]						=				FeedForward(a_				,       dropout=a_				,       activation_fn=a_				,       final_dropout=a_					)

			# let chunk size default to None
			__snake_case	:						Tuple						=				None
			__snake_case	:						int						=				0



		def 				SCREAMING_SNAKE_CASE  (self				,       a_				,       a_					):





			'''simple docstring'''

			__snake_case	:						int						=				chunk_size
			__snake_case	:						Optional[Any]						=				dim



		def 				SCREAMING_SNAKE_CASE  (self				,       a_				,       a_ = None				,       a_ = None				,       a_ = None				,       a_ = None				,       a_ = None				,       a_ = None				,       ):





			'''simple docstring'''

			if self.use_ada_layer_norm:
				__snake_case	:						Tuple						=				self.norma(a_				,       a_					)
			elif self.use_ada_layer_norm_zero:
				__snake_case	,							__snake_case	,							__snake_case	,							__snake_case	,							__snake_case	:						Union[str, Any]						=				self.norma(
				    a_				,       a_				,       a_				,       hidden_dtype=hidden_states.dtype					)
			else:
				__snake_case	:						Optional[Any]						=				self.norma(a_					)

			__snake_case	:						Optional[Any]						=				cross_attention_kwargs if cross_attention_kwargs is not None else {}

			__snake_case	:						List[Any]						=				self.attna(
			    a_				,       encoder_hidden_states=encoder_hidden_states if self.only_cross_attention else None				,       attention_mask=a_				,       **a_				,       )
			if self.use_ada_layer_norm_zero:
				__snake_case	:						Optional[Any]						=				gate_msa.unsqueeze(1					) * attn_output
			__snake_case	:						List[str]						=				attn_output + hidden_states

			# 2. Cross-Attention
			if self.attna is not None:
				__snake_case	:						List[Any]						=				(
				    self.norma(a_				,       a_					) if self.use_ada_layer_norm else self.norma(a_					)
				)

				__snake_case	:						str						=				self.attna(
				    a_				,       encoder_hidden_states=a_				,       attention_mask=a_				,       **a_				,       )
				__snake_case	:						Union[str, Any]						=				attn_output + hidden_states

			# 3. Feed-forward
			__snake_case	:						Any						=				self.norma(a_					)

			if self.use_ada_layer_norm_zero:
				__snake_case	:						Optional[Any]						=				norm_hidden_states * (1 + scale_mlp[:, None]) + shift_mlp[:, None]

			if self._chunk_size is not None:
				# "feed_forward_chunk_size" can be used to save memory
				if norm_hidden_states.shape[self._chunk_dim] % self._chunk_size != 0:
					raise ValueError(
					    f"""`hidden_states` dimension to be chunked: {norm_hidden_states.shape[self._chunk_dim]} has to be divisible by chunk size: {self._chunk_size}. Make sure to set an appropriate `chunk_size` when calling `unet.enable_forward_chunking`."""					)

				__snake_case	:						List[str]						=				norm_hidden_states.shape[self._chunk_dim] // self._chunk_size
				__snake_case	:						Dict						=				torch.cat(
				    [self.ff(a_					) for hid_slice in norm_hidden_states.chunk(a_				,       dim=self._chunk_dim					)]				,       dim=self._chunk_dim				,       )
			else:
				__snake_case	:						Tuple						=				self.ff(a_					)

			if self.use_ada_layer_norm_zero:
				__snake_case	:						Any						=				gate_mlp.unsqueeze(1					) * ff_output

			__snake_case	:						int						=				ff_output + hidden_states

			return hidden_states



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_ = None				,       a_ = 4				,       a_ = 0.0				,       a_ = "geglu"				,       a_ = False				,       ):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						Union[str, Any]						=				int(dim * mult					)
			__snake_case	:						List[Any]						=				dim_out if dim_out is not None else dim

			if activation_fn == "gelu":
				__snake_case	:						Optional[int]						=				GELU(a_				,       a_					)
			if activation_fn == "gelu-approximate":
				__snake_case	:						Union[str, Any]						=				GELU(a_				,       a_				,       approximate='''tanh'''					)
			elif activation_fn == "geglu":
				__snake_case	:						Optional[int]						=				GEGLU(a_				,       a_					)
			elif activation_fn == "geglu-approximate":
				__snake_case	:						List[Any]						=				ApproximateGELU(a_				,       a_					)

			__snake_case	:						List[str]						=				nn.ModuleList([]					)
			# project in
			self.net.append(a_					)
			# project dropout
			self.net.append(nn.Dropout(a_					)					)
			# project out
			self.net.append(nn.Linear(a_				,       a_					)					)
			# FF as used in Vision Transformer, MLP-Mixer, etc. have a final dropout
			if final_dropout:
				self.net.append(nn.Dropout(a_					)					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			for module in self.net:
				__snake_case	:						List[Any]						=				module(a_					)
			return hidden_states



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_				,       a_ = "none"					):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						Optional[int]						=				nn.Linear(a_				,       a_					)
			__snake_case	:						Optional[Any]						=				approximate



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			if gate.device.type != "mps":
				return F.gelu(a_				,       approximate=self.approximate					)
			# mps: gelu is not implemented for float16
			return F.gelu(gate.to(dtype=torch.floataa					)				,       approximate=self.approximate					).to(dtype=gate.dtype					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			__snake_case	:						Any						=				self.proj(a_					)
			__snake_case	:						List[str]						=				self.gelu(a_					)
			return hidden_states



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_					):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						Union[str, Any]						=				nn.Linear(a_				,       dim_out * 2					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			if gate.device.type != "mps":
				return F.gelu(a_					)
			# mps: gelu is not implemented for float16
			return F.gelu(gate.to(dtype=torch.floataa					)					).to(dtype=gate.dtype					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			__snake_case	,							__snake_case	:						Tuple						=				self.proj(a_					).chunk(2				,       dim=-1					)
			return hidden_states * self.gelu(a_					)



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_					):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						Dict						=				nn.Linear(a_				,       a_					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_					):





			'''simple docstring'''

			__snake_case	:						Tuple						=				self.proj(a_					)
			return x * torch.sigmoid(1.702 * x					)



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_					):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						Union[str, Any]						=				nn.Embedding(a_				,       a_					)
			__snake_case	:						Any						=				nn.SiLU()
			__snake_case	:						str						=				nn.Linear(a_				,       embedding_dim * 2					)
			__snake_case	:						Dict						=				nn.LayerNorm(a_				,       elementwise_affine=a_					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_				,       a_					):





			'''simple docstring'''

			__snake_case	:						Union[str, Any]						=				self.linear(self.silu(self.emb(a_					)					)					)
			__snake_case	,							__snake_case	:						int						=				torch.chunk(a_				,       2					)
			__snake_case	:						Optional[int]						=				self.norm(a_					) * (1 + scale) + shift
			return x



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_					):





			'''simple docstring'''

			super().__init__()

			__snake_case	:						Optional[int]						=				CombinedTimestepLabelEmbeddings(a_				,       a_					)

			__snake_case	:						Optional[int]						=				nn.SiLU()
			__snake_case	:						List[str]						=				nn.Linear(a_				,       6 * embedding_dim				,       bias=a_					)
			__snake_case	:						str						=				nn.LayerNorm(a_				,       elementwise_affine=a_				,       eps=1E-6					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_				,       a_				,       a_				,       a_=None					):





			'''simple docstring'''

			__snake_case	:						Any						=				self.linear(self.silu(self.emb(a_				,       a_				,       hidden_dtype=a_					)					)					)
			__snake_case	,							__snake_case	,							__snake_case	,							__snake_case	,							__snake_case	,							__snake_case	:						str						=				emb.chunk(6				,       dim=1					)
			__snake_case	:						Any						=				self.norm(a_					) * (1 + scale_msa[:, None]) + shift_msa[:, None]
			return x, gate_msa, shift_mlp, scale_mlp, gate_mlp



class 			_UpperCAmelCase (							nn.Module				):






		'''simple docstring'''

		def __init__(self				,       a_				,       a_				,       a_				,       a_ = None				,       a_ = 1E-5					):





			'''simple docstring'''

			super().__init__()
			__snake_case	:						Optional[Any]						=				num_groups
			__snake_case	:						Any						=				eps

			if act_fn is None:
				__snake_case	:						Optional[Any]						=				None
			else:
				__snake_case	:						Tuple						=				get_activation(a_					)

			__snake_case	:						List[str]						=				nn.Linear(a_				,       out_dim * 2					)



		def 				SCREAMING_SNAKE_CASE  (self				,       a_				,       a_					):





			'''simple docstring'''

			if self.act:
				__snake_case	:						Dict						=				self.act(a_					)
			__snake_case	:						List[str]						=				self.linear(a_					)
			__snake_case	:						Tuple						=				emb[:, :, None, None]
			__snake_case	,							__snake_case	:						Optional[int]						=				emb.chunk(2				,       dim=1					)

			__snake_case	:						Union[str, Any]						=				F.group_norm(a_				,       self.num_groups				,       eps=self.eps					)
			__snake_case	:						int						=				x * (1 + scale) + shift
			return x







from typing import Optional, Tuple, Union

import tensorflow as tf

from ...activations_tf import ACTaFN
from ...file_utils import add_code_sample_docstrings, add_start_docstrings, add_start_docstrings_to_model_forward
from ...modeling_tf_outputs import (
    TFBaseModelOutputWithNoAttention,
    TFBaseModelOutputWithPoolingAndNoAttention,
    TFSequenceClassifierOutput,
)
from ...modeling_tf_utils import TFPreTrainedModel, TFSequenceClassificationLoss, keras_serializable, unpack_inputs
from ...tf_utils import shape_list
from ...utils import logging
from .configuration_regnet import RegNetConfig


SCREAMING_SNAKE_CASE							:str							 =				logging.get_logger(__name__)

# General docstring
SCREAMING_SNAKE_CASE							:str							 =				'RegNetConfig'

# Base docstring
SCREAMING_SNAKE_CASE							:List[str]							 =				'facebook/regnet-y-040'
SCREAMING_SNAKE_CASE							:Union[str, Any]							 =				[1, 1088, 7, 7]

# Image classification docstring
SCREAMING_SNAKE_CASE							:Optional[int]							 =				'facebook/regnet-y-040'
SCREAMING_SNAKE_CASE							:Any							 =				'tabby, tabby cat'

SCREAMING_SNAKE_CASE							:Optional[int]							 =				[
    'facebook/regnet-y-040',
    # See all regnet models at https://huggingface.co/models?filter=regnet
]





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: Tuple							,A					: int							,A					: int = 3							,A					: int = 1							,A					: int = 1							,A					: Optional[str] = "relu"							,**A					: Dict							,):
					super().__init__(**A )
					# The padding and conv has been verified in
					# https://colab.research.google.com/gist/sayakpaul/854bc10eeaf21c9ee2119e0b9f3841a7/scratchpad.ipynb
					__A   			= tf.keras.layers.ZeroPaddingaD(padding=kernel_size // 2 )
					__A   			= tf.keras.layers.ConvaD(
					    filters=A							,kernel_size=A							,strides=A							,padding="VALID"							,groups=A							,use_bias=A							,name="convolution"							,)
					__A   			= tf.keras.layers.BatchNormalization(epsilon=1E-5							,momentum=0.9							,name="normalization" )
					__A   			= ACTaFN[activation] if activation is not None else tf.identity







	def 				UpperCamelCase_  (       self					: List[Any]							,A					: Any ):
					__A   			= self.convolution(self.padding(A ) )
					__A   			= self.normalization(A )
					__A   			= self.activation(A )
					return hidden_state





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: Tuple							,A					: RegNetConfig							,**A					: str ):
					super().__init__(**A )
					__A   			= config.num_channels
					__A   			= TFRegNetConvLayer(
					    out_channels=config.embedding_size							,kernel_size=3							,stride=2							,activation=config.hidden_act							,name="embedder"							,)







	def 				UpperCamelCase_  (       self					: Tuple							,A					: Optional[Any] ):
					__A   			= shape_list(A )[1]
					if tf.executing_eagerly() and num_channels != self.num_channels:
									raise ValueError(
									    "Make sure that the channel dimension of the pixel values match with the one set in the configuration." )

					# When running on CPU, `tf.keras.layers.Conv2D` doesn't support `NCHW` format.
					# So change the input format from `NCHW` to `NHWC`.
					# shape = (batch_size, in_height, in_width, in_channels=num_channels)
					__A   			= tf.transpose(A							,perm=(0, 2, 3, 1) )
					__A   			= self.embedder(A )
					return hidden_state





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: Optional[int]							,A					: int							,A					: int = 2							,**A					: Tuple ):
					super().__init__(**A )
					__A   			= tf.keras.layers.ConvaD(
					    filters=A							,kernel_size=1							,strides=A							,use_bias=A							,name="convolution" )
					__A   			= tf.keras.layers.BatchNormalization(epsilon=1E-5							,momentum=0.9							,name="normalization" )







	def 				UpperCamelCase_  (       self					: Union[str, Any]							,A					: tf.Tensor							,A					: bool = False ):
					return self.normalization(self.convolution(A )							,training=A )





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: Dict							,A					: int							,A					: int							,**A					: str ):
					super().__init__(**A )
					__A   			= tf.keras.layers.GlobalAveragePoolingaD(keepdims=A							,name="pooler" )
					__A   			= [
					    tf.keras.layers.ConvaD(filters=A							,kernel_size=1							,activation="relu"							,name="attention.0" ),
					    tf.keras.layers.ConvaD(filters=A							,kernel_size=1							,activation="sigmoid"							,name="attention.2" ),
					]







	def 				UpperCamelCase_  (       self					: Dict							,A					: List[Any] ):
					# [batch_size, h, w, num_channels] -> [batch_size, 1, 1, num_channels]
					__A   			= self.pooler(A )
					for layer_module in self.attention:
									__A   			= layer_module(A )
					__A   			= hidden_state * pooled
					return hidden_state





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: List[str]							,A					: RegNetConfig							,A					: int							,A					: int							,A					: int = 1							,**A					: Optional[int] ):
					super().__init__(**A )
					__A   			= in_channels != out_channels or stride != 1
					__A   			= max(1							,out_channels // config.groups_width )
					__A   			= (
					    TFRegNetShortCut(A							,stride=A							,name="shortcut" )
					    if should_apply_shortcut
					    else tf.keras.layers.Activation("linear"							,name="shortcut" )
					)
					# `self.layers` instead of `self.layer` because that is a reserved argument.
					__A   			= [
					    TFRegNetConvLayer(A							,kernel_size=1							,activation=config.hidden_act							,name="layer.0" ),
					    TFRegNetConvLayer(
					        A							,stride=A							,groups=A							,activation=config.hidden_act							,name="layer.1" ),
					    TFRegNetConvLayer(A							,kernel_size=1							,activation=A							,name="layer.2" ),
					]
					__A   			= ACTaFN[config.hidden_act]







	def 				UpperCamelCase_  (       self					: int							,A					: Optional[int] ):
					__A   			= hidden_state
					for layer_module in self.layers:
									__A   			= layer_module(A )
					__A   			= self.shortcut(A )
					hidden_state += residual
					__A   			= self.activation(A )
					return hidden_state





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: List[Any]							,A					: RegNetConfig							,A					: int							,A					: int							,A					: int = 1							,**A					: str ):
					super().__init__(**A )
					__A   			= in_channels != out_channels or stride != 1
					__A   			= max(1							,out_channels // config.groups_width )
					__A   			= (
					    TFRegNetShortCut(A							,stride=A							,name="shortcut" )
					    if should_apply_shortcut
					    else tf.keras.layers.Activation("linear"							,name="shortcut" )
					)
					__A   			= [
					    TFRegNetConvLayer(A							,kernel_size=1							,activation=config.hidden_act							,name="layer.0" ),
					    TFRegNetConvLayer(
					        A							,stride=A							,groups=A							,activation=config.hidden_act							,name="layer.1" ),
					    TFRegNetSELayer(A							,reduced_channels=int(round(in_channels / 4 ) )							,name="layer.2" ),
					    TFRegNetConvLayer(A							,kernel_size=1							,activation=A							,name="layer.3" ),
					]
					__A   			= ACTaFN[config.hidden_act]







	def 				UpperCamelCase_  (       self					: Dict							,A					: Any ):
					__A   			= hidden_state
					for layer_module in self.layers:
									__A   			= layer_module(A )
					__A   			= self.shortcut(A )
					hidden_state += residual
					__A   			= self.activation(A )
					return hidden_state





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: List[str]							,A					: RegNetConfig							,A					: int							,A					: int							,A					: int = 2							,A					: int = 2							,**A					: Optional[int] ):
					super().__init__(**A )

					__A   			= TFRegNetXLayer if config.layer_type == "x" else TFRegNetYLayer
					__A   			= [
					    # downsampling is done in the first layer with stride of 2
					    layer(A							,A							,A							,stride=A							,name="layers.0" ),
					    *[layer(A							,A							,A							,name=f'''layers.{i+1}''' ) for i in range(depth - 1 )],
					]







	def 				UpperCamelCase_  (       self					: Any							,A					: List[str] ):
					for layer_module in self.layers:
									__A   			= layer_module(A )
					return hidden_state





class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	def __init__(       self					: Any							,A					: RegNetConfig							,**A					: List[str] ):
					super().__init__(**A )
					__A   			= []
					# based on `downsample_in_first_stage`, the first layer of the first stage may or may not downsample the input
					self.stages.append(
					    TFRegNetStage(
					        A							,config.embedding_size							,config.hidden_sizes[0]							,stride=2 if config.downsample_in_first_stage else 1							,depth=config.depths[0]							,name="stages.0"							,) )
					__A   			= zip(config.hidden_sizes							,config.hidden_sizes[1:] )
					for i, ((in_channels, out_channels), depth) in enumerate(zip(A							,config.depths[1:] ) ):
									self.stages.append(TFRegNetStage(A							,A							,A							,depth=A							,name=f'''stages.{i+1}''' ) )







	def 				UpperCamelCase_  (       self					: List[str]							,A					: tf.Tensor							,A					: bool = False							,A					: bool = True ):
					__A   			= () if output_hidden_states else None

					for stage_module in self.stages:
									if output_hidden_states:
													__A   			= hidden_states + (hidden_state,)

									__A   			= stage_module(A )

					if output_hidden_states:
									__A   			= hidden_states + (hidden_state,)

					if not return_dict:
									return tuple(v for v in [hidden_state, hidden_states] if v is not None )

					return TFBaseModelOutputWithNoAttention(last_hidden_state=A							,hidden_states=A )





@keras_serializable
class 							UpperCAmelCase      (  tf.keras.layers.Layer  ):




	'''simple docstring'''





	snake_case_					    =     RegNetConfig






	def __init__(       self					: int							,A					: Optional[int]							,**A					: Dict ):
					super().__init__(**A )
					__A   			= config
					__A   			= TFRegNetEmbeddings(A							,name="embedder" )
					__A   			= TFRegNetEncoder(A							,name="encoder" )
					__A   			= tf.keras.layers.GlobalAveragePoolingaD(keepdims=A							,name="pooler" )







	@unpack_inputs
	def 				UpperCamelCase_  (       self					: Tuple							,A					: tf.Tensor							,A					: Optional[bool] = None							,A					: Optional[bool] = None							,A					: bool = False							,):
					__A   			= (
					    output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
					)
					__A   			= return_dict if return_dict is not None else self.config.use_return_dict

					__A   			= self.embedder(A							,training=A )

					__A   			= self.encoder(
					    A							,output_hidden_states=A							,return_dict=A							,training=A )

					__A   			= encoder_outputs[0]
					__A   			= self.pooler(A )

					# Change to NCHW output format have uniformity in the modules
					__A   			= tf.transpose(A							,perm=(0, 3, 1, 2) )
					__A   			= tf.transpose(A							,perm=(0, 3, 1, 2) )

					# Change the other hidden state outputs to NCHW as well
					if output_hidden_states:
									__A   			= tuple([tf.transpose(A							,perm=(0, 3, 1, 2) ) for h in encoder_outputs[1]] )

					if not return_dict:
									return (last_hidden_state, pooled_output) + encoder_outputs[1:]

					return TFBaseModelOutputWithPoolingAndNoAttention(
					    last_hidden_state=A							,pooler_output=A							,hidden_states=hidden_states if output_hidden_states else encoder_outputs.hidden_states							,)





class 							UpperCAmelCase      (  __SCREAMING_SNAKE_CASE  ):




	'''simple docstring'''





	snake_case_					    =     RegNetConfig
	snake_case_					    =     "regnet"
	snake_case_					    =     "pixel_values"






	@property
	def 				UpperCamelCase_  (       self					: Optional[Any] ):
					return {"pixel_values": tf.TensorSpec(shape=(None, self.config.num_channels, 2_24, 2_24)							,dtype=tf.floataa )}





SCREAMING_SNAKE_CASE							:Dict							 =				R'\n    Parameters:\n    This model is a Tensorflow\n    [tf.keras.layers.Layer](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Layer) sub-class. Use it as a\n    regular Tensorflow Module and refer to the Tensorflow documentation for all matter related to general usage and\n    behavior.\n        config ([`RegNetConfig`]): Model configuration class with all the parameters of the model.\n            Initializing with a config file does not load the weights associated with the model, only the\n            configuration. Check out the [`~TFPreTrainedModel.from_pretrained`] method to load the model weights.\n'

SCREAMING_SNAKE_CASE							:Dict							 =				R'\n    Args:\n        pixel_values (`tf.Tensor` of shape `(batch_size, num_channels, height, width)`):\n            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See\n            [`ConveNextImageProcessor.__call__`] for details.\n        output_hidden_states (`bool`, *optional*):\n            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for\n            more detail.\n        return_dict (`bool`, *optional*):\n            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.\n'





@add_start_docstrings(
    "The bare RegNet model outputting raw features without any specific head on top."			,			__SCREAMING_SNAKE_CASE			,			)
class 							UpperCAmelCase      (  __SCREAMING_SNAKE_CASE  ):




	'''simple docstring'''





	def __init__(       self					: List[Any]							,A					: RegNetConfig							,*A					: List[Any]							,**A					: str ):
					super().__init__(A							,*A							,**A )
					__A   			= TFRegNetMainLayer(A							,name="regnet" )







	@unpack_inputs
	@add_start_docstrings_to_model_forward(A )
	@add_code_sample_docstrings(
	    checkpoint=_CHECKPOINT_FOR_DOC							,output_type=A							,config_class=_CONFIG_FOR_DOC							,modality="vision"							,expected_output=_EXPECTED_OUTPUT_SHAPE							,)
	def 				UpperCamelCase_  (       self					: Tuple							,A					: tf.Tensor							,A					: Optional[bool] = None							,A					: Optional[bool] = None							,A					: int=False							,):
					__A   			= (
					    output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
					)
					__A   			= return_dict if return_dict is not None else self.config.use_return_dict

					__A   			= self.regnet(
					    pixel_values=A							,output_hidden_states=A							,return_dict=A							,training=A							,)
					if not return_dict:
									return (outputs[0],) + outputs[1:]

					return TFBaseModelOutputWithPoolingAndNoAttention(
					    last_hidden_state=outputs.last_hidden_state							,pooler_output=outputs.pooler_output							,hidden_states=outputs.hidden_states							,)





@add_start_docstrings(
    "\n    RegNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for\n    ImageNet.\n    "			,			__SCREAMING_SNAKE_CASE			,			)
class 							UpperCAmelCase      (  __SCREAMING_SNAKE_CASE			,			__SCREAMING_SNAKE_CASE  ):




	'''simple docstring'''





	def __init__(       self					: Optional[int]							,A					: RegNetConfig							,*A					: str							,**A					: Tuple ):
					super().__init__(A							,*A							,**A )
					__A   			= config.num_labels
					__A   			= TFRegNetMainLayer(A							,name="regnet" )
					# classification head
					__A   			= [
					    tf.keras.layers.Flatten(),
					    tf.keras.layers.Dense(config.num_labels							,name="classifier.1" ) if config.num_labels > 0 else tf.identity,
					]







	@unpack_inputs
	@add_start_docstrings_to_model_forward(A )
	@add_code_sample_docstrings(
	    checkpoint=_IMAGE_CLASS_CHECKPOINT							,output_type=A							,config_class=_CONFIG_FOR_DOC							,expected_output=_IMAGE_CLASS_EXPECTED_OUTPUT							,)
	def 				UpperCamelCase_  (       self					: List[str]							,A					: tf.Tensor = None							,A					: tf.Tensor = None							,A					: bool = None							,A					: bool = None							,A					: Union[str, Any]=False							,):
					__A   			= (
					    output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
					)
					__A   			= return_dict if return_dict is not None else self.config.use_return_dict

					__A   			= self.regnet(
					    A							,output_hidden_states=A							,return_dict=A							,training=A )

					__A   			= outputs.pooler_output if return_dict else outputs[1]

					__A   			= self.classifier[0](A )
					__A   			= self.classifier[1](A )

					__A   			= None if labels is None else self.hf_compute_loss(labels=A							,logits=A )

					if not return_dict:
									__A   			= (logits,) + outputs[2:]
									return ((loss,) + output) if loss is not None else output

					return TFSequenceClassifierOutput(loss=A							,logits=A							,hidden_states=outputs.hidden_states )
