Exemplo n.º 1
0
    def init_julia(self, imports=["REISE"]):
        """Initialize a Julia session in the specified environment and import.

        :param list imports: julia packages to import.
        :return: (*tuple*) -- imported names.
        """
        api = LibJulia.load()
        julia_command_line_options = ["--compiled-modules=no"]
        if self.julia_env is not None:
            julia_command_line_options += [f"--project={self.julia_env}"]
        api.init_julia(julia_command_line_options)

        return tuple([importlib.import_module(f"julia.{i}") for i in imports])
Exemplo n.º 2
0
def Lp(A, b, p):
    if p >= 2:  # pIRLS implementation (NIPS 2019)
        # uncomment to compare with vanilla implementation
        #if p < 3: # vanilla does not converge for p >= 3
        #    cons, _, _ = IRLS(A, b, p)
        #    print_consensus(cons)
        from julia.api import LibJulia
        api = LibJulia.load()
        api.sysimage = os.path.dirname(os.path.realpath(__file__)) + '/sys.so'
        api.init_julia()
        from julia import Main
        Main.include(
            os.path.dirname(os.path.realpath(__file__)) + '/IRLS-pNorm.jl')
        # constraints needed for pIRLS (empty)
        C = np.zeros_like(A)
        d = np.zeros_like(b)
        epsilon = 1e-10
        cons, it = Main.pNorm(epsilon, A, b.reshape(-1, 1), p, C,
                              d.reshape(-1, 1))
        r = np.abs(A @ cons - b)
        return cons, r, np.linalg.norm(r, p)
    else:  # vanilla IRLS implementation
        return IRLS(A, b, p)
Exemplo n.º 3
0
"""
Created: Tue Jul 30 07:56:52 2019
@author: Christopher Albert <*****@*****.**>
"""
import os
import site

from julia.api import LibJulia, Julia

api = LibJulia.load(julia=os.path.join(site.USER_BASE, 'bin', 'julia-py'))
api.sysimage = 'julia_sysimage.so'
api.init_julia()

#%%

ret = api.jl_eval_string(b"sin(pi)")
print(float(api.jl_unbox_float64(ret)))
Exemplo n.º 4
0
def run_jump_model(self, dfm, data, run_uuid, bau=False):
    profiler = Profiler()
    time_dict = dict()
    name = 'reopt' if not bau else 'reopt_bau'
    reopt_inputs = dfm['reopt_inputs'] if not bau else dfm['reopt_inputs_bau']
    self.data = data
    self.run_uuid = data['outputs']['Scenario']['run_uuid']
    self.user_uuid = data['outputs']['Scenario'].get('user_uuid')

    if platform.system() == "Darwin":
        ext = ".dylib"
    elif platform.system() == "Windows":
        ext = ".dll"
    else:
        ext = ".so"  # if platform.system() == "Linux":
    julia_img_file = os.path.join("julia_envs", "Xpress",
                                  "JuliaXpressSysimage" + ext)

    logger.info("Running JuMP model ...")
    try:
        if os.path.isfile(julia_img_file):
            # TODO: clean up this try/except block
            logger.info("Found Julia image file {}.".format(julia_img_file))
            t_start = time.time()
            api = LibJulia.load()
            api.sysimage = julia_img_file
            api.init_julia()
            from julia import Main
            time_dict["pyjulia_start_seconds"] = time.time() - t_start
        else:
            t_start = time.time()
            j = julia.Julia()
            from julia import Main
            time_dict["pyjulia_start_seconds"] = time.time() - t_start

        t_start = time.time()
        Main.using("Pkg")
        from julia import Pkg
        time_dict["pyjulia_pkg_seconds"] = time.time() - t_start

        if os.environ.get("SOLVER") == "xpress":
            t_start = time.time()
            Pkg.activate("./julia_envs/Xpress/")
            time_dict["pyjulia_activate_seconds"] = time.time() - t_start

            try:
                t_start = time.time()
                Main.include("reo/src/reopt_xpress_model.jl")
                time_dict["pyjulia_include_model_seconds"] = time.time(
                ) - t_start

            except ImportError:
                # should only need to instantiate once
                Pkg.instantiate()
                Main.include("reo/src/reopt_xpress_model.jl")

            t_start = time.time()
            if bau:
                model = Main.reopt_model(
                    float(data["inputs"]["Scenario"]["timeout_seconds"]),
                    float(data["inputs"]["Scenario"]
                          ["optimality_tolerance_bau"]))
            else:
                model = Main.reopt_model(
                    float(data["inputs"]["Scenario"]["timeout_seconds"]),
                    float(data["inputs"]["Scenario"]
                          ["optimality_tolerance_techs"]))
            time_dict["pyjulia_make_model_seconds"] = time.time() - t_start

        elif os.environ.get("SOLVER") == "cbc":
            t_start = time.time()
            Pkg.activate("./julia_envs/Cbc/")
            time_dict["pyjulia_activate_seconds"] = time.time() - t_start

            t_start = time.time()
            Main.include("reo/src/reopt_cbc_model.jl")
            time_dict["pyjulia_include_model_seconds"] = time.time() - t_start

            t_start = time.time()
            model = Main.reopt_model(
                float(data["inputs"]["Scenario"]["timeout_seconds"]),
                float(data["inputs"]["Scenario"]["optimality_tolerance_bau"]))
            time_dict["pyjulia_make_model_seconds"] = time.time() - t_start

        elif os.environ.get("SOLVER") == "scip":
            t_start = time.time()
            Pkg.activate("./julia_envs/SCIP/")
            time_dict["pyjulia_activate_seconds"] = time.time() - t_start

            t_start = time.time()
            Main.include("reo/src/reopt_scip_model.jl")
            time_dict["pyjulia_include_model_seconds"] = time.time() - t_start

            t_start = time.time()
            model = Main.reopt_model(
                float(data["inputs"]["Scenario"]["timeout_seconds"]),
                float(data["inputs"]["Scenario"]["optimality_tolerance_bau"]))
            time_dict["pyjulia_make_model_seconds"] = time.time() - t_start

        else:
            raise REoptFailedToStartError(
                message=
                "The environment variable SOLVER must be set to one of [xpress, cbc, scip].",
                run_uuid=self.run_uuid,
                user_uuid=self.user_uuid)

        if bau or not data["inputs"]["Scenario"]["use_decomposition_model"]:
            t_start = time.time()
            Main.include("reo/src/reopt.jl")
            time_dict["pyjulia_include_reopt_seconds"] = time.time() - t_start

            t_start = time.time()
            results = Main.reopt(model, reopt_inputs)
            time_dict["pyjulia_run_reopt_seconds"] = time.time() - t_start
        else:
            t_start = time.time()
            Main.include("reo/src/reopt_decomposed.jl")
            time_dict["pyjulia_include_reopt_seconds"] = time.time() - t_start

            t_start = time.time()
            results = run_decomposed_model(data, model, reopt_inputs)
            time_dict["pyjulia_run_reopt_seconds"] = time.time() - t_start

        results = scrub_numpy_arrays_from_dict(results)
        results.update(time_dict)

    except Exception as e:
        if isinstance(e, REoptFailedToStartError):
            raise e
        elif "DimensionMismatch" in e.args[
                0]:  # JuMP may mishandle a timeout when no feasible solution is returned
            msg = "Optimization exceeded timeout: {} seconds.".format(
                data["inputs"]["Scenario"]["timeout_seconds"])
            logger.info(msg)
            raise OptimizationTimeout(task=name,
                                      message=msg,
                                      run_uuid=self.run_uuid,
                                      user_uuid=self.user_uuid)
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print(exc_type)
        print(exc_value)
        print(exc_traceback)
        logger.error("REopt.py raise unexpected error: UUID: " +
                     str(self.run_uuid))
        raise UnexpectedError(exc_type,
                              exc_value,
                              traceback.format_tb(exc_traceback),
                              task=name,
                              run_uuid=self.run_uuid,
                              user_uuid=self.user_uuid)
    else:
        status = results["status"]
        logger.info("REopt run successful. Status {}".format(status))
        if bau:
            dfm['results_bau'] = results  # will be flat dict
        else:
            dfm['results'] = results

        if status.strip().lower() == 'timed-out':
            msg = "Optimization exceeded timeout: {} seconds.".format(
                data["inputs"]["Scenario"]["timeout_seconds"])
            logger.info(msg)
            raise OptimizationTimeout(task=name,
                                      message=msg,
                                      run_uuid=self.run_uuid,
                                      user_uuid=self.user_uuid)
        elif status.strip().lower() != 'optimal':
            logger.error(
                "REopt status not optimal. Raising NotOptimal Exception.")
            raise NotOptimal(task=name,
                             run_uuid=self.run_uuid,
                             status=status.strip(),
                             user_uuid=self.user_uuid)

    profiler.profileEnd()
    ModelManager.updateModel('ProfileModel',
                             {name + '_seconds': profiler.getDuration()},
                             run_uuid)

    # reduce the amount data being transferred between tasks
    if bau:
        del dfm['reopt_inputs_bau']
    else:
        del dfm['reopt_inputs']
    return dfm
Exemplo n.º 5
0
import os
import time
from typing import List
# from numba import typed, types, float64

from julia.api import LibJulia  # noqa: autoimport
api = LibJulia.load()  # noqa: autoimport
api.init_julia(["--project=.", "--optimize=3", f"--threads={os.cpu_count()}"])  # noqa: autoimport
from julia import Main as list_julia

import list_cy_annotations
import list_cy_annotations_c
import list_py
import list_py_annotations
import list_py_annotations_c
import list_py_c
import simple_list
import list_cy
import list_rust
import numpy as np
# import list_numba

list_julia.eval('include("list_julia.jl")')
list_julia.eval('include("list_julia_threads.jl")')

_a_list: List[List[float]]

# _nb_a_list = typed.List(typed.List(float64))
# ttt = time.time()
# _nb_a_list = list_numba.make_list(_nb_a_list)
# list_numba.iterate_list_par(_nb_a_list)
Exemplo n.º 6
0
                    required=True,
                    help="activate/deactivate bias in GraphSAGE")
parser.add_argument('--nworkers',
                    type=int,
                    required=True,
                    help="number of parallel workers to use")

args = parser.parse_args()

## Set up Julia

# This can be simplified once https://github.com/JuliaPy/pyjulia/issues/310 is fixed
with open("/etc/hostname") as f:
    hostname = f.readline().strip()
from julia.api import LibJulia
api = LibJulia.load()
api.sysimage = "julia/sys-{}.so".format(hostname)
api.init_julia()
from julia import Main
Main.eval('include("julia/dataset.jl")')

## Settings
testtype = args.testtype
assert testtype in ['edges', 'nodes']
testprop = args.testprop
bias = args.bias
layer_sizes = [args.diml1enc, args.dimxiadj]
nworkers = args.nworkers

number_of_walks = 1
length_of_walks = 5