Changes in / [cde1bf9:6e7b969]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/rmit.py
rcde1bf9 r6e7b969 38 38 self.vars = re.findall("[a-zA-Z]", value) 39 39 40 def parse_option(key, values): 40 def parse_option(opt): 41 match = re.search("^(.*):(.*)$", opt) 42 if not match : 43 print('ERROR: extra options should match pattern .*:.*, got {}'.format(opt), file=sys.stderr) 44 sys.exit(1) 45 46 key = match.group(1) 47 values = match.group(2) 48 41 49 try: 42 50 num = int(values) … … 113 121 parser = argparse.ArgumentParser(description='Python Script to implement R.M.I.T. testing : Randomized Multiple Interleaved Trials') 114 122 parser.add_argument('--list', help='List all the commands that would be run', action='store_true') 123 parser.add_argument('--format', help='How to print the result', choices=formats, default='json') 115 124 parser.add_argument('--file', nargs='?', type=argparse.FileType('w'), default=sys.stdout) 116 parser.add_argument('--trials', help='Number of trials to run per combinaison', type=int, default=3) 125 parser.add_argument('-t', '--trials', help='Number of trials to run per combinaison', type=int, default=3) 126 parser.add_argument('-o','--option',action='append') 117 127 parser.add_argument('command', metavar='command', type=str, nargs=1, help='the command prefix to run') 118 128 parser.add_argument('candidates', metavar='candidates', type=str, nargs='*', help='the candidate suffix to run') 119 129 120 130 try: 121 options, unknown = parser.parse_known_args() 122 123 options.option = [] 124 while unknown: 125 key = unknown.pop(0) 126 val = unknown.pop(0) 127 128 if key[0] != '-': 129 raise ValueError 130 131 options.option.append((key[1:], val)) 132 131 options = parser.parse_args() 133 132 except: 134 133 print('ERROR: invalid arguments', file=sys.stderr) … … 151 150 # ================================================================================ 152 151 # Identify the options to run 153 opts = dict([parse_option( k, v) for k, vin options.option])152 opts = dict([parse_option(o) for o in options.option]) 154 153 155 154 # Evaluate the options (options can depend on the value of other options) … … 178 177 # find expected time 179 178 time = actions_eta(actions) 180 print("Running {} trials{}".format(len(actions), "" if time == 0 else " (expecting to take {} )".format(str(datetime.timedelta(seconds=int(time)))) ))179 print("Running {} trials{}".format(len(actions), "" if time == 0 else " (expecting to take {}".format(str(datetime.timedelta(seconds=int(time)))) )) 181 180 182 181 random.shuffle(actions) 182 result = [] 183 183 184 184 # ================================================================================ 185 185 # Run 186 options.file.write("[")187 first = True188 186 for i, a in enumerate(actions): 189 187 sa = " ".join(a) 190 if first: 191 first = False 192 else: 193 options.file.write(",") 194 if options.file != sys.stdout: 195 print("{}/{} : {} \r".format(i, len(actions), sa), end = '') 188 print("{}/{} : {} \r".format(i, len(actions), sa), end = '') 196 189 fields = {} 197 190 with subprocess.Popen( a, stdout = subprocess.PIPE, stderr = subprocess.PIPE) as proc: … … 206 199 fields[match.group(1).strip()] = float(match.group(2).strip().replace(',','')) 207 200 208 options.file.write(json.dumps([a[0][2:], sa, fields])) 209 options.file.flush() 210 211 options.file.write("]\n") 212 213 if options.file != sys.stdout: 214 print("Done ") 201 result.append([a[0][2:], sa, fields]) 202 203 print("Done ") 204 205 # ================================================================================ 206 # Print raw 207 if options.format == 'raw': 208 for r in result: 209 print(r, file=options.file) 210 sys.exit(0) 211 212 # ================================================================================ 213 # Print json 214 if options.format == 'json': 215 json.dump(result, options.file) 216 sys.exit(0) 217 218 # ================================================================================ 219 # Print csv 220 if options.format == 'csv': 221 # Clean result 222 headers = ["series", "command"] 223 data = [] 224 first = True 225 for r in result: 226 if first: 227 first = False 228 headers.extend(r[2].keys()) 229 else : 230 pass 231 232 d = [r[0], r[1]] 233 for k in headers[2:]: 234 try: 235 d.append(r[2][k]) 236 except: 237 d.append(0.0) 238 239 data.append(d) 240 241 # Print csv 242 print(",\t".join(headers), file=options.file) 243 for d in data: 244 print(",\t".join(["{}".format(dd) for dd in d]), file=options.file) 245 sys.exit(0)
Note: See TracChangeset
for help on using the changeset viewer.