

"""simple docstring"""






from dataclasses import dataclass, field
from typing import Tuple

from ..utils import cached_property, is_tf_available, logging, requires_backends
from .benchmark_args_utils import BenchmarkArguments


if is_tf_available():
	import tensorflow as tf


snake_case_   :   Tuple        =       logging.get_logger(__name__)







@dataclass
class       snake_case__  ( __a     ):
			SCREAMING_SNAKE_CASE__     				=						[
			    '''no_inference''',
			    '''no_cuda''',
			    '''no_tpu''',
			    '''no_speed''',
			    '''no_memory''',
			    '''no_env_print''',
			    '''no_multi_process''',
			]







			def __init__(			self			: Tuple			,  **lowercase			: Union[str, Any]  ):





								'''simple docstring'''



								for deprecated_arg in self.deprecated_args:
													if deprecated_arg in kwargs:
																		UpperCAmelCase			:   Union[str, Any]      =				deprecated_arg[3:]
																		UpperCAmelCase			:   List[str]      =				not kwargs.pop(A__  )
																		logger.warning(
																		    f"""{deprecated_arg} is depreciated. Please use --no-{positive_arg} or"""
																		    f""" {positive_arg}={kwargs[positive_arg]}"""  )
								UpperCAmelCase			:   Optional[int]      =				kwargs.pop("tpu_name"			,  self.tpu_name  )
								UpperCAmelCase			:   List[Any]      =				kwargs.pop("device_idx"			,  self.device_idx  )
								UpperCAmelCase			:   str      =				kwargs.pop("eager_mode"			,  self.eager_mode  )
								UpperCAmelCase			:   List[Any]      =				kwargs.pop("use_xla"			,  self.use_xla  )
								super().__init__(**A__  )

			SCREAMING_SNAKE_CASE__     				=						field(
			    default=__a					,  metadata={'''help''': '''Name of TPU'''}					,  )
			SCREAMING_SNAKE_CASE__     				=						field(
			    default=0					,  metadata={'''help''': '''CPU / GPU device index. Defaults to 0.'''}					,  )
			SCREAMING_SNAKE_CASE__     				=						field(default=__a					,  metadata={'''help''': '''Benchmark models in eager model.'''}     )
			SCREAMING_SNAKE_CASE__     				=						field(
			    default=__a					,  metadata={
			        '''help''': '''Benchmark models using XLA JIT compilation. Note that `eager_model` has to be set to `False`.'''
			    }					,  )







			@cached_property
			def 			__lowerCAmelCase				(			self			: Optional[Any]  ):





								'''simple docstring'''



								requires_backends(self			,  ["tf"]  )
								UpperCAmelCase			:   Optional[Any]      =				None
								if self.tpu:
													try:
																		if self.tpu_name:
																							UpperCAmelCase			:   Dict      =				tf.distribute.cluster_resolver.TPUClusterResolver(self.tpu_name  )
																		else:
																							UpperCAmelCase			:   int      =				tf.distribute.cluster_resolver.TPUClusterResolver()
													except ValueError:
																		UpperCAmelCase			:   Optional[int]      =				None
								return tpu







			@cached_property
			def 			__lowerCAmelCase				(			self			: List[Any]  ):





								'''simple docstring'''



								requires_backends(self			,  ["tf"]  )
								if self.is_tpu:
													tf.config.experimental_connect_to_cluster(self._setup_tpu  )
													tf.tpu.experimental.initialize_tpu_system(self._setup_tpu  )

													UpperCAmelCase			:   Union[str, Any]      =				tf.distribute.TPUStrategy(self._setup_tpu  )
								else:
													# currently no multi gpu is allowed
													if self.is_gpu:
																		# TODO: Currently only single GPU is supported
																		tf.config.set_visible_devices(self.gpu_list[self.device_idx]			,  "GPU"  )
																		UpperCAmelCase			:   List[str]      =				tf.distribute.OneDeviceStrategy(device=f"""/gpu:{self.device_idx}"""  )
													else:
																		tf.config.set_visible_devices([]			,  "GPU"  )  # disable GPU
																		UpperCAmelCase			:   Any      =				tf.distribute.OneDeviceStrategy(device=f"""/cpu:{self.device_idx}"""  )

								return strategy







			@property
			def 			__lowerCAmelCase				(			self			: Dict  ):





								'''simple docstring'''



								requires_backends(self			,  ["tf"]  )
								return self._setup_tpu is not None







			@property
			def 			__lowerCAmelCase				(			self			: Tuple  ):





								'''simple docstring'''



								requires_backends(self			,  ["tf"]  )
								return self._setup_strategy







			@property
			def 			__lowerCAmelCase				(			self			: Dict  ):





								'''simple docstring'''



								requires_backends(self			,  ["tf"]  )
								return tf.config.list_physical_devices("GPU"  )







			@property
			def 			__lowerCAmelCase				(			self			: Optional[int]  ):





								'''simple docstring'''



								requires_backends(self			,  ["tf"]  )
								if self.cuda:
													return len(self.gpu_list  )
								return 0







			@property
			def 			__lowerCAmelCase				(			self			: Tuple  ):





								'''simple docstring'''



								return self.n_gpu > 0









"""simple docstring"""






def   lowercase_	(    _lowercase       :		int							,      _lowercase       :		int	):




					'''simple docstring'''






					return int(input_a == input_a == 0	)



def   lowercase_	(    ):




					'''simple docstring'''






					print("Truth Table of NOR Gate:"	)
					print("|   Input 1   |  Input 2  | Output |"	)
					print(F"""|      0      |    0      |  {nor_gate(0							,      0	)}     |"""	)
					print(F"""|      0      |    1      |  {nor_gate(0							,      1	)}     |"""	)
					print(F"""|      1      |    0      |  {nor_gate(1							,      0	)}     |"""	)
					print(F"""|      1      |    1      |  {nor_gate(1							,      1	)}     |"""	)


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	main()


