From 5eef18cb219f8b1fb8a6431b838c313d8985459d Mon Sep 17 00:00:00 2001 From: Matthew Wilhelm Date: Sun, 3 May 2020 14:45:25 -0400 Subject: [PATCH] Fix is_canonical for SQF, VQF --- src/Utilities/functions.jl | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Utilities/functions.jl b/src/Utilities/functions.jl index b0fedc7018..47ccf80a6c 100644 --- a/src/Utilities/functions.jl +++ b/src/Utilities/functions.jl @@ -364,17 +364,29 @@ function unsafe_add(t1::VT, t2::VT) where VT <: Union{MOI.VectorAffineTerm, end """ - is_canonical(f::Union{ScalarAffineFunction, ScalarQuadraticFunction - VectorAffineFunction, VectorQuadraticTerm}) + is_canonical(f::Union{ScalarAffineFunction, VectorAffineFunction}) Returns a Bool indicating whether the function is in canonical form. See [`canonical`](@ref). """ -function is_canonical(f::Union{SAF, VAF, SQF, VQF}) +function is_canonical(f::Union{SAF, VAF}) is_strictly_sorted(f.terms, MOI.term_indices, t -> !iszero(MOI.coefficient(t))) end +""" + is_canonical(f::Union{ScalarQuadraticFunction, VectorQuadraticFunction}) + +Returns a Bool indicating whether the function is in canonical form. +See [`canonical`](@ref). +""" +function is_canonical(f::Union{SQF, VQF}) + v = is_strictly_sorted(f.affine_terms, MOI.term_indices, + t -> !iszero(MOI.coefficient(t))) + v &= is_strictly_sorted(f.quadratic_terms, MOI.term_indices, + t -> !iszero(MOI.coefficient(t))) +end + """ is_strictly_sorted(x::AbstractVector, by, filter)