diff --git a/src/MIPLearn.jl b/src/MIPLearn.jl index 0df711f..a17fc24 100644 --- a/src/MIPLearn.jl +++ b/src/MIPLearn.jl @@ -29,6 +29,7 @@ include("solvers/jump_solver.jl") include("solvers/learning_solver.jl") include("solvers/macros.jl") include("utils/benchmark.jl") +include("utils/parse.jl") function __init__() copy!(miplearn, pyimport("miplearn")) diff --git a/src/utils/parse.jl b/src/utils/parse.jl new file mode 100644 index 0000000..97611e4 --- /dev/null +++ b/src/utils/parse.jl @@ -0,0 +1,20 @@ +# 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. + +function parse_name(name::AbstractString)::Vector{String} + # x + m = match(r"^[-a-z0-9_]*$", name) + if m !== nothing + return [name] + end + + # x[1,2,3] + m = match(r"^([-a-z0-9_]*)\[([-a-z0-9_,]*)\]$"i, name) + if m !== nothing + return [m[1], split(m[2], ",")...] + end + + # unknown + error("Could not parse: $(name)") +end diff --git a/test/utils/parse_test.jl b/test/utils/parse_test.jl new file mode 100644 index 0000000..a3f9edf --- /dev/null +++ b/test/utils/parse_test.jl @@ -0,0 +1,12 @@ +# 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. + +using MIPLearn + +@testset "Parse" begin + @test MIPLearn.parse_name("x") == ["x"] + @test MIPLearn.parse_name("x[3]") == ["x", "3"] + @test MIPLearn.parse_name("test_eq[x]") == ["test_eq", "x"] + @test MIPLearn.parse_name("test_eq[x,y,z]") == ["test_eq", "x", "y", "z"] +end