





import json
import os
import pickle
import shutil
import tempfile
from unittest import TestCase
from unittest.mock import patch

import numpy as np
from datasets import Dataset

from transformers import is_faiss_available
from transformers.models.bart.configuration_bart import BartConfig
from transformers.models.bart.tokenization_bart import BartTokenizer
from transformers.models.bert.tokenization_bert import VOCAB_FILES_NAMES as DPR_VOCAB_FILES_NAMES
from transformers.models.dpr.configuration_dpr import DPRConfig
from transformers.models.dpr.tokenization_dpr import DPRContextEncoderTokenizer, DPRQuestionEncoderTokenizer
from transformers.models.rag.configuration_rag import RagConfig
from transformers.models.rag.retrieval_rag import CustomHFIndex, RagRetriever
from transformers.models.roberta.tokenization_roberta import VOCAB_FILES_NAMES as BART_VOCAB_FILES_NAMES
from transformers.testing_utils import require_faiss, require_sentencepiece, require_tokenizers, require_torch


if is_faiss_available():
      import faiss

@require_faiss
class 		UpperCamelCase__			(				lowerCAmelCase_       ):



     '''simple docstring'''

     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict	)					->		Any:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						tempfile.mkdtemp()
           SCREAMING_SNAKE_CASE		=						8

           # DPR tok
           SCREAMING_SNAKE_CASE		=						[
               """[UNK]""",
               """[CLS]""",
               """[SEP]""",
               """[PAD]""",
               """[MASK]""",
               """want""",
               """##want""",
               """##ed""",
               """wa""",
               """un""",
               """runn""",
               """##ing""",
               """,""",
               """low""",
               """lowest""",
           ]
           SCREAMING_SNAKE_CASE		=						os.path.join(self.tmpdirname						,"""dpr_tokenizer"""	)
           os.makedirs(lowerCamelCase__						,exist_ok=lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						os.path.join(lowerCamelCase__						,DPR_VOCAB_FILES_NAMES["""vocab_file"""]	)
           with open(self.vocab_file						,"""w"""						,encoding="""utf-8"""	) as vocab_writer:
                 vocab_writer.write("""""".join([x + """\n""" for x in vocab_tokens]	)	)

           # BART tok
           SCREAMING_SNAKE_CASE		=						[
               """l""",
               """o""",
               """w""",
               """e""",
               """r""",
               """s""",
               """t""",
               """i""",
               """d""",
               """n""",
               """\u0120""",
               """\u0120l""",
               """\u0120n""",
               """\u0120lo""",
               """\u0120low""",
               """er""",
               """\u0120lowest""",
               """\u0120newer""",
               """\u0120wider""",
               """<unk>""",
           ]
           SCREAMING_SNAKE_CASE		=						dict(zip(lowerCamelCase__						,range(len(lowerCamelCase__	)	)	)	)
           SCREAMING_SNAKE_CASE		=						["""#version: 0.2""", """\u0120 l""", """\u0120l o""", """\u0120lo w""", """e r""", """"""]
           SCREAMING_SNAKE_CASE		=						{"""unk_token""": """<unk>"""}

           SCREAMING_SNAKE_CASE		=						os.path.join(self.tmpdirname						,"""bart_tokenizer"""	)
           os.makedirs(lowerCamelCase__						,exist_ok=lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						os.path.join(lowerCamelCase__						,BART_VOCAB_FILES_NAMES["""vocab_file"""]	)
           SCREAMING_SNAKE_CASE		=						os.path.join(lowerCamelCase__						,BART_VOCAB_FILES_NAMES["""merges_file"""]	)
           with open(self.vocab_file						,"""w"""						,encoding="""utf-8"""	) as fp:
                 fp.write(json.dumps(lowerCamelCase__	) + """\n"""	)
           with open(self.merges_file						,"""w"""						,encoding="""utf-8"""	) as fp:
                 fp.write("""\n""".join(lowerCamelCase__	)	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Optional[Any]	)					->		DPRQuestionEncoderTokenizer:




           '''simple docstring'''


           return DPRQuestionEncoderTokenizer.from_pretrained(os.path.join(self.tmpdirname						,"""dpr_tokenizer"""	)	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Any	)					->		DPRContextEncoderTokenizer:




           '''simple docstring'''


           return DPRContextEncoderTokenizer.from_pretrained(os.path.join(self.tmpdirname						,"""dpr_tokenizer"""	)	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Any	)					->		BartTokenizer:




           '''simple docstring'''


           return BartTokenizer.from_pretrained(os.path.join(self.tmpdirname						,"""bart_tokenizer"""	)	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict	)					->		Dict:




           '''simple docstring'''


           shutil.rmtree(self.tmpdirname	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]	)					->		List[Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						Dataset.from_dict(
               {
                   """id""": ["""0""", """1"""],
                   """text""": ["""foo""", """bar"""],
                   """title""": ["""Foo""", """Bar"""],
                   """embeddings""": [np.ones(self.retrieval_vector_size	), 2 * np.ones(self.retrieval_vector_size	)],
               }	)
           dataset.add_faiss_index("""embeddings"""						,string_factory="""Flat"""						,metric_type=faiss.METRIC_INNER_PRODUCT	)
           return dataset






     def     SCREAMING_SNAKE_CASE__  (							self						:   Tuple	)					->		Union[str, Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dummy_dataset()
           SCREAMING_SNAKE_CASE		=						RagConfig(
               retrieval_vector_size=self.retrieval_vector_size						,question_encoder=DPRConfig().to_dict()						,generator=BartConfig().to_dict()						,)
           with patch("""transformers.models.rag.retrieval_rag.load_dataset"""	) as mock_load_dataset:
                 SCREAMING_SNAKE_CASE		=						dataset
                 SCREAMING_SNAKE_CASE		=						RagRetriever(
                     lowerCamelCase__						,question_encoder_tokenizer=self.get_dpr_tokenizer()						,generator_tokenizer=self.get_bart_tokenizer()						,)
           return retriever






     def     SCREAMING_SNAKE_CASE__  (							self						:   Tuple						,lowerCamelCase__						:   bool	)					->		Union[str, Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dummy_dataset()
           SCREAMING_SNAKE_CASE		=						RagConfig(
               retrieval_vector_size=self.retrieval_vector_size						,question_encoder=DPRConfig().to_dict()						,generator=BartConfig().to_dict()						,index_name="""custom"""						,)
           if from_disk:
                 SCREAMING_SNAKE_CASE		=						os.path.join(self.tmpdirname						,"""dataset"""	)
                 SCREAMING_SNAKE_CASE		=						os.path.join(self.tmpdirname						,"""index.faiss"""	)
                 dataset.get_index("""embeddings"""	).save(os.path.join(self.tmpdirname						,"""index.faiss"""	)	)
                 dataset.drop_index("""embeddings"""	)
                 dataset.save_to_disk(os.path.join(self.tmpdirname						,"""dataset"""	)	)
                 del dataset
                 SCREAMING_SNAKE_CASE		=						RagRetriever(
                     lowerCamelCase__						,question_encoder_tokenizer=self.get_dpr_tokenizer()						,generator_tokenizer=self.get_bart_tokenizer()						,)
           else:
                 SCREAMING_SNAKE_CASE		=						RagRetriever(
                     lowerCamelCase__						,question_encoder_tokenizer=self.get_dpr_tokenizer()						,generator_tokenizer=self.get_bart_tokenizer()						,index=CustomHFIndex(config.retrieval_vector_size						,lowerCamelCase__	)						,)
           return retriever






     def     SCREAMING_SNAKE_CASE__  (							self						:   Any	)					->		Tuple:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						Dataset.from_dict(
               {
                   """id""": ["""0""", """1"""],
                   """text""": ["""foo""", """bar"""],
                   """title""": ["""Foo""", """Bar"""],
                   """embeddings""": [np.ones(self.retrieval_vector_size + 1	), 2 * np.ones(self.retrieval_vector_size + 1	)],
               }	)
           dataset.add_faiss_index("""embeddings"""						,string_factory="""Flat"""						,metric_type=faiss.METRIC_INNER_PRODUCT	)

           SCREAMING_SNAKE_CASE		=						os.path.join(self.tmpdirname						,"""hf_bert_base.hnswSQ8_correct_phi_128.c_index"""	)
           dataset.save_faiss_index("""embeddings"""						,index_file_name + """.index.dpr"""	)
           pickle.dump(dataset["""id"""]						,open(index_file_name + """.index_meta.dpr"""						,"""wb"""	)	)

           SCREAMING_SNAKE_CASE		=						os.path.join(self.tmpdirname						,"""psgs_w100.tsv.pkl"""	)
           SCREAMING_SNAKE_CASE		=						{sample["""id"""]: [sample["""text"""], sample["""title"""]] for sample in dataset}
           pickle.dump(lowerCamelCase__						,open(lowerCamelCase__						,"""wb"""	)	)

           SCREAMING_SNAKE_CASE		=						RagConfig(
               retrieval_vector_size=self.retrieval_vector_size						,question_encoder=DPRConfig().to_dict()						,generator=BartConfig().to_dict()						,index_name="""legacy"""						,index_path=self.tmpdirname						,)
           SCREAMING_SNAKE_CASE		=						RagRetriever(
               lowerCamelCase__						,question_encoder_tokenizer=self.get_dpr_tokenizer()						,generator_tokenizer=self.get_bart_tokenizer()	)
           return retriever






     def     SCREAMING_SNAKE_CASE__  (							self						:   Tuple	)					->		List[Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						1
           SCREAMING_SNAKE_CASE		=						self.get_dummy_canonical_hf_index_retriever()
           SCREAMING_SNAKE_CASE		=						np.array(
               [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
           SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=lowerCamelCase__	)
           self.assertEqual(retrieved_doc_embeds.shape						,(2, n_docs, self.retrieval_vector_size)	)
           self.assertEqual(len(lowerCamelCase__	)						,2	)
           self.assertEqual(sorted(doc_dicts[0]	)						,["""embeddings""", """id""", """text""", """title"""]	)
           self.assertEqual(len(doc_dicts[0]["""id"""]	)						,lowerCamelCase__	)
           self.assertEqual(doc_dicts[0]["""id"""][0]						,"""1"""	)  # max inner product is reached with second doc
           self.assertEqual(doc_dicts[1]["""id"""][0]						,"""0"""	)  # max inner product is reached with first doc
           self.assertListEqual(doc_ids.tolist()						,[[1], [0]]	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict	)					->		Optional[Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dummy_canonical_hf_index_retriever()
           with tempfile.TemporaryDirectory() as tmp_dirname:
                 with patch("""transformers.models.rag.retrieval_rag.load_dataset"""	) as mock_load_dataset:
                       SCREAMING_SNAKE_CASE		=						self.get_dummy_dataset()
                       retriever.save_pretrained(lowerCamelCase__	)
                       SCREAMING_SNAKE_CASE		=						RagRetriever.from_pretrained(lowerCamelCase__	)
                       self.assertIsInstance(lowerCamelCase__						,lowerCamelCase__	)
                       SCREAMING_SNAKE_CASE		=						np.array(
                           [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
                       SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=1	)
                       self.assertTrue(out is not None	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Optional[int]	)					->		Tuple:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						1
           SCREAMING_SNAKE_CASE		=						self.get_dummy_custom_hf_index_retriever(from_disk=lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						np.array(
               [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
           SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=lowerCamelCase__	)
           self.assertEqual(retrieved_doc_embeds.shape						,(2, n_docs, self.retrieval_vector_size)	)
           self.assertEqual(len(lowerCamelCase__	)						,2	)
           self.assertEqual(sorted(doc_dicts[0]	)						,["""embeddings""", """id""", """text""", """title"""]	)
           self.assertEqual(len(doc_dicts[0]["""id"""]	)						,lowerCamelCase__	)
           self.assertEqual(doc_dicts[0]["""id"""][0]						,"""1"""	)  # max inner product is reached with second doc
           self.assertEqual(doc_dicts[1]["""id"""][0]						,"""0"""	)  # max inner product is reached with first doc
           self.assertListEqual(doc_ids.tolist()						,[[1], [0]]	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]	)					->		int:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dummy_custom_hf_index_retriever(from_disk=lowerCamelCase__	)
           with tempfile.TemporaryDirectory() as tmp_dirname:
                 retriever.save_pretrained(lowerCamelCase__	)
                 SCREAMING_SNAKE_CASE		=						RagRetriever.from_pretrained(lowerCamelCase__	)
                 self.assertIsInstance(lowerCamelCase__						,lowerCamelCase__	)
                 SCREAMING_SNAKE_CASE		=						np.array(
                     [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
                 SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=1	)
                 self.assertTrue(out is not None	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]	)					->		List[Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						1
           SCREAMING_SNAKE_CASE		=						self.get_dummy_custom_hf_index_retriever(from_disk=lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						np.array(
               [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
           SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=lowerCamelCase__	)
           self.assertEqual(retrieved_doc_embeds.shape						,(2, n_docs, self.retrieval_vector_size)	)
           self.assertEqual(len(lowerCamelCase__	)						,2	)
           self.assertEqual(sorted(doc_dicts[0]	)						,["""embeddings""", """id""", """text""", """title"""]	)
           self.assertEqual(len(doc_dicts[0]["""id"""]	)						,lowerCamelCase__	)
           self.assertEqual(doc_dicts[0]["""id"""][0]						,"""1"""	)  # max inner product is reached with second doc
           self.assertEqual(doc_dicts[1]["""id"""][0]						,"""0"""	)  # max inner product is reached with first doc
           self.assertListEqual(doc_ids.tolist()						,[[1], [0]]	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   Optional[Any]	)					->		Tuple:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dummy_custom_hf_index_retriever(from_disk=lowerCamelCase__	)
           with tempfile.TemporaryDirectory() as tmp_dirname:
                 retriever.save_pretrained(lowerCamelCase__	)
                 SCREAMING_SNAKE_CASE		=						RagRetriever.from_pretrained(lowerCamelCase__	)
                 self.assertIsInstance(lowerCamelCase__						,lowerCamelCase__	)
                 SCREAMING_SNAKE_CASE		=						np.array(
                     [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
                 SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=1	)
                 self.assertTrue(out is not None	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]	)					->		Dict:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						1
           SCREAMING_SNAKE_CASE		=						self.get_dummy_legacy_index_retriever()
           SCREAMING_SNAKE_CASE		=						np.array(
               [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
           SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=lowerCamelCase__	)
           self.assertEqual(retrieved_doc_embeds.shape						,(2, n_docs, self.retrieval_vector_size)	)
           self.assertEqual(len(lowerCamelCase__	)						,2	)
           self.assertEqual(sorted(doc_dicts[0]	)						,["""text""", """title"""]	)
           self.assertEqual(len(doc_dicts[0]["""text"""]	)						,lowerCamelCase__	)
           self.assertEqual(doc_dicts[0]["""text"""][0]						,"""bar"""	)  # max inner product is reached with second doc
           self.assertEqual(doc_dicts[1]["""text"""][0]						,"""foo"""	)  # max inner product is reached with first doc
           self.assertListEqual(doc_ids.tolist()						,[[1], [0]]	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]	)					->		str:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dummy_legacy_index_retriever()
           with tempfile.TemporaryDirectory() as tmp_dirname:
                 retriever.save_pretrained(lowerCamelCase__	)
                 SCREAMING_SNAKE_CASE		=						RagRetriever.from_pretrained(lowerCamelCase__	)
                 self.assertIsInstance(lowerCamelCase__						,lowerCamelCase__	)
                 SCREAMING_SNAKE_CASE		=						np.array(
                     [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
                 SCREAMING_SNAKE_CASE		=						retriever.retrieve(lowerCamelCase__						,n_docs=1	)
                 self.assertTrue(out is not None	)






     @require_torch
     @require_tokenizers
     @require_sentencepiece
     def     SCREAMING_SNAKE_CASE__  (							self						:   Union[str, Any]	)					->		str:




           '''simple docstring'''


           import torch

           SCREAMING_SNAKE_CASE		=						1
           SCREAMING_SNAKE_CASE		=						self.get_dummy_canonical_hf_index_retriever()
           SCREAMING_SNAKE_CASE		=						[[5, 7], [10, 11]]
           SCREAMING_SNAKE_CASE		=						np.array(
               [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
           SCREAMING_SNAKE_CASE		=						retriever(lowerCamelCase__						,lowerCamelCase__						,prefix=retriever.config.generator.prefix						,n_docs=lowerCamelCase__	)
           SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE		=						(
               out["""context_input_ids"""],
               out["""context_attention_mask"""],
               out["""retrieved_doc_embeds"""],
           )
           self.assertEqual(retrieved_doc_embeds.shape						,(2, n_docs, self.retrieval_vector_size)	)
           self.assertIsInstance(lowerCamelCase__						,lowerCamelCase__	)
           self.assertIsInstance(lowerCamelCase__						,lowerCamelCase__	)
           self.assertIsInstance(lowerCamelCase__						,np.ndarray	)

           SCREAMING_SNAKE_CASE		=						retriever(
               lowerCamelCase__						,lowerCamelCase__						,prefix=retriever.config.generator.prefix						,n_docs=lowerCamelCase__						,return_tensors="""pt"""						,)
           SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE, SCREAMING_SNAKE_CASE		=						(  # noqa: F841
               out["""context_input_ids"""],
               out["""context_attention_mask"""],
               out["""retrieved_doc_embeds"""],
               out["""doc_ids"""],
           )
           self.assertEqual(retrieved_doc_embeds.shape						,(2, n_docs, self.retrieval_vector_size)	)
           self.assertIsInstance(lowerCamelCase__						,torch.Tensor	)
           self.assertIsInstance(lowerCamelCase__						,torch.Tensor	)
           self.assertIsInstance(lowerCamelCase__						,torch.Tensor	)






     @require_torch
     @require_tokenizers
     @require_sentencepiece
     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict	)					->		str:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.get_dpr_ctx_encoder_tokenizer()
           SCREAMING_SNAKE_CASE		=						1
           SCREAMING_SNAKE_CASE		=						self.get_dummy_custom_hf_index_retriever(from_disk=lowerCamelCase__	)
           retriever.set_ctx_encoder_tokenizer(lowerCamelCase__	)

           SCREAMING_SNAKE_CASE		=						[[5, 7], [10, 11]]
           SCREAMING_SNAKE_CASE		=						np.array(
               [np.ones(self.retrieval_vector_size	), -np.ones(self.retrieval_vector_size	)]						,dtype=np.floataa	)
           SCREAMING_SNAKE_CASE		=						retriever(lowerCamelCase__						,lowerCamelCase__						,prefix=retriever.config.generator.prefix						,n_docs=lowerCamelCase__	)

           self.assertEqual(
               len(lowerCamelCase__	)						,6	)  # check whether the retriever output consist of 6 attributes including tokenized docs
           self.assertEqual(
               all(k in out for k in ("""tokenized_doc_ids""", """tokenized_doc_attention_mask""")	)						,lowerCamelCase__	)  # check for doc token related keys in dictionary.









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


SCREAMING_SNAKE_CASE_						       =	logging.get_logger(__name__)

# General docstring
SCREAMING_SNAKE_CASE_						       =	"""RegNetConfig"""

# Base docstring
SCREAMING_SNAKE_CASE_						       =	"""facebook/regnet-y-040"""
SCREAMING_SNAKE_CASE_						       =	[1, 1_0_8_8, 7, 7]

# Image classification docstring
SCREAMING_SNAKE_CASE_						       =	"""facebook/regnet-y-040"""
SCREAMING_SNAKE_CASE_						       =	"""tabby, tabby cat"""

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

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   str						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int = 3						,lowerCamelCase__						:   int = 1						,lowerCamelCase__						:   int = 1						,lowerCamelCase__						:   Optional[str] = "relu"						,)					->		Union[str, Any]:




           '''simple docstring'''


           super().__init__()
           SCREAMING_SNAKE_CASE		=						nn.Convad(
               lowerCamelCase__						,lowerCamelCase__						,kernel_size=lowerCamelCase__						,stride=lowerCamelCase__						,padding=kernel_size // 2						,groups=lowerCamelCase__						,bias=lowerCamelCase__						,)
           SCREAMING_SNAKE_CASE		=						nn.BatchNormad(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						ACTaFN[activation] if activation is not None else nn.Identity()






     def     SCREAMING_SNAKE_CASE__  (							self						:   Optional[Any]						,lowerCamelCase__						:   Tuple	)					->		str:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.convolution(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						self.normalization(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						self.activation(lowerCamelCase__	)
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   Optional[Any]						,lowerCamelCase__						:   RegNetConfig	)					->		List[str]:




           '''simple docstring'''


           super().__init__()
           SCREAMING_SNAKE_CASE		=						RegNetConvLayer(
               config.num_channels						,config.embedding_size						,kernel_size=3						,stride=2						,activation=config.hidden_act	)
           SCREAMING_SNAKE_CASE		=						config.num_channels






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]						,lowerCamelCase__						:   Optional[int]	)					->		Union[str, Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						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."""	)
           SCREAMING_SNAKE_CASE		=						self.embedder(lowerCamelCase__	)
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   List[Any]						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int = 2	)					->		List[str]:




           '''simple docstring'''


           super().__init__()
           SCREAMING_SNAKE_CASE		=						nn.Convad(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1						,stride=lowerCamelCase__						,bias=lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						nn.BatchNormad(lowerCamelCase__	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   str						,lowerCamelCase__						:   Tensor	)					->		Tensor:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.convolution(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						self.normalization(lowerCamelCase__	)
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   List[Any]						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int	)					->		int:




           '''simple docstring'''


           super().__init__()

           SCREAMING_SNAKE_CASE		=						nn.AdaptiveAvgPoolad((1, 1)	)
           SCREAMING_SNAKE_CASE		=						nn.Sequential(
               nn.Convad(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1	)						,nn.ReLU()						,nn.Convad(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1	)						,nn.Sigmoid()						,)






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]						,lowerCamelCase__						:   Any	)					->		int:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.pooler(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						self.attention(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						hidden_state * attention
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   Optional[int]						,lowerCamelCase__						:   RegNetConfig						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int = 1	)					->		str:




           '''simple docstring'''


           super().__init__()
           SCREAMING_SNAKE_CASE		=						in_channels != out_channels or stride != 1
           SCREAMING_SNAKE_CASE		=						max(1						,out_channels // config.groups_width	)
           SCREAMING_SNAKE_CASE		=						(
               RegNetShortCut(lowerCamelCase__						,lowerCamelCase__						,stride=lowerCamelCase__	) if should_apply_shortcut else nn.Identity()
           )
           SCREAMING_SNAKE_CASE		=						nn.Sequential(
               RegNetConvLayer(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1						,activation=config.hidden_act	)						,RegNetConvLayer(lowerCamelCase__						,lowerCamelCase__						,stride=lowerCamelCase__						,groups=lowerCamelCase__						,activation=config.hidden_act	)						,RegNetConvLayer(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1						,activation=lowerCamelCase__	)						,)
           SCREAMING_SNAKE_CASE		=						ACTaFN[config.hidden_act]






     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict						,lowerCamelCase__						:   Optional[Any]	)					->		str:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						hidden_state
           SCREAMING_SNAKE_CASE		=						self.layer(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						self.shortcut(lowerCamelCase__	)
           hidden_state += residual
           SCREAMING_SNAKE_CASE		=						self.activation(lowerCamelCase__	)
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   Dict						,lowerCamelCase__						:   RegNetConfig						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int = 1	)					->		Optional[int]:




           '''simple docstring'''


           super().__init__()
           SCREAMING_SNAKE_CASE		=						in_channels != out_channels or stride != 1
           SCREAMING_SNAKE_CASE		=						max(1						,out_channels // config.groups_width	)
           SCREAMING_SNAKE_CASE		=						(
               RegNetShortCut(lowerCamelCase__						,lowerCamelCase__						,stride=lowerCamelCase__	) if should_apply_shortcut else nn.Identity()
           )
           SCREAMING_SNAKE_CASE		=						nn.Sequential(
               RegNetConvLayer(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1						,activation=config.hidden_act	)						,RegNetConvLayer(lowerCamelCase__						,lowerCamelCase__						,stride=lowerCamelCase__						,groups=lowerCamelCase__						,activation=config.hidden_act	)						,RegNetSELayer(lowerCamelCase__						,reduced_channels=int(round(in_channels / 4	)	)	)						,RegNetConvLayer(lowerCamelCase__						,lowerCamelCase__						,kernel_size=1						,activation=lowerCamelCase__	)						,)
           SCREAMING_SNAKE_CASE		=						ACTaFN[config.hidden_act]






     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict						,lowerCamelCase__						:   Tuple	)					->		Tuple:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						hidden_state
           SCREAMING_SNAKE_CASE		=						self.layer(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						self.shortcut(lowerCamelCase__	)
           hidden_state += residual
           SCREAMING_SNAKE_CASE		=						self.activation(lowerCamelCase__	)
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   int						,lowerCamelCase__						:   RegNetConfig						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int						,lowerCamelCase__						:   int = 2						,lowerCamelCase__						:   int = 2						,)					->		Tuple:




           '''simple docstring'''


           super().__init__()

           SCREAMING_SNAKE_CASE		=						RegNetXLayer if config.layer_type == """x""" else RegNetYLayer

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






     def     SCREAMING_SNAKE_CASE__  (							self						:   Dict						,lowerCamelCase__						:   Union[str, Any]	)					->		Optional[Any]:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						self.layers(lowerCamelCase__	)
           return hidden_state

class 		UpperCamelCase__			(				nn.Module       ):



     '''simple docstring'''

     def __init__(							self						:   List[Any]						,lowerCamelCase__						:   RegNetConfig	)					->		str:




           '''simple docstring'''


           super().__init__()
           SCREAMING_SNAKE_CASE		=						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(
                   lowerCamelCase__						,config.embedding_size						,config.hidden_sizes[0]						,stride=2 if config.downsample_in_first_stage else 1						,depth=config.depths[0]						,)	)
           SCREAMING_SNAKE_CASE		=						zip(config.hidden_sizes						,config.hidden_sizes[1:]	)
           for (in_channels, out_channels), depth in zip(lowerCamelCase__						,config.depths[1:]	):
                 self.stages.append(RegNetStage(lowerCamelCase__						,lowerCamelCase__						,lowerCamelCase__						,depth=lowerCamelCase__	)	)






     def     SCREAMING_SNAKE_CASE__  (							self						:   int						,lowerCamelCase__						:   Tensor						,lowerCamelCase__						:   bool = False						,lowerCamelCase__						:   bool = True	)					->		BaseModelOutputWithNoAttention:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						() if output_hidden_states else None

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

                 SCREAMING_SNAKE_CASE		=						stage_module(lowerCamelCase__	)

           if output_hidden_states:
                 SCREAMING_SNAKE_CASE		=						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=lowerCamelCase__						,hidden_states=lowerCamelCase__	)

class 		UpperCamelCase__			(				lowerCAmelCase_       ):



     '''simple docstring'''

     __snake_case   :     List[Any]		     =      RegNetConfig
     __snake_case   :     Union[str, Any]		     =      "regnet"
     __snake_case   :     Optional[Any]		     =      "pixel_values"
     __snake_case   :     List[Any]		     =      True






     def     SCREAMING_SNAKE_CASE__  (							self						:   List[str]						,lowerCamelCase__						:   int	)					->		Any:




           '''simple docstring'''


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






     def     SCREAMING_SNAKE_CASE__  (							self						:   Union[str, Any]						,lowerCamelCase__						:   Tuple						,lowerCamelCase__						:   str=False	)					->		str:




           '''simple docstring'''


           if isinstance(lowerCamelCase__						,lowerCamelCase__	):
                 SCREAMING_SNAKE_CASE		=						value
SCREAMING_SNAKE_CASE_						       =	r"""
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`RegNetConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
"""

SCREAMING_SNAKE_CASE_						       =	r"""
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`ConvNextImageProcessor.__call__`] for details.

        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~file_utils.ModelOutput`] instead of a plain tuple.
"""

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



     '''simple docstring'''

     def __init__(							self						:   str						,lowerCamelCase__						:   str	)					->		Any:




           '''simple docstring'''


           super().__init__(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						config
           SCREAMING_SNAKE_CASE		=						RegNetEmbeddings(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						RegNetEncoder(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						nn.AdaptiveAvgPoolad((1, 1)	)
           # Initialize weights and apply final processing
           self.post_init()






     @add_start_docstrings_to_model_forward(lowerCamelCase__	)
     @add_code_sample_docstrings(
         checkpoint=_CHECKPOINT_FOR_DOC						,output_type=lowerCamelCase__						,config_class=_CONFIG_FOR_DOC						,modality="""vision"""						,expected_output=_EXPECTED_OUTPUT_SHAPE						,)
     def     SCREAMING_SNAKE_CASE__  (							self						:   Union[str, Any]						,lowerCamelCase__						:   Tensor						,lowerCamelCase__						:   Optional[bool] = None						,lowerCamelCase__						:   Optional[bool] = None	)					->		BaseModelOutputWithPoolingAndNoAttention:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						(
               output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
           )
           SCREAMING_SNAKE_CASE		=						return_dict if return_dict is not None else self.config.use_return_dict

           SCREAMING_SNAKE_CASE		=						self.embedder(lowerCamelCase__	)

           SCREAMING_SNAKE_CASE		=						self.encoder(
               lowerCamelCase__						,output_hidden_states=lowerCamelCase__						,return_dict=lowerCamelCase__	)

           SCREAMING_SNAKE_CASE		=						encoder_outputs[0]

           SCREAMING_SNAKE_CASE		=						self.pooler(lowerCamelCase__	)

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

           return BaseModelOutputWithPoolingAndNoAttention(
               last_hidden_state=lowerCamelCase__						,pooler_output=lowerCamelCase__						,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    "							,				lowerCAmelCase_							,				)
# Copied from transformers.models.resnet.modeling_resnet.ResNetForImageClassification with RESNET->REGNET,ResNet->RegNet,resnet->regnet
class 		UpperCamelCase__			(				lowerCAmelCase_       ):



     '''simple docstring'''

     def __init__(							self						:   Any						,lowerCamelCase__						:   Optional[int]	)					->		List[Any]:




           '''simple docstring'''


           super().__init__(lowerCamelCase__	)
           SCREAMING_SNAKE_CASE		=						config.num_labels
           SCREAMING_SNAKE_CASE		=						RegNetModel(lowerCamelCase__	)
           # classification head
           SCREAMING_SNAKE_CASE		=						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(lowerCamelCase__	)
     @add_code_sample_docstrings(
         checkpoint=_IMAGE_CLASS_CHECKPOINT						,output_type=lowerCamelCase__						,config_class=_CONFIG_FOR_DOC						,expected_output=_IMAGE_CLASS_EXPECTED_OUTPUT						,)
     def     SCREAMING_SNAKE_CASE__  (							self						:   str						,lowerCamelCase__						:   Optional[torch.FloatTensor] = None						,lowerCamelCase__						:   Optional[torch.LongTensor] = None						,lowerCamelCase__						:   Optional[bool] = None						,lowerCamelCase__						:   Optional[bool] = None						,)					->		ImageClassifierOutputWithNoAttention:




           '''simple docstring'''


           SCREAMING_SNAKE_CASE		=						return_dict if return_dict is not None else self.config.use_return_dict

           SCREAMING_SNAKE_CASE		=						self.regnet(lowerCamelCase__						,output_hidden_states=lowerCamelCase__						,return_dict=lowerCamelCase__	)

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

           SCREAMING_SNAKE_CASE		=						self.classifier(lowerCamelCase__	)

           SCREAMING_SNAKE_CASE		=						None

           if labels is not None:
                 if self.config.problem_type is None:
                       if self.num_labels == 1:
                             SCREAMING_SNAKE_CASE		=						"""regression"""
                       elif self.num_labels > 1 and (labels.dtype == torch.long or labels.dtype == torch.int):
                             SCREAMING_SNAKE_CASE		=						"""single_label_classification"""
                       else:
                             SCREAMING_SNAKE_CASE		=						"""multi_label_classification"""
                 if self.config.problem_type == "regression":
                       SCREAMING_SNAKE_CASE		=						MSELoss()
                       if self.num_labels == 1:
                             SCREAMING_SNAKE_CASE		=						loss_fct(logits.squeeze()						,labels.squeeze()	)
                       else:
                             SCREAMING_SNAKE_CASE		=						loss_fct(lowerCamelCase__						,lowerCamelCase__	)
                 elif self.config.problem_type == "single_label_classification":
                       SCREAMING_SNAKE_CASE		=						CrossEntropyLoss()
                       SCREAMING_SNAKE_CASE		=						loss_fct(logits.view(-1						,self.num_labels	)						,labels.view(-1	)	)
                 elif self.config.problem_type == "multi_label_classification":
                       SCREAMING_SNAKE_CASE		=						BCEWithLogitsLoss()
                       SCREAMING_SNAKE_CASE		=						loss_fct(lowerCamelCase__						,lowerCamelCase__	)

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

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


