


from typing import Optional

import torch
import torch.utils.checkpoint
from torch import Tensor, nn
from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss

from ...activations import ACTaFN
from ...file_utils import add_code_sample_docstrings, add_start_docstrings, add_start_docstrings_to_model_forward
from ...modeling_outputs import (
    BaseModelOutputWithNoAttention,
    BaseModelOutputWithPoolingAndNoAttention,
    ImageClassifierOutputWithNoAttention,
)
from ...modeling_utils import PreTrainedModel
from ...utils import logging
from .configuration_regnet import RegNetConfig


A				:					List[str]    						=			logging.get_logger(__name__)

# General docstring
A				:					List[Any]    						=			"RegNetConfig"

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

# Image classification docstring
A				:					Tuple    						=			"facebook/regnet-y-040"
A				:					List[str]    						=			"tabby, tabby cat"

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


class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							List[str]				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]				,							SCREAMING_SNAKE_CASE      :							Tuple				,							SCREAMING_SNAKE_CASE      :							Dict = 3				,							SCREAMING_SNAKE_CASE      :							str = 1				,							SCREAMING_SNAKE_CASE      :							Dict = 1				,							SCREAMING_SNAKE_CASE      :							Any = "relu"				,							):
           super().__init__()
           _A					:     List[str]     = nn.Convad(
               _SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=_SCREAMING_SNAKE_CASE				,							stride=_SCREAMING_SNAKE_CASE				,							padding=kernel_size // 2				,							groups=_SCREAMING_SNAKE_CASE				,							bias=_SCREAMING_SNAKE_CASE				,							)
           _A					:     List[Any]     = nn.BatchNormad(_SCREAMING_SNAKE_CASE)
           _A					:     List[Any]     = ACTaFN[activation] if activation is not None else nn.Identity()


    def        A   (  self      :							Tuple				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]):
           _A					:     int     = self.convolution(_SCREAMING_SNAKE_CASE)
           _A					:     Union[str, Any]     = self.normalization(_SCREAMING_SNAKE_CASE)
           _A					:     List[str]     = self.activation(_SCREAMING_SNAKE_CASE)
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							Optional[Any]				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]):
           super().__init__()
           _A					:     str     = RegNetConvLayer(
               config.num_channels				,							config.embedding_size				,							kernel_size=3				,							stride=2				,							activation=config.hidden_act)
           _A					:     Optional[int]     = config.num_channels


    def        A   (  self      :							str				,							SCREAMING_SNAKE_CASE      :							Tuple):
           _A					:     int     = pixel_values.shape[1]
           if 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.')
           _A					:     str     = self.embedder(_SCREAMING_SNAKE_CASE)
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							List[str]				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]				,							SCREAMING_SNAKE_CASE      :							Optional[Any]				,							SCREAMING_SNAKE_CASE      :							Tuple = 2):
           super().__init__()
           _A					:     Any     = nn.Convad(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1				,							stride=_SCREAMING_SNAKE_CASE				,							bias=_SCREAMING_SNAKE_CASE)
           _A					:     List[str]     = nn.BatchNormad(_SCREAMING_SNAKE_CASE)


    def        A   (  self      :							Union[str, Any]				,							SCREAMING_SNAKE_CASE      :							Optional[int]):
           _A					:     List[str]     = self.convolution(_SCREAMING_SNAKE_CASE)
           _A					:     Optional[Any]     = self.normalization(_SCREAMING_SNAKE_CASE)
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							int				,							SCREAMING_SNAKE_CASE      :							str				,							SCREAMING_SNAKE_CASE      :							Optional[Any]):
           super().__init__()

           _A					:     Dict     = nn.AdaptiveAvgPoolad((1, 1))
           _A					:     str     = nn.Sequential(
               nn.Convad(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1)				,							nn.ReLU()				,							nn.Convad(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1)				,							nn.Sigmoid()				,							)


    def        A   (  self      :							str				,							SCREAMING_SNAKE_CASE      :							Dict):
           _A					:     Dict     = self.pooler(_SCREAMING_SNAKE_CASE)
           _A					:     List[str]     = self.attention(_SCREAMING_SNAKE_CASE)
           _A					:     List[str]     = hidden_state * attention
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							int				,							SCREAMING_SNAKE_CASE      :							int				,							SCREAMING_SNAKE_CASE      :							List[str]				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]				,							SCREAMING_SNAKE_CASE      :							Union[str, Any] = 1):
           super().__init__()
           _A					:     Tuple     = in_channels != out_channels or stride != 1
           _A					:     int     = max(1				,							out_channels // config.groups_width)
           _A					:     Optional[int]     = (
               RegNetShortCut(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							stride=_SCREAMING_SNAKE_CASE) if should_apply_shortcut else nn.Identity()
           )
           _A					:     str     = nn.Sequential(
               RegNetConvLayer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1				,							activation=config.hidden_act)				,							RegNetConvLayer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							stride=_SCREAMING_SNAKE_CASE				,							groups=_SCREAMING_SNAKE_CASE				,							activation=config.hidden_act)				,							RegNetConvLayer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1				,							activation=_SCREAMING_SNAKE_CASE)				,							)
           _A					:     Tuple     = ACTaFN[config.hidden_act]


    def        A   (  self      :							Union[str, Any]				,							SCREAMING_SNAKE_CASE      :							Optional[Any]):
           _A					:     Tuple     = hidden_state
           _A					:     List[Any]     = self.layer(_SCREAMING_SNAKE_CASE)
           _A					:     Union[str, Any]     = self.shortcut(_SCREAMING_SNAKE_CASE)
           hidden_state += residual
           _A					:     Tuple     = self.activation(_SCREAMING_SNAKE_CASE)
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							str				,							SCREAMING_SNAKE_CASE      :							Optional[Any]				,							SCREAMING_SNAKE_CASE      :							Optional[int]				,							SCREAMING_SNAKE_CASE      :							int				,							SCREAMING_SNAKE_CASE      :							List[Any] = 1):
           super().__init__()
           _A					:     Optional[Any]     = in_channels != out_channels or stride != 1
           _A					:     str     = max(1				,							out_channels // config.groups_width)
           _A					:     Any     = (
               RegNetShortCut(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							stride=_SCREAMING_SNAKE_CASE) if should_apply_shortcut else nn.Identity()
           )
           _A					:     List[str]     = nn.Sequential(
               RegNetConvLayer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1				,							activation=config.hidden_act)				,							RegNetConvLayer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							stride=_SCREAMING_SNAKE_CASE				,							groups=_SCREAMING_SNAKE_CASE				,							activation=config.hidden_act)				,							RegNetSELayer(_SCREAMING_SNAKE_CASE				,							reduced_channels=int(round(in_channels / 4)))				,							RegNetConvLayer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							kernel_size=1				,							activation=_SCREAMING_SNAKE_CASE)				,							)
           _A					:     Union[str, Any]     = ACTaFN[config.hidden_act]


    def        A   (  self      :							List[Any]				,							SCREAMING_SNAKE_CASE      :							str):
           _A					:     Union[str, Any]     = hidden_state
           _A					:     Tuple     = self.layer(_SCREAMING_SNAKE_CASE)
           _A					:     Dict     = self.shortcut(_SCREAMING_SNAKE_CASE)
           hidden_state += residual
           _A					:     Tuple     = self.activation(_SCREAMING_SNAKE_CASE)
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							List[Any]				,							SCREAMING_SNAKE_CASE      :							int				,							SCREAMING_SNAKE_CASE      :							List[Any]				,							SCREAMING_SNAKE_CASE      :							str				,							SCREAMING_SNAKE_CASE      :							Any = 2				,							SCREAMING_SNAKE_CASE      :							List[Any] = 2				,							):
           super().__init__()

           _A					:     Optional[int]     = RegNetXLayer if config.layer_type == """x""" else RegNetYLayer

           _A					:     Optional[int]     = nn.Sequential(
               # downsampling is done in the first layer with stride of 2
               layer(
                   _SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							stride=_SCREAMING_SNAKE_CASE				,							)				,							*[layer(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE) for _ in range(depth - 1)]				,							)


    def        A   (  self      :							List[str]				,							SCREAMING_SNAKE_CASE      :							List[str]):
           _A					:     int     = self.layers(_SCREAMING_SNAKE_CASE)
           return hidden_state




class 			__lowerCamelCase			(	nn.Module	):
    """simple docstring"""


    def __init__(  self      :							int				,							SCREAMING_SNAKE_CASE      :							List[Any]):
           super().__init__()
           _A					:     Optional[int]     = nn.ModuleList([])
           # based on `downsample_in_first_stage`, the first layer of the first stage may or may not downsample the input
           self.stages.append(
               RegNetStage(
                   _SCREAMING_SNAKE_CASE				,							config.embedding_size				,							config.hidden_sizes[0]				,							stride=2 if config.downsample_in_first_stage else 1				,							depth=config.depths[0]				,							))
           _A					:     Tuple     = zip(config.hidden_sizes				,							config.hidden_sizes[1:])
           for (in_channels, out_channels), depth in zip(_SCREAMING_SNAKE_CASE				,							config.depths[1:]):
                  self.stages.append(RegNetStage(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE				,							depth=_SCREAMING_SNAKE_CASE))


    def        A   (  self      :							Tuple				,							SCREAMING_SNAKE_CASE      :							Optional[Any]				,							SCREAMING_SNAKE_CASE      :							str = False				,							SCREAMING_SNAKE_CASE      :							Union[str, Any] = True):
           _A					:     List[Any]     = () if output_hidden_states else None

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

                  _A					:     str     = stage_module(_SCREAMING_SNAKE_CASE)

           if output_hidden_states:
                  _A					:     Union[str, Any]     = hidden_states + (hidden_state,)

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

           return BaseModelOutputWithNoAttention(last_hidden_state=_SCREAMING_SNAKE_CASE				,							hidden_states=_SCREAMING_SNAKE_CASE)




class 			__lowerCamelCase			(	UpperCAmelCase__	):
    """simple docstring"""
    a													=   RegNetConfig
    a													=   'regnet'
    a													=   'pixel_values'
    a													=   True


    def        A   (  self      :							Dict				,							SCREAMING_SNAKE_CASE      :							Dict):




           if isinstance(_SCREAMING_SNAKE_CASE				,							nn.Convad):
                  nn.init.kaiming_normal_(module.weight				,							mode='fan_out'				,							nonlinearity='relu')
           elif isinstance(_SCREAMING_SNAKE_CASE				,							(nn.BatchNormad, nn.GroupNorm)):
                  nn.init.constant_(module.weight				,							1)
                  nn.init.constant_(module.bias				,							0)


    def        A   (  self      :							str				,							SCREAMING_SNAKE_CASE      :							Optional[Any]				,							SCREAMING_SNAKE_CASE      :							str=False):




           if isinstance(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE):
                  _A					:     int     = value




A				:					List[Any]    						=			R"\n    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it\n    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and\n    behavior.\n\n    Parameters:\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 [`~PreTrainedModel.from_pretrained`] method to load the model weights.\n"

A				:					Dict    						=			R"\n    Args:\n        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):\n            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See\n            [`ConvNextImageProcessor.__call__`] for details.\n\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 [`~file_utils.ModelOutput`] instead of a plain tuple.\n"


@add_start_docstrings(
    "The bare RegNet model outputting raw features without any specific head on top."    , UpperCAmelCase__    , )
# Copied from transformers.models.resnet.modeling_resnet.ResNetModel with RESNET->REGNET,ResNet->RegNet
class 			__lowerCamelCase			(	UpperCAmelCase__	):
    """simple docstring"""


    def __init__(  self      :							Optional[int]				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]):
           super().__init__(_SCREAMING_SNAKE_CASE)
           _A					:     Optional[int]     = config
           _A					:     Tuple     = RegNetEmbeddings(_SCREAMING_SNAKE_CASE)
           _A					:     Dict     = RegNetEncoder(_SCREAMING_SNAKE_CASE)
           _A					:     Optional[int]     = nn.AdaptiveAvgPoolad((1, 1))
           # Initialize weights and apply final processing
           self.post_init()


    @add_start_docstrings_to_model_forward(_SCREAMING_SNAKE_CASE)
    @add_code_sample_docstrings(
        checkpoint=_CHECKPOINT_FOR_DOC				,							output_type=_SCREAMING_SNAKE_CASE				,							config_class=_CONFIG_FOR_DOC				,							modality='vision'				,							expected_output=_EXPECTED_OUTPUT_SHAPE				,							)
    def        A   (  self      :							Dict				,							SCREAMING_SNAKE_CASE      :							List[str]				,							SCREAMING_SNAKE_CASE      :							List[str] = None				,							SCREAMING_SNAKE_CASE      :							str = None):
           _A					:     str     = (
               output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
           )
           _A					:     List[Any]     = return_dict if return_dict is not None else self.config.use_return_dict

           _A					:     Optional[int]     = self.embedder(_SCREAMING_SNAKE_CASE)

           _A					:     Dict     = self.encoder(
               _SCREAMING_SNAKE_CASE				,							output_hidden_states=_SCREAMING_SNAKE_CASE				,							return_dict=_SCREAMING_SNAKE_CASE)

           _A					:     Any     = encoder_outputs[0]

           _A					:     Dict     = self.pooler(_SCREAMING_SNAKE_CASE)

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

           return BaseModelOutputWithPoolingAndNoAttention(
               last_hidden_state=_SCREAMING_SNAKE_CASE				,							pooler_output=_SCREAMING_SNAKE_CASE				,							hidden_states=encoder_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    "    , UpperCAmelCase__    , )
# Copied from transformers.models.resnet.modeling_resnet.ResNetForImageClassification with RESNET->REGNET,ResNet->RegNet,resnet->regnet
class 			__lowerCamelCase			(	UpperCAmelCase__	):
    """simple docstring"""


    def __init__(  self      :							int				,							SCREAMING_SNAKE_CASE      :							Union[str, Any]):
           super().__init__(_SCREAMING_SNAKE_CASE)
           _A					:     str     = config.num_labels
           _A					:     List[Any]     = RegNetModel(_SCREAMING_SNAKE_CASE)
           # classification head
           _A					:     Optional[Any]     = nn.Sequential(
               nn.Flatten()				,							nn.Linear(config.hidden_sizes[-1]				,							config.num_labels) if config.num_labels > 0 else nn.Identity()				,							)
           # initialize weights and apply final processing
           self.post_init()


    @add_start_docstrings_to_model_forward(_SCREAMING_SNAKE_CASE)
    @add_code_sample_docstrings(
        checkpoint=_IMAGE_CLASS_CHECKPOINT				,							output_type=_SCREAMING_SNAKE_CASE				,							config_class=_CONFIG_FOR_DOC				,							expected_output=_IMAGE_CLASS_EXPECTED_OUTPUT				,							)
    def        A   (  self      :							str				,							SCREAMING_SNAKE_CASE      :							Optional[Any] = None				,							SCREAMING_SNAKE_CASE      :							Tuple = None				,							SCREAMING_SNAKE_CASE      :							List[Any] = None				,							SCREAMING_SNAKE_CASE      :							Tuple = None				,							):
           _A					:     Any     = return_dict if return_dict is not None else self.config.use_return_dict

           _A					:     str     = self.regnet(_SCREAMING_SNAKE_CASE				,							output_hidden_states=_SCREAMING_SNAKE_CASE				,							return_dict=_SCREAMING_SNAKE_CASE)

           _A					:     Dict     = outputs.pooler_output if return_dict else outputs[1]

           _A					:     str     = self.classifier(_SCREAMING_SNAKE_CASE)

           _A					:     Any     = None

           if labels is not None:
                  if self.config.problem_type is None:
                         if self.num_labels == 1:
                                _A					:     Any     = """regression"""
                         elif self.num_labels > 1 and (labels.dtype == torch.long or labels.dtype == torch.int):
                                _A					:     List[Any]     = """single_label_classification"""
                         else:
                                _A					:     Any     = """multi_label_classification"""
                  if self.config.problem_type == "regression":
                         _A					:     Optional[int]     = MSELoss()
                         if self.num_labels == 1:
                                _A					:     Optional[Any]     = loss_fct(logits.squeeze()				,							labels.squeeze())
                         else:
                                _A					:     Union[str, Any]     = loss_fct(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE)
                  elif self.config.problem_type == "single_label_classification":
                         _A					:     Any     = CrossEntropyLoss()
                         _A					:     Optional[int]     = loss_fct(logits.view(-1				,							self.num_labels)				,							labels.view(-1))
                  elif self.config.problem_type == "multi_label_classification":
                         _A					:     Union[str, Any]     = BCEWithLogitsLoss()
                         _A					:     Optional[Any]     = loss_fct(_SCREAMING_SNAKE_CASE				,							_SCREAMING_SNAKE_CASE)

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

           return ImageClassifierOutputWithNoAttention(loss=_SCREAMING_SNAKE_CASE				,							logits=_SCREAMING_SNAKE_CASE				,							hidden_states=outputs.hidden_states)










'''simple docstring'''







from __future__ import annotations


class 			__lowerCamelCase			:
    """simple docstring"""


    def __init__(  self      :							Optional[Any]				,							SCREAMING_SNAKE_CASE      :							Tuple=None):
           _A					:     Any     = data
           _A					:     Optional[Any]     = None


    def __repr__(  self      :							List[str]):
           _A					:     List[Any]     = []
           _A					:     Any     = self
           while temp:
                  string_rep.append(F'{temp.data}')
                  _A					:     List[Any]     = temp.next
           return "->".join(SCREAMING_SNAKE_CASE)






def 				lowerCAmelCase__	(    lowerCamelCase					:      list       ):
       if not elements_list:
              raise Exception('The Elements List is empty'       )

       _A					:     Union[str, Any]     = Node(elements_list[0]       )
       for i in range(1  ,len(lowerCamelCase       )       ):
              _A					:     Dict     = Node(elements_list[i]       )
              _A					:     int     = current.next
       return head






def 				lowerCAmelCase__	(    lowerCamelCase					:      Node       ):
       if head_node is not None and isinstance(lowerCamelCase  ,lowerCamelCase       ):
              print_reverse(head_node.next       )
              print(head_node.data       )






def 				lowerCAmelCase__	(    ):
       from doctest import testmod

       testmod()

       _A					:     List[str]     = make_linked_list([14, 52, 14, 12, 43]       )
       print('Linked List:'       )
       print(lowerCamelCase       )
       print('Elements in Reverse:'       )
       print_reverse(lowerCamelCase       )


if __name__ == "__main__":
   main()






