



"""simple docstring"""


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


__A   :							Tuple										=   logging.get_logger(__name__)

__A   :							Optional[Any]										=   {
    "google/realm-cc-news-pretrained-embedder": (
        "https://huggingface.co/google/realm-cc-news-pretrained-embedder/resolve/main/config.json"
    ),
    "google/realm-cc-news-pretrained-encoder": (
        "https://huggingface.co/google/realm-cc-news-pretrained-encoder/resolve/main/config.json"
    ),
    "google/realm-cc-news-pretrained-scorer": (
        "https://huggingface.co/google/realm-cc-news-pretrained-scorer/resolve/main/config.json"
    ),
    "google/realm-cc-news-pretrained-openqa": (
        "https://huggingface.co/google/realm-cc-news-pretrained-openqa/aresolve/main/config.json"
    ),
    "google/realm-orqa-nq-openqa": "https://huggingface.co/google/realm-orqa-nq-openqa/resolve/main/config.json",
    "google/realm-orqa-nq-reader": "https://huggingface.co/google/realm-orqa-nq-reader/resolve/main/config.json",
    "google/realm-orqa-wq-openqa": "https://huggingface.co/google/realm-orqa-wq-openqa/resolve/main/config.json",
    "google/realm-orqa-wq-reader": "https://huggingface.co/google/realm-orqa-wq-reader/resolve/main/config.json",
    # See all REALM models at https://huggingface.co/models?filter=realm
}
class 			_a (					lowerCAmelCase):
			"""simple docstring"""
			UpperCamelCase__			      =	"""realm"""



			def __init__(		self     :    Tuple				,   __UpperCamelCase     :    Any=3_0_5_2_2				,   __UpperCamelCase     :    Tuple=7_6_8				,   __UpperCamelCase     :    Any=1_2_8				,   __UpperCamelCase     :    List[str]=1_2				,   __UpperCamelCase     :    Union[str, Any]=1_2				,   __UpperCamelCase     :    Any=8				,   __UpperCamelCase     :    Any=3_0_7_2				,   __UpperCamelCase     :    Any="gelu_new"				,   __UpperCamelCase     :    List[str]=0.1				,   __UpperCamelCase     :    Dict=0.1				,   __UpperCamelCase     :    int=5_1_2				,   __UpperCamelCase     :    str=2				,   __UpperCamelCase     :    Union[str, Any]=0.0_2				,   __UpperCamelCase     :    int=1e-12				,   __UpperCamelCase     :    Any=2_5_6				,   __UpperCamelCase     :    str=1_0				,   __UpperCamelCase     :    Dict=1e-3				,   __UpperCamelCase     :    Union[str, Any]=5				,   __UpperCamelCase     :    Union[str, Any]=3_2_0				,   __UpperCamelCase     :    str=1_3_3_5_3_7_1_8				,   __UpperCamelCase     :    List[Any]=5_0_0_0				,   __UpperCamelCase     :    Union[str, Any]=1				,   __UpperCamelCase     :    Any=0				,   __UpperCamelCase     :    List[Any]=2				,   **__UpperCamelCase     :    List[str]				,   )->List[Any]:
							super().__init__(pad_token_id=__UpperCamelCase				,   bos_token_id=__UpperCamelCase				,   eos_token_id=__UpperCamelCase				,   **__UpperCamelCase   )

							# Common config
							_UpperCAmelCase					=    vocab_size
							_UpperCAmelCase					=    max_position_embeddings
							_UpperCAmelCase					=    hidden_size
							_UpperCAmelCase					=    retriever_proj_size
							_UpperCAmelCase					=    num_hidden_layers
							_UpperCAmelCase					=    num_attention_heads
							_UpperCAmelCase					=    num_candidates
							_UpperCAmelCase					=    intermediate_size
							_UpperCAmelCase					=    hidden_act
							_UpperCAmelCase					=    hidden_dropout_prob
							_UpperCAmelCase					=    attention_probs_dropout_prob
							_UpperCAmelCase					=    initializer_range
							_UpperCAmelCase					=    type_vocab_size
							_UpperCAmelCase					=    layer_norm_eps

							# Reader config
							_UpperCAmelCase					=    span_hidden_size
							_UpperCAmelCase					=    max_span_width
							_UpperCAmelCase					=    reader_layer_norm_eps
							_UpperCAmelCase					=    reader_beam_size
							_UpperCAmelCase					=    reader_seq_len

							# Retrieval config
							_UpperCAmelCase					=    num_block_records
							_UpperCAmelCase					=    searcher_beam_size








"""simple docstring"""


import os
import tempfile
import unittest
from pathlib import Path

from transformers import AutoConfig, is_torch_available
from transformers.testing_utils import require_torch, torch_device


if is_torch_available():
					from transformers import PyTorchBenchmark, PyTorchBenchmarkArguments
@require_torch
class 			_a (					unittest.TestCase):
			"""simple docstring"""



			def  lowercase__						(		self     :    Tuple				,   __UpperCamelCase     :    str   )->Tuple:
							for model_result in results.values():
											for batch_size, sequence_length in zip(model_result['''bs''']				,   model_result['''ss''']   ):
															_UpperCAmelCase					=    model_result['''result'''][batch_size][sequence_length]
															self.assertIsNotNone(__UpperCamelCase   )



			def  lowercase__						(		self     :    Union[str, Any]   )->Optional[Any]:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			def  lowercase__						(		self     :    Tuple   )->Optional[Any]:
							_UpperCAmelCase					=    '''sgugger/tiny-distilbert-classification'''
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   only_pretrain_model=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			def  lowercase__						(		self     :    Tuple   )->str:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   torchscript=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			@unittest.skipIf(torch_device == '''cpu'''				,   '''Cant do half precision'''   )
			def  lowercase__						(		self     :    Any   )->Optional[Any]:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   fpaa=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			def  lowercase__						(		self     :    Tuple   )->Any:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    AutoConfig.from_pretrained(__UpperCamelCase   )
							# set architectures equal to `None`
							_UpperCAmelCase					=    None
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase				,   configs=[config]   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			def  lowercase__						(		self     :    List[Any]   )->str:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result   )
							self.check_results_dict_not_empty(results.memory_train_result   )



			@unittest.skipIf(torch_device == '''cpu'''				,   '''Can\'t do half precision'''   )
			def  lowercase__						(		self     :    List[str]   )->int:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   fpaa=__UpperCamelCase				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result   )
							self.check_results_dict_not_empty(results.memory_train_result   )



			def  lowercase__						(		self     :    str   )->Dict:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    AutoConfig.from_pretrained(__UpperCamelCase   )
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase				,   configs=[config]   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			def  lowercase__						(		self     :    Optional[int]   )->Optional[Any]:
							_UpperCAmelCase					=    '''sshleifer/tinier_bart'''
							_UpperCAmelCase					=    AutoConfig.from_pretrained(__UpperCamelCase   )
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase				,   configs=[config]   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_inference_result   )
							self.check_results_dict_not_empty(results.memory_inference_result   )



			def  lowercase__						(		self     :    List[str]   )->str:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							_UpperCAmelCase					=    AutoConfig.from_pretrained(__UpperCamelCase   )
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase				,   configs=[config]   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result   )
							self.check_results_dict_not_empty(results.memory_train_result   )



			def  lowercase__						(		self     :    Optional[int]   )->int:
							_UpperCAmelCase					=    '''sshleifer/tinier_bart'''
							_UpperCAmelCase					=    AutoConfig.from_pretrained(__UpperCamelCase   )
							_UpperCAmelCase					=    PyTorchBenchmarkArguments(
							    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   multi_process=__UpperCamelCase				,   )
							_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase				,   configs=[config]   )
							_UpperCAmelCase					=    benchmark.run()
							self.check_results_dict_not_empty(results.time_train_result   )
							self.check_results_dict_not_empty(results.memory_train_result   )



			def  lowercase__						(		self     :    Optional[Any]   )->int:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''
							with tempfile.TemporaryDirectory() as tmp_dir:
											_UpperCAmelCase					=    PyTorchBenchmarkArguments(
											    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   save_to_csv=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   inference_time_csv_file=os.path.join(__UpperCamelCase				,   '''inf_time.csv'''   )				,   train_memory_csv_file=os.path.join(__UpperCamelCase				,   '''train_mem.csv'''   )				,   inference_memory_csv_file=os.path.join(__UpperCamelCase				,   '''inf_mem.csv'''   )				,   train_time_csv_file=os.path.join(__UpperCamelCase				,   '''train_time.csv'''   )				,   env_info_csv_file=os.path.join(__UpperCamelCase				,   '''env.csv'''   )				,   multi_process=__UpperCamelCase				,   )
											_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
											benchmark.run()
											self.assertTrue(Path(os.path.join(__UpperCamelCase				,   '''inf_time.csv'''   )   ).exists()   )
											self.assertTrue(Path(os.path.join(__UpperCamelCase				,   '''train_time.csv'''   )   ).exists()   )
											self.assertTrue(Path(os.path.join(__UpperCamelCase				,   '''inf_mem.csv'''   )   ).exists()   )
											self.assertTrue(Path(os.path.join(__UpperCamelCase				,   '''train_mem.csv'''   )   ).exists()   )
											self.assertTrue(Path(os.path.join(__UpperCamelCase				,   '''env.csv'''   )   ).exists()   )



			def  lowercase__						(		self     :    Tuple   )->List[Any]:
							_UpperCAmelCase					=    '''sshleifer/tiny-gpt2'''

							def _check_summary_is_not_empty(__UpperCamelCase     :    str   ):
											self.assertTrue(hasattr(__UpperCamelCase				,   '''sequential'''   )   )
											self.assertTrue(hasattr(__UpperCamelCase				,   '''cumulative'''   )   )
											self.assertTrue(hasattr(__UpperCamelCase				,   '''current'''   )   )
											self.assertTrue(hasattr(__UpperCamelCase				,   '''total'''   )   )

							with tempfile.TemporaryDirectory() as tmp_dir:
											_UpperCAmelCase					=    PyTorchBenchmarkArguments(
											    models=[MODEL_ID]				,   training=__UpperCamelCase				,   inference=__UpperCamelCase				,   sequence_lengths=[8]				,   batch_sizes=[1]				,   log_filename=os.path.join(__UpperCamelCase				,   '''log.txt'''   )				,   log_print=__UpperCamelCase				,   trace_memory_line_by_line=__UpperCamelCase				,   multi_process=__UpperCamelCase				,   )
											_UpperCAmelCase					=    PyTorchBenchmark(__UpperCamelCase   )
											_UpperCAmelCase					=    benchmark.run()
											_check_summary_is_not_empty(result.inference_summary   )
											_check_summary_is_not_empty(result.train_summary   )
											self.assertTrue(Path(os.path.join(__UpperCamelCase				,   '''log.txt'''   )   ).exists()   )



