JuliaIO / JLD.jl

Saving and loading julia variables while preserving native types
MIT License
278 stars 55 forks source link

`LoadError: type DataType has no field mutable` #314

Open JordiBolibar opened 2 years ago

JordiBolibar commented 2 years ago

I'm having an issue while saving a PyObject together with PyCallJLD.jl. I'm doing:

JLD.save(joinpath(ODINN.root_dir, "test/data/gdirs.jld"), "gdirs", gdirs)

Which returns the following error:

Error encountered while save FileIO.File{FileIO.DataFormat{:JLD}, String}("/home/jovyan/Julia/fork/ODINN/test/data/gdirs.jld").

Fatal error:
ERROR: LoadError: type DataType has no field mutable
Stacktrace:
  [1] getproperty
    @ ./Base.jl:37 [inlined]
  [2] write_ref(parent::JLD.JldFile, data::Vector{UInt8}, wsession::JLD.JldWriteSession)
    @ JLD /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:696
  [3] macro expansion
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/jld_types.jl:639 [inlined]
  [4] h5convert!(out::Ptr{UInt8}, file::JLD.JldFile, x::PyCallJLD.PyObjectSerialization, wsession::JLD.JldWriteSession)
    @ JLD /srv/julia/pkg/packages/JLD/JHrZe/src/jld_types.jl:654
  [5] write_compound(parent::JLD.JldFile, name::String, s::PyCallJLD.PyObjectSerialization, wsession::JLD.JldWriteSession; kargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ JLD /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:733
  [6] write_compound
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:727 [inlined]
  [7] #_write#23
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:723 [inlined]
  [8] _write
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:723 [inlined]
  [9] #write#17
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:542 [inlined]
 [10] write
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:542 [inlined]
 [11] (::JLD.var"#41#42"{String, PyObject, Tuple{}})(file::JLD.JldFile)
    @ JLD /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:1260
 [12] jldopen(::JLD.var"#41#42"{String, PyObject, Tuple{}}, ::String, ::Vararg{String}; kws::Base.Pairs{Symbol, Bool, Tuple{Symbol, Symbol}, NamedTuple{(:compatible, :compress), Tuple{Bool, Bool}}})
    @ JLD /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:261
 [13] #fileio_save#40
    @ /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:1258 [inlined]
 [14] fileio_save(::FileIO.File{FileIO.DataFormat{:JLD}, String}, ::String, ::PyObject)
    @ JLD /srv/julia/pkg/packages/JLD/JHrZe/src/JLD.jl:1255
 [15] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:716
 [16] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:714
 [17] action(::Symbol, ::Vector{Union{Base.PkgId, Module}}, ::FileIO.Formatted, ::String, ::Vararg{Any}; options::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:219
 [18] action(::Symbol, ::Vector{Union{Base.PkgId, Module}}, ::FileIO.Formatted, ::String, ::PyObject)
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:197
 [19] action(::Symbol, ::Vector{Union{Base.PkgId, Module}}, ::Symbol, ::String, ::String, ::Vararg{Any}; options::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:185
 [20] action
    @ /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:185 [inlined]
 [21] #save#20
    @ /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:129 [inlined]
 [22] save(::String, ::String, ::PyObject)
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:126
 [23] run()
    @ Main ~/Julia/fork/ODINN/src/scripts/toy_model.jl:45
 [24] top-level scope
    @ ~/Julia/fork/ODINN/src/scripts/toy_model.jl:120
Stacktrace:
  [1] handle_error(e::ErrorException, q::Base.PkgId, bt::Vector{Union{Ptr{Nothing}, Base.InterpreterIP}})
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/error_handling.jl:61
  [2] handle_exceptions(exceptions::Vector{Tuple{Any, Union{Base.PkgId, Module}, Vector}}, action::String)
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/error_handling.jl:56
  [3] action(::Symbol, ::Vector{Union{Base.PkgId, Module}}, ::FileIO.Formatted, ::String, ::Vararg{Any}; options::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:228
  [4] action(::Symbol, ::Vector{Union{Base.PkgId, Module}}, ::FileIO.Formatted, ::String, ::PyObject)
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:197
  [5] action(::Symbol, ::Vector{Union{Base.PkgId, Module}}, ::Symbol, ::String, ::String, ::Vararg{Any}; options::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:185
  [6] action
    @ /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:185 [inlined]
  [7] #save#20
    @ /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:129 [inlined]
  [8] save(::String, ::String, ::PyObject)
    @ FileIO /srv/julia/pkg/packages/FileIO/u9YLx/src/loadsave.jl:126
  [9] run()
    @ Main ~/Julia/fork/ODINN/src/scripts/toy_model.jl:45
 [10] top-level scope
    @ ~/Julia/fork/ODINN/src/scripts/toy_model.jl:120
in expression starting at /home/jovyan/Julia/fork/ODINN/src/scripts/toy_model.jl:120

Other packages (e.g. Zygote.jl) have had similar issues, apparently starting from Julia 1.7. An example of a fix here: https://github.com/FluxML/Zygote.jl/pull/1003

Any idea how to fix this or to get a workaround? Thanks in advance!