Skip to content

Cannot Iterate on CleverDicts with Abstract Types #1157

@pulsipher

Description

@pulsipher

With the recent changes made to CleverDict, iterating on such with abstract keys and/or values leads to an assertion error due to the code shown below (after deletion occurs thus switching to the OrderedDict):

return el::Pair{K, V}, State(i)

Here is a simple contrived example:

using MathOptInterface
const MOIUC = MathOptInterface.Utilities.CleverDicts

data = MOIUC.CleverDict{MOI.VariableIndex, Number}()
new_key1 = MOIUC.add_item(data, 42.42)
new_key2 = MOIUC.add_item(data, 42.42)
delete!(data, new_key2)

for (k, v) in data
   println(v)
end
ERROR: TypeError: in typeassert, expected Pair{MathOptInterface.VariableIndex,Number}, got Pair{MathOptInterface.VariableIndex,Float64}
Stacktrace:
 [1] iterate(::MathOptInterface.Utilities.CleverDicts.CleverDict{MathOptInterface.VariableIndex,Number,typeof(MathOptInterface.Utilities.CleverDicts.key_to_index),getfield(MathOptInterface.Utilities.CleverDicts, Symbol("##1#2")){MathOptInterface.VariableIndex}}) at my_path\.julia\packages\MathOptInterface\R1y80\src\Utilities\CleverDicts.jl:291
 [2] top-level scope at .\REPL[37]:1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions