def parse_threshold(value): if ":" not in value: size1 = utils.sizestr_to_int(value) size2 = size1 else: values = value.split(":", 1) size1 = utils.sizestr_to_int(values[0]) size2 = utils.sizestr_to_int(values[1]) if size1 is None or size2 is None: return None return (size1, size2)
def parse_args(): parser = argparse.ArgumentParser(description= "Aislinn -- Statespace analytical tool for MPI applications") parser.add_argument("program", metavar="PROGRAM", type=str, help="Path to your program") parser.add_argument("args", type=str, nargs=argparse.REMAINDER, help="Arguments for your program") parser.add_argument("-p", metavar="N", type=int, default=1, help="Number of processes") parser.add_argument("--verbose", metavar="N", type=int, default=1, help="Verbosity level (default: 1)") parser.add_argument("--vgv", metavar="N", type=int, default=0, help="Verbosity of valgrind tool") parser.add_argument("--heap-size", metavar="SIZE", type=str, help="Maximal size of heap") parser.add_argument("--redzone-size", metavar="SIZE", type=int, help="Allocation red zones") parser.add_argument("-S", "--send-protocol", metavar="VALUE", type=str, help="Standard send protocol.", default="full") parser.add_argument("--report-type", metavar="TYPE", choices=["html", "xml", "none", "html+xml"], help="Output type: xml, html, none", default="html") parser.add_argument("--max-states", metavar="N", type=int, default=9999999) parser.add_argument('--stdout', metavar="MODE", choices=["capture", "capture", "print", "drop"], default="capture", help="") parser.add_argument('--stdout-write', metavar="N", type=str, default="0", help="") parser.add_argument('--stderr', metavar="MODE", choices=["capture", "capture", "print", "drop", "stdout"], default="capture", help="") parser.add_argument('--stderr-write', metavar="N", type=str, default="0", help="0") parser.add_argument("--search", metavar="SEARCH", type=str, default="bfs", help="Statespace search strategy (bfs or dfs)") parser.add_argument("--stats", metavar="TICKS", type=int, default=None) parser.add_argument("--write-dot", action="store_true") parser.add_argument("--profile", action="store_true") # Internal debug options parser.add_argument("--debug-state", metavar="NAME", type=str, default=None) parser.add_argument("--debug-compare-states", metavar="STATE~STATE", type=str, default=None) parser.add_argument("--debug-statespace", action="store_true") parser.add_argument("--debug-seq", action="store_true") parser.add_argument("--debug-by-valgrind-tool", metavar="TOOL", type=str, default=None) parser.add_argument("--debug-profile", action="store_true") args = parser.parse_args() if args.verbose == 0: level = logging.ERROR elif args.verbose == 1: level = logging.INFO elif args.verbose == 2: level = logging.DEBUG else: print "Invalid verbose level (parameter --verbose)" sys.exit(1) if args.stdout_write != "all": if utils.is_integer(args.stdout_write): args.stdout_write = int(args.stdout_write) else: sys.stderr.write("Invalid argument for --stdout-write\n") sys.exit(1) if args.stderr_write != "all": if utils.is_integer(args.stderr_write): args.stderr_write = int(args.stderr_write) else: sys.stderr.write("Invalid argument for --stderr-write\n") sys.exit(1) logging.basicConfig(format="==AN== %(levelname)s: %(message)s", level=level) logging.info("Aislinn v%s", VERSION_STRING) if args.p <= 0: logging.error("Invalid number of processes (parameter -p)") sys.exit(1) if args.search != "bfs" and args.search != "dfs": logging.error("Invalid argument for --search") sys.exit(1) valgrind_args = [] if args.heap_size: size = utils.sizestr_to_int(args.heap_size) if size is None or size < 1: logging.error("Invalid heap size (parameter --heap-size)") sys.exit(1) valgrind_args.append("--heap-size={0}".format(size)) if args.redzone_size: size = int(args.redzone_size) if size < 0: logging.error("Invalid redzone size") sys.exit(1) valgrind_args.append("--alloc-redzone-size={0}".format(size)) if args.vgv: valgrind_args.append("--verbose={0}".format(args.vgv)) if args.send_protocol not in ("full", "eager", "rendezvous"): threshold = parse_threshold(args.send_protocol) if threshold is None: logging.error("Invalid send protocol (parameter -S or --send-protocol)") sys.exit(1) args.send_protocol = "threshold" args.send_protocol_eager_threshold = threshold[0] args.send_protocol_rendezvous_threshold = threshold[1] else: args.send_protocol_eager_threshold = 0 args.send_protocol_rendezvous_threshold = None if args.stdout_write and args.stdout != "capture": logging.error("--stdout-write is used but " "stdout is not captured (--stdout option)") sys.exit(1) if args.stderr_write and args.stderr != "capture": logging.error("--stderr-write is used but " "stderr is not captured (--stderr option)") sys.exit(1) return args, valgrind_args
def size_type(value): v = utils.sizestr_to_int(value) if v is None or v < 0: raise argparse.ArgumentTypeError( "'{}' is not valid size".format(value)) return v