summaryrefslogtreecommitdiffstats
path: root/scripts/new_abc_commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/new_abc_commands.py')
-rw-r--r--scripts/new_abc_commands.py257
1 files changed, 0 insertions, 257 deletions
diff --git a/scripts/new_abc_commands.py b/scripts/new_abc_commands.py
deleted file mode 100644
index 22718f07..00000000
--- a/scripts/new_abc_commands.py
+++ /dev/null
@@ -1,257 +0,0 @@
-import sys
-import os
-import pyabc
-import par
-import tempfile
-import shutil
-import redirect
-import optparse
-
-from contextlib import contextmanager
-
-def read_cmd(args):
- if len(args)==2:
- par.read_file_quiet(args[1])
- else:
- par.read_file()
- return 0
-
-pyabc.add_abc_command(read_cmd, "ZPython", "/rf", 0)
-
-def chdir_cmd(args):
- os.chdir( args[1] )
- return 0
-
-pyabc.add_abc_command(chdir_cmd, "ZPython", "/cd", 0)
-
-def pwd_cmd(args):
- print os.getcwd()
- return 0
-
-pyabc.add_abc_command(pwd_cmd, "ZPython", "/pwd", 0)
-
-def ls_cmd(args):
- os.system("ls " + " ".join(args[1:]))
- return 0
-
-pyabc.add_abc_command(ls_cmd, "ZPython", "/ls", 0)
-
-pushd_temp_stack = []
-
-def pushdtemp_cmd(args):
- tmpdir = tempfile.mkdtemp()
- pushd_temp_stack.append( (os.getcwd(), tmpdir) )
- os.chdir(tmpdir)
- return 0
-
-pyabc.add_abc_command(pushdtemp_cmd, "ZPython", "/pushdtemp", 0)
-
-def popdtemp_cmd(args):
- prev, temp = pushd_temp_stack.pop()
- os.chdir(prev)
- shutil.rmtree(temp, ignore_errors=True)
- return 0
-
-pyabc.add_abc_command(popdtemp_cmd, "ZPython", "/popdtemp", 0)
-
-pushredirect_stack = []
-
-def push_redirect_cmd(args):
- fdout = redirect.start_redirect( redirect.null_file, sys.stdout)
- pushredirect_stack.append( (sys.stdout, fdout) )
-
- fderr = redirect.start_redirect( redirect.null_file, sys.stderr)
- pushredirect_stack.append( (sys.stderr, fderr) )
-
- return 0
-
-pyabc.add_abc_command(push_redirect_cmd, "ZPython", "/pushredirect", 0)
-
-def pop_redirect_cmd(args):
- err, fderr = pushredirect_stack.pop()
- redirect.end_redirect(err, fderr)
-
- out, fdout = pushredirect_stack.pop()
- redirect.end_redirect(out, fdout)
-
- return 0
-
-pyabc.add_abc_command(pop_redirect_cmd, "ZPython", "/popredirect", 0)
-
-def print_aiger_result(args):
- status = pyabc.prob_status()
-
- if status==1:
- print 0
- elif status==0:
- print 1
- else:
- print 2
-
- return 0
-
-pyabc.add_abc_command(print_aiger_result, "ZPython", "/print_aiger_result", 0)
-
-@contextmanager
-def replace_report_result(multi):
-
- def report_result(po, result):
-
- print "REPORT RESULT: ", po, result
-
- print >> stdout, "%d"%result
- print >> stdout, "b%d"%po
- print >> stdout, "."
-
- def report_liveness_result(po, result):
-
- print "REPORT RESULT: ", po, result
-
- print >> stdout, "%d"%result
- print >> stdout, "j%d"%po
- print >> stdout, "."
-
- def report_bmc_depth(depth):
-
- if not multi:
- print "REPORT BMC DEPTH:", depth
- print >> stdout, "u%d"%depth
-
- with redirect.save_stdout() as stdout:
-
- old_report_result = par.report_result
- par.report_result = report_result
-
- #old_report_liveness_result = par.report_liveness_result
- par.report_liveness_result = report_liveness_result
-
- old_report_bmc_depth = par.report_bmc_depth
- par.report_bmc_depth = report_bmc_depth
-
- try:
- yield
- finally:
- par.report_result = old_report_result
- #~ par.report_liveness_result = report_liveness_result
- par.report_bmc_depth = old_report_bmc_depth
-
-def proof_command_wrapper_internal(prooffunc, category_name, command_name, change, multi=False):
-
- def wrapper(argv):
-
- usage = "usage: %prog [options] <aig_file>"
-
- parser = optparse.OptionParser(usage, prog=command_name)
-
- parser.add_option("-n", "--no_redirect", dest="noisy", action="store_true", default=False, help="don't redirect output")
- parser.add_option("-d", "--current_dir", dest="current_dir", action="store_true", default=False, help="stay in current directory")
-
- options, args = parser.parse_args(argv)
-
- if len(args) != 2:
- parser.print_usage()
- return 0
-
- aig_filename = os.path.abspath(args[1])
-
- with replace_report_result(multi):
-
- if not options.noisy:
- pyabc.run_command('/pushredirect')
-
- if not options.current_dir:
- pyabc.run_command('/pushdtemp')
-
- try:
- for d in os.environ['PATH'].split(':'):
- bip = os.path.join(d, 'bip')
- if os.path.exists(bip):
- pyabc.run_command("load_plugin %s Bip"%bip)
- break
-
- basename = os.path.basename( aig_filename )
- shutil.copyfile(aig_filename, basename)
- aig_filename = basename
-
- result = prooffunc(aig_filename)
-
- par.cex_list = []
- except:
- result = None
-
- if not multi:
-
- if result=="SAT":
- par.report_result(0,1)
- elif result=="UNSAT":
- par.report_result(0,0)
- elif type(result)==list and len(result)>0 and result[0] == "SAT":
- par.report_result(0,1)
- elif type(result)==list and len(result)>0 and result[0] == "UNSAT":
- par.report_result(0,0)
- else:
- par.report_result(0,2)
-
- if not options.current_dir:
- pyabc.run_command('/popdtemp')
-
- if not options.noisy:
- pyabc.run_command('/popredirect')
-
- return 0
-
- pyabc.add_abc_command(wrapper, category_name, command_name, change)
-
-def proof_command_wrapper(prooffunc, category_name, command_name, change, multi=False):
- def pf(aig_filename):
- par.read_file_quiet(aig_filename)
- return prooffunc()
- return proof_command_wrapper_internal(pf, category_name, command_name, change, multi)
-
-proof_command_wrapper(par.sp, 'HWMCC13', '/super_prove_aiger', 0)
-proof_command_wrapper(par.simple, 'HWMCC13', '/simple_aiger', 0)
-proof_command_wrapper(par.simple_bip, 'HWMCC13', '/simple_bip_aiger', 0)
-proof_command_wrapper(par.simple_sat, 'HWMCC13', '/simple_sat_aiger', 0)
-proof_command_wrapper(par.mp, 'HWMCC13', '/multi_prove_aiger', 0, multi=True)
-
-def simple_liveness_prooffunc(aig_filename):
-
- import niklas
- from pyaig import utils
-
- def simplify(aiger_in, aiger_out):
-
- with niklas.temp_file_names(2, suffix='.aig') as tmp:
-
- saved = utils.save_po_info(aiger_in, tmp[0])
-
- par.read_file_quiet(tmp[0])
-
- par.pre_simp()
-
- pyabc.run_command( 'write_aiger %s'%tmp[1] )
-
- utils.restore_po_info( saved, tmp[1], aiger_out )
-
- return True
-
- def report_result(id, res):
-
- if res and 'result' in res:
- result = res['result']
- if result=='proved':
- par.report_liveness_result(id, 0)
- return True
- elif result=='failed':
- par.report_liveness_result(id, 1)
- return True
-
- return False
-
- try:
- niklas.run_niklas_multi(aig_filename, simplify=simplify, report_result=report_result)
- except:
- import traceback
- traceback.print_exc()
-
-proof_command_wrapper_internal( simple_liveness_prooffunc, "HWMCC13", "/simple_liveness_aiger", 0, multi=True)