예제 #1
0
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
예제 #2
0
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