"""simple docstring"""




from dataclasses import dataclass, field
from typing import Tuple

from ..utils import cached_property, is_torch_available, is_torch_tpu_available, logging, requires_backends
from .benchmark_args_utils import BenchmarkArguments


if is_torch_available():
				import torch

if is_torch_tpu_available(check_device=False):
				import torch_xla.core.xla_model as xm


__lowerCamelCase							 =     logging.get_logger(__name__)
@dataclass
class 			UpperCamelCase__(	lowerCamelCase__       ):
						lowerCAmelCase__     :  Any  							=						[
						    '''no_inference''',
						    '''no_cuda''',
						    '''no_tpu''',
						    '''no_speed''',
						    '''no_memory''',
						    '''no_env_print''',
						    '''no_multi_process''',
						]





						def __init__(				self						,**__UpperCAmelCase   )    -> Any:






													for deprecated_arg in self.deprecated_args:
																				if deprecated_arg in kwargs:
																											A__		   =							deprecated_arg[3:]
																											setattr(self						,lowerCAmelCase__						,not kwargs.pop(lowerCAmelCase__   )   )
																											logger.warning(
																											    f'''{deprecated_arg} is depreciated. Please use --no_{positive_arg} or'''
																											    f''' {positive_arg}={kwargs[positive_arg]}'''   )

													A__		   =							kwargs.pop('torchscript'						,self.torchscript   )
													A__		   =							kwargs.pop('torch_xla_tpu_print_metrics'						,self.torch_xla_tpu_print_metrics   )
													A__		   =							kwargs.pop('fp16_opt_level'						,self.fpaa_opt_level   )
													super().__init__(**lowerCAmelCase__   )

						lowerCAmelCase__     :  bool  							=						field(default=lowerCamelCase__						,  metadata={'help': 'Trace the models using torchscript'}       )
						lowerCAmelCase__     :  bool  							=						field(default=lowerCamelCase__						,  metadata={'help': 'Print Xla/PyTorch tpu metrics'}       )
						lowerCAmelCase__     :  str  							=						field(
						    default='O1'						,  metadata={
						        'help': (
						            'For fp16: Apex AMP optimization level selected in [\'O0\', \'O1\', \'O2\', and \'O3\']. '
						            'See details at https://nvidia.github.io/apex/amp.html'
						        )
						    }						,  )





						@cached_property
						def  snake_case__		(				self   )    -> Union[str, Any]:
													requires_backends(self						,['torch']   )
													logger.info('PyTorch: setting up devices'   )
													if not self.cuda:
																				A__		   =							torch.device('cpu'   )
																				A__		   =							0
													elif is_torch_tpu_available():
																				A__		   =							xm.xla_device()
																				A__		   =							0
													else:
																				A__		   =							torch.device('cuda' if torch.cuda.is_available() else 'cpu'   )
																				A__		   =							torch.cuda.device_count()
													return device, n_gpu





						@property
						def  snake_case__		(				self   )    -> List[str]:
													return is_torch_tpu_available() and self.tpu





						@property
						def  snake_case__		(				self   )    -> Any:
													requires_backends(self						,['torch']   )
													# TODO(PVP): currently only single GPU is supported
													return torch.cuda.current_device()





						@property
						def  snake_case__		(				self   )    -> List[Any]:
													requires_backends(self						,['torch']   )
													return self._setup_devices[0]





						@property
						def  snake_case__		(				self   )    -> Optional[int]:
													requires_backends(self						,['torch']   )
													return self._setup_devices[1]





						@property
						def  snake_case__		(				self   )    -> Tuple:
													return self.n_gpu > 0










'''simple docstring'''




def 				lowerCAmelCase_   (	_lowerCamelCase:   float       ,      _lowerCamelCase:   list[float]					):
		if discount_rate < 0:
				raise ValueError("""Discount rate cannot be negative"""					)
		if not cash_flows:
				raise ValueError("""Cash flows list cannot be empty"""					)
		__SCREAMING_SNAKE_CASE       :		List[str]           =		sum(
		    cash_flow / ((1 + discount_rate) ** i) for i, cash_flow in enumerate(_lowerCamelCase					)					)
		return round(_lowerCamelCase       ,      ndigits=2					)


if __name__ == "__main__":
						import doctest

						doctest.testmod()