Skip to content

Commit

Permalink
Provide Base.oneunit()
Browse files Browse the repository at this point in the history
```
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

```
  • Loading branch information
LebedevRI committed Nov 26, 2023
1 parent bc09f55 commit 837549c
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/aff_expr.jl
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,14 @@ 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))

Base.broadcastable(a::GenericAffExpr) = Ref(a)
Expand Down
6 changes: 6 additions & 0 deletions src/variables.jl
Original file line number Diff line number Diff line change
Expand Up @@ -361,10 +361,16 @@ 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}
Expand Down
10 changes: 10 additions & 0 deletions test/test_variable.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1616,4 +1616,14 @@ function test_variable_eltype()
return
end

function test_variable_one()
model = Model()
@variable(model, x)
@test Base.one(x) == 1
@test Base.one(2*x) == 1
@test Base.oneunit(x) == 1
@test Base.oneunit(2*x) == 1
return
end

end # module TestVariable

0 comments on commit 837549c

Please sign in to comment.