From 8a3d5675096c4ed5faddffdf1c496ff1bd982fd2 Mon Sep 17 00:00:00 2001 From: Joey Huchette Date: Wed, 27 Dec 2017 14:05:06 -0500 Subject: [PATCH] Add DefaultModule --- src/PolyJuMP.jl | 12 +----------- src/module.jl | 19 +++++++++++++++++++ test/polymodule.jl | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 src/module.jl diff --git a/src/PolyJuMP.jl b/src/PolyJuMP.jl index 48f2743..a2b4c75 100644 --- a/src/PolyJuMP.jl +++ b/src/PolyJuMP.jl @@ -78,19 +78,9 @@ function getpolyconstr(m::JuMP.Model) getpolydata(m).polyconstr end -setpolymodule!(m::JuMP.Model, pm::Module) = setpolymodule!(getpolydata(m), pm) -setpolymodule!(data::PolyData, pm::Module) = data.polymodule = pm - -getpolymodule(m::JuMP.Model) = getpolymodule(getpolydata(m)) -function getpolymodule(data::PolyData) - if isnull(data.polymodule) - error("PolyJuMP is just a JuMP extension for modelling Polynomial Optimization but it does not implements any reformulation. You might want to run \`Pkg.add(\"SumOfSquares\")\` to install the Sum of Squares reformulation. If it is installed you can do \`using SumOfSquares\` and then \`setpolymodule!(SumOfSquares)\` to use it or use \`SOSModel\` instead of \`Model\`.") - end - get(data.polymodule) -end - include("macros.jl") include("solve.jl") +include("module.jl") include("deprecated.jl") diff --git a/src/module.jl b/src/module.jl new file mode 100644 index 0000000..aa45307 --- /dev/null +++ b/src/module.jl @@ -0,0 +1,19 @@ +setpolymodule!(m::JuMP.Model, pm::Module) = setpolymodule!(getpolydata(m), pm) +setpolymodule!(data::PolyData, pm::Module) = data.polymodule = pm + +getpolymodule(m::JuMP.Model) = getpolymodule(getpolydata(m)) +function getpolymodule(data::PolyData) + if isnull(data.polymodule) + return DefaultModule + end + get(data.polymodule) +end + +module DefaultModule +import JuMP, PolyJuMP, MultivariatePolynomials +function createpoly(m::JuMP.Model, p::Union{PolyJuMP.Poly{false, :Default}, PolyJuMP.Poly{false, :Classic}}, category::Symbol) + MultivariatePolynomials.polynomial([JuMP.Variable(m, -Inf, Inf, category)*p.x[i] for i in 1:length(p.x)]) +end + +addpolyconstraint!(m::JuMP.Model, args...) = error("PolyJuMP is just a JuMP extension for modelling Polynomial Optimization but it does not implements any reformulation. You might want to run \`Pkg.add(\"SumOfSquares\")\` to install the Sum of Squares reformulation. If it is installed you can do \`using SumOfSquares\` and then \`setpolymodule!(SumOfSquares)\` to use it or use \`SOSModel\` instead of \`Model\`.") +end diff --git a/test/polymodule.jl b/test/polymodule.jl index 20d53b9..6637415 100644 --- a/test/polymodule.jl +++ b/test/polymodule.jl @@ -2,7 +2,7 @@ m = Model() # Triggers the creation of polydata @test isnull(PolyJuMP.getpolydata(m).polymodule) - @test_throws ErrorException PolyJuMP.getpolymodule(m) + @test PolyJuMP.getpolymodule(m) == PolyJuMP.DefaultModule setpolymodule!(m, TestPolyModule) @test PolyJuMP.getpolymodule(m) == TestPolyModule end