From 10812cc54992401de6e0b440a07e01f6cfc1178e Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 27 Nov 2023 01:32:29 +0300 Subject: [PATCH] Provide `Base.oneunit()` ``` julia> euclidean(a, b) ERROR: MethodError: no method matching VariableRef(::AffExpr) Closest candidates are: (::Type{GenericVariableRef{T}} where T)(::Any, ::Any) @ JuMP ~/.julia/packages/JuMP/h0lrf/src/variables.jl:251 GenericVariableRef{T}(::ConstraintRef{GenericModel{T}, <:MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex}}) where T @ JuMP ~/.julia/packages/JuMP/h0lrf/src/variables.jl:520 GenericVariableRef{T}(::GenericModel{T}) where T @ JuMP ~/.julia/packages/JuMP/h0lrf/src/variables.jl:494 Stacktrace: [1] oneunit(#unused#::Type{VariableRef}) @ Base ./number.jl:370 [2] _eval_start(d::Euclidean, #unused#::Type{VariableRef}, #unused#::Type{VariableRef}, #unused#::Nothing) @ Distances ~/.julia/packages/Distances/PvoXa/src/metrics.jl:320 [3] _eval_start(d::Euclidean, #unused#::Type{VariableRef}, #unused#::Type{VariableRef}) @ Distances ~/.julia/packages/Distances/PvoXa/src/metrics.jl:318 [4] eval_start(d::Euclidean, a::VariableRef, b::VariableRef) @ Distances ~/.julia/packages/Distances/PvoXa/src/metrics.jl:317 [5] _evaluate(d::Euclidean, a::VariableRef, b::VariableRef, #unused#::Nothing) @ Distances ~/.julia/packages/Distances/PvoXa/src/metrics.jl:236 [6] (::Euclidean)(a::VariableRef, b::VariableRef) @ Distances ~/.julia/packages/Distances/PvoXa/src/metrics.jl:328 [7] top-level scope @ REPL[8]:1 ``` --- src/aff_expr.jl | 4 ++++ src/variables.jl | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/aff_expr.jl b/src/aff_expr.jl index 86570a9ad2b..b6352eae1f5 100644 --- a/src/aff_expr.jl +++ b/src/aff_expr.jl @@ -203,8 +203,12 @@ Base.zero(a::GenericAffExpr) = zero(typeof(a)) function Base.one(::Type{GenericAffExpr{C,V}}) where {C,V} return GenericAffExpr{C,V}(one(C), OrderedDict{V,C}()) end +function Base.oneunit(::Type{GenericAffExpr{C,V}}) where {C,V} + return GenericAffExpr{C,V}(oneunit(C), OrderedDict{V,C}()) +end Base.one(a::GenericAffExpr) = one(typeof(a)) +Base.oneunit(a::GenericAffExpr) = oneunit(typeof(a)) Base.copy(a::GenericAffExpr) = GenericAffExpr(copy(a.constant), copy(a.terms)) diff --git a/src/variables.jl b/src/variables.jl index df70cf9e9a3..693ec20a05f 100644 --- a/src/variables.jl +++ b/src/variables.jl @@ -360,10 +360,14 @@ function Base.zero(::Type{V}) where {V<:AbstractVariableRef} end Base.one(v::AbstractVariableRef) = one(typeof(v)) +Base.oneunit(v::AbstractVariableRef) = oneunit(typeof(v)) function Base.one(::Type{V}) where {V<:AbstractVariableRef} return one(GenericAffExpr{value_type(V),V}) end +function Base.oneunit(::Type{V}) where {V<:AbstractVariableRef} + return oneunit(GenericAffExpr{value_type(V),V}) +end """ coefficient(v1::GenericVariableRef{T}, v2::GenericVariableRef{T}) where {T}