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)