X-Git-Url: https://git.siccegge.de//index.cgi?p=master%2Fcool-versuchung.git;a=blobdiff_plain;f=cool.py;h=63e364d18e73506968f2bc8021afaa25ddc42f22;hp=a4ccd1b797e45cc96034cc4f1988063c00c8abb5;hb=92ab77e199ac18da7119b164f9715e08a19af385;hpb=8cc4bba85900a867db2a0b93d807032b29174244 diff --git a/cool.py b/cool.py index a4ccd1b..63e364d 100755 --- a/cool.py +++ b/cool.py @@ -13,6 +13,7 @@ import re import os import glob import argparse +import subprocess def natural_key(string_): return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_)] @@ -24,7 +25,8 @@ def parse_timedelta(strrep): class SolverExperiment(Experiment): inputs = { 'formulas' : TarArchive() } - outputs = { 'timing' : Directory() } + outputs = { 'output' : Directory('output'), + 'timing' : CSV_File('timing.csv') } def build_solver(self): @@ -35,17 +37,33 @@ class SolverExperiment(Experiment): pass + def execute_timed(self, formula, command, **kwargs): + with self.outputs.output as directory: + with open(os.path.join(directory, '%s_stdout' % formula), 'w') as stdoutfd: + with open(os.path.join(directory, '%s_stderr' % formula), 'w') as stderrfd: + p = subprocess.Popen(command, stdout=stdoutfd, stderr=stderrfd, **kwargs) + _pid, ret, ru = os.wait4(p.pid, 0) + p.wait() + + if ret != 0: + raise CommandFailed(command, ret) + + self.outputs.timing.append([formula, ru.ru_utime, ru.ru_maxrss]) + return ret + + def run(self): print("Building Solver ...") self.build_solver() - formulas = sorted(os.listdir(self.inputs.formulas.path), key=natural_key) - shell.track(self.outputs.timing.path) - for formula in formulas: - print("Running for %s ..." % formula) - try: - self.run_solver(os.path.join(self.inputs.formulas.path, formula)) - except CommandFailed: - break + with self.inputs.formulas as path: + formulas = sorted(os.listdir(path), key=natural_key) + + for formula in formulas: + print("Running for %s ..." % formula) + try: + self.run_solver(os.path.join(path, formula)) + except CommandFailed: + break @@ -67,8 +85,11 @@ class CoolExperiment(SolverExperiment): def run_solver(self, formula): with self.inputs.cool as path: - shell("timeout 1001 ./coalg.native sat KD --verbose < %s" % formula) - + executable = os.path.join(path, 'coalg.native') + self.execute_timed(os.path.basename(formula), + "timeout 1000 %s sat KD --verbose < %s" + % (executable, formula), + shell=True) class TreeTabExperiment(SolverExperiment): @@ -89,7 +110,11 @@ class TreeTabExperiment(SolverExperiment): def run_solver(self, formula): with self.inputs.treetab as path: - shell("timeout 1001 ./ctl tree --verbose < %s" % formula) + executable = os.path.join(path, 'ctl') + self.execute_timed(os.path.basename(formula), + "timeout 1001 %s tree --verbose < %s" + % (executable, formula), + shell=True) class GMULExperiment(SolverExperiment): @@ -110,7 +135,11 @@ class GMULExperiment(SolverExperiment): def run_solver(self, formula): with self.inputs.gmul as path: - shell("timeout 1001 ./ctl tr --verbose < %s" % formula) + executable = os.path.join(path, 'ctl') + self.execute_timed(os.path.basename(formula), + "timeout 1001 %s tr --verbose < %s" + % (executable, formula), + shell=True) class ComparisonExperiment(Experiment): @@ -149,7 +178,6 @@ class ComparisonExperiment(Experiment): self.folder_to_csv(self.inputs.gmul.timing.path, self.outputs.gmul_data) with self.outputs.graphs as path: - samplecount = len(self.outputs.cool_data.value) # Time plt.title("Time spent: %s" % os.path.basename(self.inputs.treetab.metadata['formulas']))