def _sim_ver(action): # Parse and Compose (HyIR.compose_all calss HyIR.parse_all) HyIR.compose_all(Session.hybrid) # if(not Session.cur_prop.is_valid()): # Session.write("Property invalid, abandoning operation...\n") # return None if not Session.hybrid.composed: Session.write("ERROR: System not composed, abandoning operation...\n") return None # Generate Simulator if (Session.simulator == CAPD): Session.hybrid.convertToCAPD('simulator') else: if (Session.simulator == ODEINT_FIX): st = 'constant' elif (Session.simulator == ODEINT_ADP): st = 'adaptive' path = '../work-dir/simulator.cpp' gen_simulator(path, Session.hybrid, step_type=st) Session.hybrid.printHybridSimGuardsInvariants() Session.hybrid.printBloatedSimGuardsInvariants() # Load JSON configuration with open('../config.json') as f: config = json.load(f) initialize_cpp_model(config, action) compile_executable(config) # Simulate selected model Session.write("Running simulate/verify...\n") Session.update() start_time = time.time() result = Session.cpp_model.simulate_verify() print("--- " + str(time.time() - start_time) + " seconds ---") result_str_dict = {1: "Safe", 0: "Unknown", -1: "Unsafe"} Session.write("RESULT: " + result_str_dict[result] + "\n") return result
def compile_executable(config): if (Session.lib_compiled): return Session.write("Compiling essential libraries for C2E2...\n") Session.write(" Compilation may take a few minutes.\n") if ((Session.simulator == ODEINT_ADP) or (Session.simulator == ODEINT_FIX)): Session.write(" Using ODEINT Simulator.\n") Session.update() command_line = "g++ -w -O2 -std=c++11 simulator.cpp -o " + config[ 'simulator_name'] args = shlex.split(command_line) p = subprocess.Popen(args, cwd="../work-dir") print() p.communicate() else: Session.write(" Using CAPD Simulator.\n") Session.update() command_line = "g++ -w -O2 simulator.cpp -o" + config[ 'simulator_name'] + "`../capd/bin/capd-config --cflags --libs`" p = subprocess.Popen(command_line, cwd="../work-dir", shell=True) print() p.communicate() command_line = "g++ -fPIC -shared hybridSimGI.cpp -o libhybridsim.so -lppl -lgmp" args = shlex.split(command_line) p = subprocess.Popen(args, cwd="../work-dir") p.communicate() command_line = "g++ -fPIC -shared bloatedSimGI.cpp -o libbloatedsim.so -lppl -lgmp" args = shlex.split(command_line) p = subprocess.Popen(args, cwd="../work-dir") p.communicate() command_line = "g++ -g -std=c++11 -fPIC -shared jaThin.cpp -o libJaThin.so -lppl -lgmp" args = shlex.split(command_line) p = subprocess.Popen(args, cwd="../work-dir") p.communicate() Session.lib_compiled = False Session.write("Libraries successfully compiled.\n") Session.update() return