





"""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


a_					=     logging.get_logger(__name__)






@dataclass
class 						__snake_case   (						SCREAMING_SNAKE_CASE__	):





 """simple docstring"""


 _lowerCamelCase								=	[
     """no_inference""",
     """no_cuda""",
     """no_tpu""",
     """no_speed""",
     """no_memory""",
     """no_env_print""",
     """no_multi_process""",
 ]

 def __init__(       self   ,		**__lowerCamelCase    ):



     '''simple docstring'''




     for deprecated_arg in self.deprecated_args:
         if deprecated_arg in kwargs:
             __A       :		Any							=	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       :		Optional[Any]							=	kwargs.pop('''torchscript'''   ,		self.torchscript    )
     __A       :		List[Any]							=	kwargs.pop('''torch_xla_tpu_print_metrics'''   ,		self.torch_xla_tpu_print_metrics    )
     __A       :		Any							=	kwargs.pop('''fp16_opt_level'''   ,		self.fpaa_opt_level    )
     super().__init__(**__lowerCamelCase    )

 _lowerCamelCase								=	field(default=SCREAMING_SNAKE_CASE__				,				metadata={"""help""": """Trace the models using torchscript"""}	)
 _lowerCamelCase								=	field(default=SCREAMING_SNAKE_CASE__				,				metadata={"""help""": """Print Xla/PyTorch tpu metrics"""}	)
 _lowerCamelCase								=	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    UpperCamelCase__(       self    ):



     '''simple docstring'''




     requires_backends(self   ,		['''torch''']    )
     logger.info('''PyTorch: setting up devices'''    )
     if not self.cuda:
         __A       :		Union[str, Any]							=	torch.device('''cpu'''    )
         __A       :		Dict							=	0
     elif is_torch_tpu_available():
         __A       :		Tuple							=	xm.xla_device()
         __A       :		str							=	0
     else:
         __A       :		str							=	torch.device('''cuda''' if torch.cuda.is_available() else '''cpu'''    )
         __A       :		Union[str, Any]							=	torch.cuda.device_count()
     return device, n_gpu

 @property
 def    UpperCamelCase__(       self    ):



     '''simple docstring'''




     return is_torch_tpu_available() and self.tpu

 @property
 def    UpperCamelCase__(       self    ):



     '''simple docstring'''




     requires_backends(self   ,		['''torch''']    )
     # TODO(PVP): currently only single GPU is supported
     return torch.cuda.current_device()

 @property
 def    UpperCamelCase__(       self    ):



     '''simple docstring'''




     requires_backends(self   ,		['''torch''']    )
     return self._setup_devices[0]

 @property
 def    UpperCamelCase__(       self    ):



     '''simple docstring'''




     requires_backends(self   ,		['''torch''']    )
     return self._setup_devices[1]







 @property
 def    UpperCamelCase__(       self    ):



     '''simple docstring'''




     return self.n_gpu > 0











"""simple docstring"""



def 						__lowercase	(  snake_case_    :    int							,snake_case_    :    int		)  ->int:



    '''simple docstring'''







    return int((input_a, input_a).count(0		) == 0		)







def 						__lowercase	(  )  ->None:



    '''simple docstring'''







    assert and_gate(0							,0		) == 0
    assert and_gate(0							,1		) == 0
    assert and_gate(1							,0		) == 0
    assert and_gate(1							,1		) == 1


if __name__ == "__main__":
       test_and_gate()
       print(and_gate(1, 0))
       print(and_gate(0, 0))
       print(and_gate(0, 1))
       print(and_gate(1, 1))




