Skip to content

Commit

Permalink
Another update
Browse files Browse the repository at this point in the history
  • Loading branch information
joehuchette committed Dec 30, 2017
1 parent 35bd6f9 commit b8b2b89
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 22 deletions.
13 changes: 12 additions & 1 deletion src/PolyJuMP.jl
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,20 @@ 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")

include("deprecated.jl")

Expand Down
23 changes: 3 additions & 20 deletions src/default_module.jl → src/default_methods.jl
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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
2 changes: 1 addition & 1 deletion test/polymodule.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit b8b2b89

Please sign in to comment.