Skip to content

Recursive `readdict` does not work for JLD2 but does for HDF5

I haven't come up with a minimal example yet, but, basically, reading entries from an HDF5 file that were originally written from a nested Dict lead to the expected output for HDF5 files

Dict{String, Any} with 7 entries:
  "lookup5" => Dict{String, Any}("key"=>2, "value"=>Dict{String, Any}("μ"=>12.3, "σ"=>3.3, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))
  "lookup1" => Dict{String, Any}("key"=>0, "value"=>Dict{String, Any}("μ"=>10.0, "σ"=>0.5, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))
  "lookup6" => Dict{String, Any}("key"=>3, "value"=>Dict{String, Any}("μ"=>15.7, "σ"=>3.4, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))
  "lookup2" => Dict{String, Any}("key"=>4, "value"=>Dict{String, Any}("μ"=>21.0, "σ"=>2.1, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))
  "lookup4" => Dict{String, Any}("key"=>6, "value"=>Dict{String, Any}("μ"=>30.0, "σ"=>8.2, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))
  "lookup3" => Dict{String, Any}("key"=>5, "value"=>Dict{String, Any}("μ"=>21.1, "σ"=>3.7, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))
  "lookup7" => Dict{String, Any}("key"=>1, "value"=>Dict{String, Any}("μ"=>11.0, "σ"=>1.7, "_type"=>"ColonyGrowthModels.InverseNormal{Float64}"))

whereas the same thing written to and read via readdict from a JLD2 file leads to a flattened hierarchy:

Dict{String, Any} with 28 entries:
  "lookup2/value/σ"     => 2.1
  "lookup6/value/μ"     => 15.7
  "lookup1/value/σ"     => 0.5
  "lookup5/value/μ"     => 12.3
  "lookup4/value/_type" => "ColonyGrowthModels.InverseNormal{Float64}"
  "lookup6/value/σ"     => 3.4
  "lookup7/value/σ"     => 1.7
  "lookup2/value/μ"     => 21.0
  "lookup7/value/_type" => "ColonyGrowthModels.InverseNormal{Float64}"
  "lookup3/value/_type" => "ColonyGrowthModels.InverseNormal{Float64}"
  "lookup3/key"         => 5
  "lookup5/value/_type" => "ColonyGrowthModels.InverseNormal{Float64}"
  "lookup2/value/_type" => "ColonyGrowthModels.InverseNormal{Float64}"
  "lookup7/key"         => 1
  "lookup4/value/μ"     => 30.0
  "lookup1/value/μ"     => 10.0
  "lookup3/value/σ"     => 3.7
  "lookup6/key"         => 3
  "lookup5/key"         => 2
  "lookup6/value/_type" => "ColonyGrowthModels.InverseNormal{Float64}"
  "lookup7/value/μ"     => 11.0
  ⋮                     => ⋮