diff --git a/ext/ModelAnalyzerJuMPExt/ModelAnalyzerJuMPExt.jl b/ext/ModelAnalyzerJuMPExt/ModelAnalyzerJuMPExt.jl index ce830a6..222b311 100644 --- a/ext/ModelAnalyzerJuMPExt/ModelAnalyzerJuMPExt.jl +++ b/ext/ModelAnalyzerJuMPExt/ModelAnalyzerJuMPExt.jl @@ -40,6 +40,13 @@ function ModelAnalyzer._name(ref::MOI.ConstraintIndex, model::JuMP.GenericModel) return "$jump_ref" end +function ModelAnalyzer._show(ref::MOI.ConstraintIndex, model::JuMP.GenericModel) + jump_ref = JuMP.constraint_ref_with_index(model, ref) + io = IOBuffer() + show(io, jump_ref) + return String(take!(io)) +end + """ variable(issue::ModelAnalyzer.AbstractIssue, model::JuMP.GenericModel) diff --git a/src/Infeasibility/summarize.jl b/src/Infeasibility/summarize.jl index 54cd369..93aa15e 100644 --- a/src/Infeasibility/summarize.jl +++ b/src/Infeasibility/summarize.jl @@ -248,11 +248,13 @@ function ModelAnalyzer._verbose_summarize( issue::IrreducibleInfeasibleSubset, model, ) - return print( - io, - "Irreducible Infeasible Subset: ", - join(map(x -> ModelAnalyzer._name(x, model), issue.constraint), ", "), - ) + print(io, "Irreducible Infeasible Subset: ") + for constraint in issue.constraint + println(io) + print(io, " ") + print(io, ModelAnalyzer._show(constraint, model)) + end + return end function ModelAnalyzer.list_of_issues(data::Data, ::Type{InfeasibleBounds}) diff --git a/src/ModelAnalyzer.jl b/src/ModelAnalyzer.jl index 55eb526..1f2cdd7 100644 --- a/src/ModelAnalyzer.jl +++ b/src/ModelAnalyzer.jl @@ -219,6 +219,10 @@ function _name(ref, ::Nothing) return "$ref" end +function _show(ref::MOI.ConstraintIndex, model) + return _name(ref, model) +end + include("Numerical/Numerical.jl") include("Feasibility/Feasibility.jl") include("Infeasibility/Infeasibility.jl") diff --git a/test/test_Infeasibility.jl b/test/test_Infeasibility.jl index 423ed7f..e30ebba 100644 --- a/test/test_Infeasibility.jl +++ b/test/test_Infeasibility.jl @@ -572,6 +572,8 @@ function test_iis_spare() iis = ModelAnalyzer.constraints(ret[], model) @test length(iis) == 2 @test Set(iis) == Set([c2, c1]) + io = IOBuffer() + ModelAnalyzer.summarize(io, ret[1], verbose = true, model = model) return end