From 9be00a2d85f7cbd855c894b70c14959d51f51ea1 Mon Sep 17 00:00:00 2001 From: Joey Huchette Date: Sat, 30 Dec 2017 11:28:46 -0500 Subject: [PATCH] Another update --- src/PolyJuMP.jl | 13 ++++++++++- src/{default_module.jl => default_methods.jl} | 23 +++---------------- test/polymodule.jl | 2 +- 3 files changed, 16 insertions(+), 22 deletions(-) rename src/{default_module.jl => default_methods.jl} (70%) diff --git a/src/PolyJuMP.jl b/src/PolyJuMP.jl index e3bbbf0..e5a24a5 100644 --- a/src/PolyJuMP.jl +++ b/src/PolyJuMP.jl @@ -79,8 +79,19 @@ 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) + return PolyJuMP + end + get(data.polymodule) +end + include("macros.jl") include("solve.jl") -include("default_module.jl") +include("default_methods.jl") end # module diff --git a/src/default_module.jl b/src/default_methods.jl similarity index 70% rename from src/default_module.jl rename to src/default_methods.jl index 1a165ea..e4c761b 100644 --- a/src/default_module.jl +++ b/src/default_methods.jl @@ -1,24 +1,9 @@ -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 -using JuMP, PolyJuMP, MultivariatePolynomials, SemialgebraicSets -export createpoly, polytype, addpolyconstraint! - -polytype(m::JuMP.Model, p) = _polytype(m, p, p.x) -polytype(m::JuMP.Model, p, X::AbstractVector) = _polytype(m, p, monovec(X)) +polytype(m::JuMP.Model, p::Poly) = getpolymodule(m).polytype(m, p, p.x) +polytype(m::JuMP.Model, p, X::AbstractVector) = getpolymodule(m).polytype(m, p, monovec(X)) # Free polynomial -_polytype(m::JuMP.Model, ::Poly{false}, x::AbstractVector{MT}) where MT<:AbstractMonomial = polynomialtype(MT, JuMP.Variable) +polytype(m::JuMP.Model, ::Poly{false}, x::AbstractVector{MT}) where MT<:AbstractMonomial = MultivariatePolynomials.polynomialtype(MT, JuMP.Variable) # x should be sorted and without duplicates function _createpoly(m::JuMP.Model, ::Poly{false}, x::AbstractVector{<:AbstractMonomial}, category::Symbol) @@ -53,5 +38,3 @@ function addpolyconstraint!(m::JuMP.Model, p, s::ZeroPoly, domain::BasicSemialge end addpolyconstraint!(m::JuMP.Model, args...) = error("PolyJuMP is just a JuMP extension for modelling Polynomial Optimization: it does not implement any reformulation. To use automatic sums of squares (SOS) reformulations, install the SumOfSquares Julia package and try \`using SumOfSquares\` and \`setpolymodule!(SumOfSquares)\` or use \`SOSModel\` instead of \`Model\`.") - -end diff --git a/test/polymodule.jl b/test/polymodule.jl index 6637415..83c205a 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 PolyJuMP.getpolymodule(m) == PolyJuMP.DefaultModule + @test PolyJuMP.getpolymodule(m) == PolyJuMP setpolymodule!(m, TestPolyModule) @test PolyJuMP.getpolymodule(m) == TestPolyModule end