You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
# UnitCommitment.jl: Optimization Package for Security-Constrained Unit Commitment
|
|
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
|
|
# Released under the modified BSD license. See COPYING.md for more details.
|
|
|
|
struct DotDict
|
|
inner::Dict
|
|
end
|
|
|
|
DotDict() = DotDict(Dict())
|
|
|
|
function Base.setproperty!(d::DotDict, key::Symbol, value)
|
|
setindex!(getfield(d, :inner), value, key)
|
|
end
|
|
|
|
function Base.getproperty(d::DotDict, key::Symbol)
|
|
(key == :inner ? getfield(d, :inner) : d.inner[key])
|
|
end
|
|
|
|
function Base.getindex(d::DotDict, key::Int64)
|
|
d.inner[Symbol(key)]
|
|
end
|
|
|
|
function Base.getindex(d::DotDict, key::Symbol)
|
|
d.inner[key]
|
|
end
|
|
|
|
function Base.keys(d::DotDict)
|
|
keys(d.inner)
|
|
end
|
|
|
|
function Base.values(d::DotDict)
|
|
values(d.inner)
|
|
end
|
|
|
|
function Base.iterate(d::DotDict)
|
|
iterate(values(d.inner))
|
|
end
|
|
|
|
function Base.iterate(d::DotDict, v::Int64)
|
|
iterate(values(d.inner), v)
|
|
end
|
|
|
|
function Base.length(d::DotDict)
|
|
length(values(d.inner))
|
|
end
|
|
|
|
function Base.show(io::IO, d::DotDict)
|
|
print(io, "DotDict with $(length(keys(d.inner))) entries:\n")
|
|
count = 0
|
|
for k in keys(d.inner)
|
|
count += 1
|
|
if count > 10
|
|
print(io, " ...\n")
|
|
break
|
|
end
|
|
print(io, " :$(k) => $(d.inner[k])\n")
|
|
end
|
|
end
|
|
|
|
function recursive_to_dot_dict(el)
|
|
if typeof(el) == Dict{String, Any}
|
|
return DotDict(Dict(Symbol(k) => recursive_to_dot_dict(el[k]) for k in keys(el)))
|
|
else
|
|
return el
|
|
end
|
|
end
|
|
|
|
export recursive_to_dot_dict |