-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Description
This is originally posted at here. It involves package HDF5.jl but judging from the behavior, it might be more related to Julia (>= 1.3) itself.
Description
using HDF5
u = rand(2, 3)
h5open("foo.h5", "w") do f # write some data in `foo`
du = similar(u)
d_create(f, "u", datatype(eltype(du)), ((2, 3, 10), (2, 3, -1,)), "chunk", (2, 3, 10))
end
A = Vector{Int}(1:10) # write some data in `bar`
h5write("bar.h5", "bar", A)
# will error
h5writeattr("bar.h5", "bar", Dict("c"=>"value for metadata parameter c", "d"=>"metadata d"))
@show h5readattr("bar.h5", "bar")
rm("bar.h5"; force=true)
rm("foo.h5"; force=true)This will show error on attempting h5writeattr:
ERROR: UndefVarError: S not defined
Stacktrace:
[1] datatype(::S<:String) at /home/pshi/Documents/julia-1.3.0-mkl/packages/HDF5/Y9Znv/src/HDF5.jl:1178However, in the original code the S is well-defined, here is the code:
On the contrary, if you put the data creation in foo after calling h5writeattr, everything works perfectly (please restart a new Julia repl):
using HDF5
u = rand(2, 3)
A = Vector{Int}(1:10) # write some data in `bar`
h5write("bar.h5", "bar", A)
h5writeattr("bar.h5", "bar", Dict("c"=>"value for metadata parameter c", "d"=>"metadata d"))
h5open("foo.h5", "w") do f # write some data in `foo`
du = similar(u)
d_create(f, "u", datatype(eltype(du)), ((2, 3, 10), (2, 3, -1,)), "chunk", (2, 3, 10))
end
h5writeattr("bar.h5", "bar", Dict("e" => "more metadata"))
# will show all saved meta data
@show h5readattr("bar.h5", "bar")
rm("bar.h5"; force=true)
rm("foo.h5"; force=true)Moreover, if I make either of the two changes, in the first errored example, hard-coding data type or not using similar array, the problem will disappear:
d_create(f, "u", datatype(Float64), ((2, 3, 10), (2, 3, -1,)), "chunk", (2, 3, 10))or
du = rand(2, 3)
d_create(f, "u", datatype(eltype(du)), ((2, 3, 10), (2, 3, -1,)), "chunk", (2, 3, 10))I am confused about this emitted error which does not make sense. Also it only happens on Julia 1.3 or later, not before. I encounter this problem when wrapping h5writeattr in my own function.
Thanks in advance!

