def checkArgs(args: argparse.Namespace) -> None: good_modes: Iterable[str] = ("generate", "execute", "analyze") if args.mode not in good_modes: fatalError( "'mode' is a required positional argument - options are 'generate', 'execute', 'analyze'" ) if args.mode == "generate": _checkGenerateArgs(args)
def _checkGenerateArgs(args: argparse.Namespace) -> None: if args.gmx_version not in _SUPPORTED_GMX_VERSIONS: fatalError("Invalid gmx version {}, must be one of {}".format( args.gmx_version, sorted(_SUPPORTED_GMX_VERSIONS))) if not args.cpu_ids and not args.num_cpus: fatalError("One of --cpu_ids or --num_cpus is required") if args.num_cpus: if args.cpu_ids: fatalError("Cannot specify both --cpu_ids and --num_cpus") args.cpu_ids = ",".join( [str(identifier) for identifier in range(args.num_cpus)]) if not args.gpu_ids and not args.num_gpus: fatalError("One of --gpu_ids or --num_gpus is required") if args.num_gpus: if args.gpu_ids: fatalError("Cannot specify both --gpu_ids and --num_gpus") args.gpu_ids = ",".join( [str(identifier) for identifier in range(args.num_gpus)])
def checkProcessorIDContent(cpu_ids: List[int]): """ Given an assigned value for cpu_ids, assure that 1. It is a list 2. The list contains all integers 3. The stride between integers is consistent. Exits the program if a condition is not met. """ if not isinstance(cpu_ids, list): utils.fatalError("Expected a list for parameter 'cpu_ids'") if not all([isinstance(i, int) and i >= 0 for i in cpu_ids]): utils.fatalError("Not all values in 'cpu_ids' are ints") # case of empty list if not cpu_ids: return if len(cpu_ids) > 1: diff: int = cpu_ids[1] - cpu_ids[0] for i, val in enumerate(cpu_ids[:-1]): if (cpu_ids[i + 1] - val) != diff: utils.fatalError("Inconsistent stride between cpu ids")
def gpu_ids(self, gpu_ids: List[int]): try: for item in gpu_ids: if not isinstance(item, int): utils.fatalError( "All gpu ids must be integers: {} is not an int". format(item)) if item < 0: utils.fatalError("Cannot have a negative GPU ID") self._gpu_ids = gpu_ids except TypeError: utils.fatalError("gpu_ids paramater must be iterable")
def testExitsCleanly(self): with self.assertRaises(SystemExit) as cm: utils.fatalError("message") self.assertEqual(cm.exception.code, 1)
def testWritesMessage(self): with self.assertRaises(SystemExit): utils.fatalError("message")