From 95b253429b505e2b15db3af9f6f74c0f8c4e5b9d Mon Sep 17 00:00:00 2001 From: Alinson S Xavier Date: Tue, 31 Aug 2021 14:20:03 -0500 Subject: [PATCH] Replace sysimage.jl by juliaw; reformat source code --- .gitignore | 1 + Makefile | 19 +++------- deps/formatter/Project.toml | 5 +++ deps/formatter/format.jl | 8 +++++ juliaw | 68 +++++++++++++++++++++++++++++++++++ src/instance/file_instance.jl | 2 +- src/solvers/jump_solver.jl | 15 ++------ src/utils/sysimage.jl | 33 ----------------- 8 files changed, 90 insertions(+), 61 deletions(-) create mode 100644 deps/formatter/Project.toml create mode 100644 deps/formatter/format.jl create mode 100755 juliaw delete mode 100644 src/utils/sysimage.jl diff --git a/.gitignore b/.gitignore index 1c2191c..70a4b78 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ docs/build/ docs/site/ .ipy* build/ +**/Manifest.toml diff --git a/Makefile b/Makefile index 76dd636..60fe9cd 100644 --- a/Makefile +++ b/Makefile @@ -2,23 +2,12 @@ # Copyright (C) 2020-2021, UChicago Argonne, LLC. All rights reserved. # Released under the modified BSD license. See COPYING.md for more details. -JULIA := julia --color=yes --project=@. VERSION := 0.2 -build/sysimage.so: src/utils/sysimage.jl Project.toml - julia --project=. -e "using Pkg; Pkg.instantiate()" - $(JULIA) src/utils/sysimage.jl test/runtests.jl - -clean: - rm -rfv build/* - -test: build/sysimage.so - $(JULIA) --sysimage build/sysimage.so test/runtests.jl +test: + ./juliaw test/runtests.jl format: - julia -e 'using JuliaFormatter; format(["src", "test", "benchmark"], verbose=true);' - -install-deps: - julia -e 'using Pkg; Pkg.add(PackageSpec(name="JuliaFormatter", version="0.14.4"))' + cd deps/formatter; ../../juliaw format.jl -.PHONY: docs test format install-deps +.PHONY: docs test format diff --git a/deps/formatter/Project.toml b/deps/formatter/Project.toml new file mode 100644 index 0000000..4bc5f25 --- /dev/null +++ b/deps/formatter/Project.toml @@ -0,0 +1,5 @@ +[deps] +JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899" + +[compat] +JuliaFormatter = "0.14.4" diff --git a/deps/formatter/format.jl b/deps/formatter/format.jl new file mode 100644 index 0000000..9f9d965 --- /dev/null +++ b/deps/formatter/format.jl @@ -0,0 +1,8 @@ +using JuliaFormatter +format( + [ + "../../src", + "../../test", + ], + verbose=true, +) diff --git a/juliaw b/juliaw new file mode 100755 index 0000000..fb8541d --- /dev/null +++ b/juliaw @@ -0,0 +1,68 @@ +#!/bin/bash +# MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization +# Copyright (C) 2020-2021, UChicago Argonne, LLC. All rights reserved. +# Released under the modified BSD license. See COPYING.md for more details. + +if [ ! -e Project.toml ]; then + echo "juliaw: Project.toml not found" + exit 1 +fi + +if [ ! -e Manifest.toml ]; then + julia --project=. -e 'using Pkg; Pkg.instantiate()' || exit 1 +fi + +if [ ! -e build/sysimage.so -o Project.toml -nt build/sysimage.so ]; then + echo "juliaw: rebuilding system image..." + + # Generate temporary project folder + rm -rf $HOME/.juliaw + mkdir -p $HOME/.juliaw/src + cp Project.toml Manifest.toml $HOME/.juliaw + NAME=$(julia -e 'using TOML; toml = TOML.parsefile("Project.toml"); "name" in keys(toml) && print(toml["name"])') + if [ ! -z $NAME ]; then + cat > $HOME/.juliaw/src/$NAME.jl << EOF +module $NAME +end +EOF + fi + + # Add PackageCompiler dependencies to temporary project + julia --project=$HOME/.juliaw -e 'using Pkg; Pkg.add(["PackageCompiler", "TOML", "Logging"])' + + # Generate system image scripts + cat > $HOME/.juliaw/sysimage.jl << EOF +using PackageCompiler +using TOML +using Logging + +Logging.disable_logging(Logging.Info) +mkpath("$PWD/build") + +println("juliaw: generating precompilation statements...") +run(\`julia --project="$PWD" --trace-compile="$PWD"/build/precompile.jl \$(ARGS)\`) + +println("juliaw: finding dependencies...") +project = TOML.parsefile("Project.toml") +manifest = TOML.parsefile("Manifest.toml") +deps = Symbol[] +for dep in keys(project["deps"]) + if "path" in keys(manifest[dep][1]) + println(" - \$(dep) [skip]") + else + println(" - \$(dep)") + push!(deps, Symbol(dep)) + end +end + +println("juliaw: building system image...") +create_sysimage( + deps, + precompile_statements_file = "$PWD/build/precompile.jl", + sysimage_path = "$PWD/build/sysimage.so", +) +EOF + julia --project=$HOME/.juliaw $HOME/.juliaw/sysimage.jl $* +else + julia --project=. --sysimage build/sysimage.so $* +fi diff --git a/src/instance/file_instance.jl b/src/instance/file_instance.jl index e7c7915..ab844ab 100644 --- a/src/instance/file_instance.jl +++ b/src/instance/file_instance.jl @@ -15,7 +15,7 @@ mutable struct FileInstance <: Instance function FileInstance(filename::AbstractString, build_model::Function)::FileInstance instance = new(nothing, nothing, filename, nothing, build_model) instance.py = PyFileInstance(instance) - instance.h5 = Hdf5Sample("$filename.h5", mode="a") + instance.h5 = Hdf5Sample("$filename.h5", mode = "a") instance.filename = filename return instance end diff --git a/src/solvers/jump_solver.jl b/src/solvers/jump_solver.jl index 3d51fc6..a88d5b2 100644 --- a/src/solvers/jump_solver.jl +++ b/src/solvers/jump_solver.jl @@ -569,13 +569,8 @@ function get_constraints( end end - lhs = sparse( - lhs_rows, - lhs_cols, - lhs_values, - length(rhs), - JuMP.num_variables(data.model), - ) + lhs = + sparse(lhs_rows, lhs_cols, lhs_values, length(rhs), JuMP.num_variables(data.model)) if !isempty(data.x) lhs_value = lhs * data.x slacks = abs.(lhs_value - rhs) @@ -652,11 +647,7 @@ function __init_JuMPSolver__() "slacks", ] if repr(self.data.optimizer_factory) in ["Gurobi.Optimizer"] - append!(attrs, [ - "basis_status", - "sa_rhs_down", - "sa_rhs_up", - ]) + append!(attrs, ["basis_status", "sa_rhs_down", "sa_rhs_up"]) end return attrs end diff --git a/src/utils/sysimage.jl b/src/utils/sysimage.jl deleted file mode 100644 index b64d0ff..0000000 --- a/src/utils/sysimage.jl +++ /dev/null @@ -1,33 +0,0 @@ -# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment -# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved. -# Released under the modified BSD license. See COPYING.md for more details. - -using PackageCompiler -using TOML -using Logging - -Logging.disable_logging(Logging.Info) -mkpath("build") - -println("Generating precompilation statements...") -run(`julia --project=. --trace-compile=build/precompile.jl $(ARGS)`) - -println("Finding dependencies...") -project = TOML.parsefile("Project.toml") -manifest = TOML.parsefile("Manifest.toml") -deps = Symbol[] -for dep in keys(project["deps"]) - if "path" in keys(manifest[dep][1]) - println(" - $(dep) [skip]") - else - println(" - $(dep)") - push!(deps, Symbol(dep)) - end -end - -println("Building system image...") -create_sysimage( - deps, - precompile_statements_file = "build/precompile.jl", - sysimage_path = "build/sysimage.so", -)