An example script for provers
Allikas: Lambda
#!/usr/bin/python3 # -*- coding: utf-8 -*- # # Runs prover on problems, collects results # # Call on the command line import sys, csv import datetime import subprocess # ====== configuration globals ====== # problems.csv should contain problem names, # one per line, without a folder and without the .p suffix, like this (remove #): # NUM847+1 # CSR028+3 # NUM304+1 # ... problems_filename="problems.csv" # the Problems folder of TPTP: problem_path="/opt/TPTP/Problems/" # summary results of running on problems: # NB! if you stop the runner and restart, it will continue # from the last problem NOT in the outfile. # I.e. to run again from scratch, remove outfile outfile="example_result.txt" # folder for storing problem running logs: log_folder="/tmp/" # time in seconds per problem: timeout=20 # ====== globals set in code ========= problem_list=[] # ====== top level ========= def main(): global problems_list problem_list=read_problems() solved=read_solved() #print(problem_list) i=0 of=open(outfile,"a") while i<len(problem_list): problem=problem_list[i] if not solved: pass elif solved and problem!=solved: i+=1 continue else: solved=False i=i+1 problem=problem_list[i] #print(problem) res=runone(problem) if res[0]: of.write(problem+",Proved,"+res[1]+","+res[2]+","+res[3]+"\n") else: of.write(problem+",Failed,"+res[1]+","+res[2]+","+str(timeout)+"\n") of.flush() i+=1 of.close() def runone(problem): global timeout proved=False timeline="" pref=problem[:3] runnr=0 timeline1="" timeline2="" path=problem_path+pref+"/"+problem+".p" cmd="timeout "+str(timeout)+" ../gkc_41 "+path print(path) outfile=log_folder+problem of=open(outfile,"w") of.write(cmd+"\n") of.write(str(datetime.datetime.now())+"\n") p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): #print("!!"+str(line)) line=line.decode("utf-8") of.write(line) if line.startswith("**** run "): try: tmp=line.split() runnr=tmp[2] except: continue elif line.startswith("this run seconds:"): try: tmp=line.split() timeline1=tmp[3] except: timeline1=" " elif line.startswith("total seconds:"): try: tmp=line.split() timeline2=tmp[2] except: timeline2=" " elif line.startswith("result: proof found"): proved=True #print("Proved,"+str(runnr)) elif "maxresident)k" in line: line=line.replace("user ",",") line=line.replace("system ",",") line=line.replace("elapsed ",",") line=line.replace("%CPU ",","+str(datetime.datetime.now())+",") timeline=line if proved: print("Proved,"+str(runnr)+","+timeline1+","+timeline2) else: print("Failed,"+str(runnr)+","+timeline1+","+str(timeout)) retval = p.wait() of.close() return (proved,str(runnr),timeline1,timeline2) def read_problems(): pfname=problems_filename problems=[] # --- read problems file --- try: csvfile=open(pfname) freader = csv.reader(csvfile) for row in freader: niceprob=row[0].strip() if niceprob and len(niceprob)>6 and \ niceprob[0].isupper() and niceprob[1].isupper() and niceprob[2].isupper(): problems.append(niceprob) csvfile.close() except Exception as e: print("Could not open or read the input file "+problems) return [] return problems def read_solved(): pfname=outfile solved=[] last="" try: csvfile=open(pfname) freader = csv.reader(csvfile) except: print("no solved file found") return None # --- read problems file --- try: csvfile=open(pfname) freader = csv.reader(csvfile) for row in freader: if not row: continue niceprob=row[0].strip() if niceprob and len(niceprob)>6 and \ niceprob[0].isupper() and niceprob[1].isupper() and niceprob[2].isupper(): solved.append(niceprob) last=niceprob csvfile.close() except Exception as e: print("Could not open or read the solved file "+pfname) return None return last # ---- run top level ---- main()