@@ -25,7 +25,7 @@ See [`summarize`](@ref), [`list_of_issues`](@ref), and
2525function analyze end
2626
2727"""
28- summarize([io::IO,] AbstractData; verbose = true, max_issues = typemax(Int), kwargs...)
28+ summarize([io::IO,] AbstractData; name_source = nothing, verbose = true, max_issues = typemax(Int), kwargs...)
2929
3030Print a summary of the analysis results contained in `AbstractData` to the
3131specified IO stream. If no IO stream is provided, it defaults to `stdout`.
@@ -41,9 +41,11 @@ be a subtype of `AbstractIssue`). In the verbose case it will provide a text
4141explaning the issue. In the non-verbose case it will provide just the issue
4242name.
4343
44- summarize([io::IO,] issue::AbstractIssue; verbose = true)
44+ summarize([io::IO,] issue::AbstractIssue; name_source = nothing, verbose = true)
4545
4646This variant allows summarizing a single issue instance of type `AbstractIssue`.
47+ The model tha led to the issue can be provided to `name_source`, it will be used
48+ to generate the name of variables and constraints in the issue summary.
4749"""
4850function summarize end
4951
@@ -72,17 +74,23 @@ function summarize(io::IO, ::Type{T}; verbose = true) where {T<:AbstractIssue}
7274 end
7375end
7476
75- function summarize (io:: IO , issue:: AbstractIssue ; verbose = true )
77+ function summarize (
78+ io:: IO ,
79+ issue:: AbstractIssue ;
80+ name_source = nothing ,
81+ verbose = true ,
82+ )
7683 if verbose
77- return _verbose_summarize (io, issue)
84+ return _verbose_summarize (io, issue, name_source )
7885 else
79- return _summarize (io, issue)
86+ return _summarize (io, issue, name_source )
8087 end
8188end
8289
8390function summarize (
8491 io:: IO ,
8592 issues:: Vector{T} ;
93+ name_source = nothing ,
8694 verbose = true ,
8795 max_issues = typemax (Int),
8896) where {T<: AbstractIssue }
@@ -92,7 +100,7 @@ function summarize(
92100 print (io, " \n\n ## List of issues\n\n " )
93101 for issue in first (issues, max_issues)
94102 print (io, " * " )
95- summarize (io, issue, verbose = verbose)
103+ summarize (io, issue, verbose = verbose, name_source = name_source )
96104 print (io, " \n " )
97105 end
98106 return
@@ -102,9 +110,79 @@ function summarize(data::AbstractData; kwargs...)
102110 return summarize (stdout , data; kwargs... )
103111end
104112
113+ """
114+ value(issue::AbstractIssue)
115+
116+ Return the value associated to a particular issue. The value is a number
117+ with a different meaning depending on the type of issue. For example, for
118+ some numerical issues, it can be the coefficient value.
119+ """
120+ function value (issue:: AbstractIssue , :: Nothing )
121+ return value (issue)
122+ end
123+ function value (issue:: AbstractIssue , :: MOI.ModelLike )
124+ return value (issue)
125+ end
126+
127+ """
128+ variable(issue::AbstractIssue)
129+
130+ Return the variable associated to a particular issue.
131+ """
132+ function variable (issue:: AbstractIssue , :: Nothing )
133+ return variable (issue)
134+ end
135+ function variable (issue:: AbstractIssue , :: MOI.ModelLike )
136+ return variable (issue)
137+ end
138+
139+ """
140+ variables(issue::AbstractIssue)
141+
142+ Return the variables associated to a particular issue.
143+ """
144+ function variables (issue:: AbstractIssue , :: Nothing )
145+ return variables (issue)
146+ end
147+ function variables (issue:: AbstractIssue , :: MOI.ModelLike )
148+ return variables (issue)
149+ end
150+
151+ """
152+ constraint(issue::AbstractIssue)
153+
154+ Return the constraint associated to a particular issue.
155+ """
156+ function constraint (issue:: AbstractIssue , :: Nothing )
157+ return constraint (issue)
158+ end
159+ function constraint (issue:: AbstractIssue , :: MOI.ModelLike )
160+ return constraint (issue)
161+ end
162+
105163function _verbose_summarize end
106164function _summarize end
107165
166+ function _name (ref:: MOI.VariableIndex , model:: MOI.ModelLike )
167+ name = MOI. get (model, MOI. VariableName (), ref)
168+ if ! isempty (name)
169+ return name
170+ end
171+ return " $ref "
172+ end
173+
174+ function _name (ref:: MOI.ConstraintIndex , model:: MOI.ModelLike )
175+ name = MOI. get (model, MOI. ConstraintName (), ref)
176+ if ! isempty (name)
177+ return name
178+ end
179+ return " $ref "
180+ end
181+
182+ function _name (ref, :: Nothing )
183+ return " $ref "
184+ end
185+
108186include (" numerical.jl" )
109187include (" feasibility.jl" )
110188include (" infeasibility.jl" )
0 commit comments