From c53d3ab1e19089e9d0332744a2a0eaf16a3f6026 Mon Sep 17 00:00:00 2001 From: odow Date: Tue, 7 Jan 2025 12:31:52 +1300 Subject: [PATCH 1/2] Implement MOI.Utilities.scalar_type for (Matrix|Sparse)VectorAffineFunction --- src/utils.jl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/utils.jl b/src/utils.jl index 7e0b738c..bf34ffa5 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -239,6 +239,7 @@ struct MatrixVectorAffineFunction{AT,VT} <: MOI.AbstractVectorFunction terms::AT constants::VT end + MOI.constant(func::MatrixVectorAffineFunction) = func.constants function Base.convert( ::Type{MOI.VectorAffineFunction{T}}, @@ -269,14 +270,23 @@ function MOIU.isapprox_zero( return MOIU.isapprox_zero(standard_form(func), tol) end -_scalar(::Type{<:MatrixVectorAffineFunction}) = VectorScalarAffineFunction -_scalar(::Type{<:SparseVectorAffineFunction}) = SparseScalarAffineFunction +function MOI.Utilities.scalar_type(::Type{<:MatrixVectorAffineFunction}) + return VectorScalarAffineFunction +end + +function MOI.Utilities.scalar_type(::Type{<:SparseVectorAffineFunction}) + return SparseScalarAffineFunction +end + function Base.getindex( it::MOI.Utilities.ScalarFunctionIterator{F}, output_index::Integer, ) where {F<:Union{MatrixVectorAffineFunction,SparseVectorAffineFunction}} - return _scalar(F)(it.f.terms[output_index, :], it.f.constants[output_index]) + return MOI.Utilities.scalar_type(F)( + it.f.terms[output_index, :], + it.f.constants[output_index], + ) end function _index_map_to_oneto!(index_map, v::MOI.VariableIndex) From 4b5759e1b772633ff8ca9955fb5aa443676d34e0 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Tue, 7 Jan 2025 12:40:41 +1300 Subject: [PATCH 2/2] Update src/utils.jl --- src/utils.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils.jl b/src/utils.jl index bf34ffa5..dad12f7a 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -278,7 +278,6 @@ function MOI.Utilities.scalar_type(::Type{<:SparseVectorAffineFunction}) return SparseScalarAffineFunction end - function Base.getindex( it::MOI.Utilities.ScalarFunctionIterator{F}, output_index::Integer,