Skip to content

Commit e10a22d

Browse files
committed
make JuMP a weakdep
1 parent 0a3cddd commit e10a22d

File tree

3 files changed

+40
-19
lines changed

3 files changed

+40
-19
lines changed

Project.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ authors = ["guilhermebodin <guilherme.b.moraes@gmail.com>"]
44
version = "0.5.9"
55

66
[deps]
7-
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
87
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
98
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
109

10+
[weakdeps]
11+
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
12+
13+
[extensions]
14+
DualizationJuMPExt = "JuMP"
15+
1116
[compat]
1217
JuMP = "0.23, 1"
1318
MathOptInterface = "1"

src/JuMP.jl renamed to ext/DualizationJuMPExt/DualizationJuMPExt.jl

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
1-
function dualize(model::JuMP.Model, optimizer_constructor = nothing; kwargs...)
1+
# Copyright (c) 2017: Guilherme Bodin, and contributors
2+
#
3+
# Use of this source code is governed by an MIT-style license that can be found
4+
# in the LICENSE.md file or at https://opensource.org/licenses/MIT.
5+
6+
module DualizationJuMPExt
7+
8+
import Dualization
9+
import JuMP
10+
import MathOptInterface as MOI
11+
12+
function Dualization.dualize(
13+
model::JuMP.Model,
14+
optimizer_constructor = nothing;
15+
kwargs...,
16+
)
217
mode = JuMP.mode(model)
318
if mode != JuMP.AUTOMATIC
419
error("Dualization does not support solvers in $(mode) mode")
520
end
621
dual_model = JuMP.Model()
7-
dual_problem = DualProblem(JuMP.backend(dual_model))
8-
dualize(JuMP.backend(model), dual_problem; kwargs...)
22+
dual_problem = Dualization.DualProblem(JuMP.backend(dual_model))
23+
Dualization.dualize(JuMP.backend(model), dual_problem; kwargs...)
924
_fill_obj_dict_with_variables!(dual_model)
1025
_fill_obj_dict_with_constraints!(dual_model)
1126
if optimizer_constructor !== nothing
@@ -60,10 +75,13 @@ function _get_primal_dual_map(model::JuMP.Model)
6075
return model.ext[:_Dualization_jl_PrimalDualMap]
6176
end
6277

63-
function _get_dual_constraint(dual_model, primal_ref::JuMP.VariableRef)
78+
function Dualization._get_dual_constraint(
79+
dual_model,
80+
primal_ref::JuMP.VariableRef,
81+
)
6482
map = _get_primal_dual_map(dual_model)
6583
moi_primal_vi = JuMP.index(primal_ref)
66-
moi_dual_ci, idx = _get_dual_constraint(map, moi_primal_vi)
84+
moi_dual_ci, idx = Dualization._get_dual_constraint(map, moi_primal_vi)
6785
# dual_model = nothing # TODO
6886
if idx === nothing
6987
# variables fixed at zero
@@ -72,27 +90,27 @@ function _get_dual_constraint(dual_model, primal_ref::JuMP.VariableRef)
7290
return JuMP.constraint_ref_with_index(dual_model, moi_dual_ci), idx
7391
end
7492

75-
function _get_primal_constraint(
93+
function Dualization._get_primal_constraint(
7694
dual_model::JuMP.Model,
7795
primal_vi::JuMP.VariableRef,
7896
)
7997
primal_model = JuMP.owner_model(primal_vi)
8098
map = _get_primal_dual_map(dual_model)
8199
moi_primal_vi = JuMP.index(primal_vi)
82-
primal_ci, idx = _get_primal_constraint(map, moi_primal_vi)
100+
primal_ci, idx = Dualization._get_primal_constraint(map, moi_primal_vi)
83101
if primal_ci === nothing
84102
return nothing, idx
85103
end
86104
return JuMP.constraint_ref_with_index(primal_model, primal_ci), idx
87105
end
88106

89-
function _get_dual_variables(
107+
function Dualization._get_dual_variables(
90108
dual_model::JuMP.Model,
91109
primal_ref::JuMP.ConstraintRef,
92110
)
93111
map = _get_primal_dual_map(dual_model)
94112
moi_primal_ci = JuMP.index(primal_ref)
95-
moi_dual_vis = _get_dual_variables(map, moi_primal_ci)
113+
moi_dual_vis = Dualization._get_dual_variables(map, moi_primal_ci)
96114
if moi_dual_vis === nothing
97115
# main constraint of a constrained variable
98116
return nothing
@@ -101,13 +119,13 @@ function _get_dual_variables(
101119
end
102120

103121
# this is a constrained variable constraint
104-
function _get_dual_constraint(
122+
function Dualization._get_dual_constraint(
105123
dual_model::JuMP.Model,
106124
primal_ref::JuMP.ConstraintRef,
107125
)
108126
map = _get_primal_dual_map(dual_model)
109127
moi_primal_ci = JuMP.index(primal_ref)
110-
moi_dual_ci = _get_dual_constraint(map, moi_primal_ci)
128+
moi_dual_ci = Dualization._get_dual_constraint(map, moi_primal_ci)
111129
if moi_dual_ci === nothing
112130
# main constraint of a constrained variable
113131
# or
@@ -117,13 +135,15 @@ function _get_dual_constraint(
117135
return JuMP.constraint_ref_with_index(dual_model, moi_dual_ci)
118136
end
119137

120-
function _get_dual_parameter(
138+
function Dualization._get_dual_parameter(
121139
dual_model::JuMP.Model,
122140
primal_ref::JuMP.VariableRef,
123141
)
124142
map = _get_primal_dual_map(dual_model)
125143
moi_primal_vi = JuMP.index(primal_ref)
126-
moi_dual_vi = _get_dual_parameter(map, moi_primal_vi)
144+
moi_dual_vi = Dualization._get_dual_parameter(map, moi_primal_vi)
127145
# the above line might error
128146
return JuMP.VariableRef(dual_model, moi_dual_vi)
129147
end
148+
149+
end # module DualizationJuMPExt

src/Dualization.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,8 @@
55

66
module Dualization
77

8-
import JuMP
98
import LinearAlgebra
10-
import MathOptInterface
11-
12-
const MOI = MathOptInterface
9+
import MathOptInterface as MOI
1310

1411
include("structures.jl")
1512
include("utils.jl")
@@ -23,6 +20,5 @@ include("dual_model_variables.jl")
2320
include("dual_equality_constraints.jl")
2421
include("dualize.jl")
2522
include("MOI_wrapper.jl")
26-
include("JuMP.jl")
2723

2824
end # module

0 commit comments

Comments
 (0)