Skip to content

is_canonical is broken for quadratic functions #1080

@mewilhel

Description

@mewilhel

is_canonical is currently references a terms field in it's definition which doesn't exist for quadratic functions. See below:

"""
    is_canonical(f::Union{ScalarAffineFunction, ScalarQuadraticFunction
                         VectorAffineFunction, VectorQuadraticTerm})
Returns a Bool indicating whether the function is in canonical form.
See [`canonical`](@ref).
"""
function is_canonical(f::Union{SAF, VAF, SQF, VQF})
    is_strictly_sorted(f.terms, MOI.term_indices,
                       t -> !iszero(MOI.coefficient(t)))
end

Probably need to split the function definition as follows:

function is_canonical(f::Union{SAF, VAF})
    is_strictly_sorted(f.terms, MOI.term_indices,
                       t -> !iszero(MOI.coefficient(t)))
end
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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions