From a0909c20da5ffa311ee21e6e3e842f880cf3c61b Mon Sep 17 00:00:00 2001 From: foreverallama Date: Tue, 2 Dec 2025 13:40:16 +0530 Subject: [PATCH 1/3] Temp fix for loading datetime; fix loading dynamic properties --- src/MAT_subsys.jl | 11 +++++++---- src/MAT_types.jl | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/MAT_subsys.jl b/src/MAT_subsys.jl index 0b94169..86ae960 100644 --- a/src/MAT_subsys.jl +++ b/src/MAT_subsys.jl @@ -325,10 +325,13 @@ end function get_dynamic_properties(subsys::Subsystem, dep_id::UInt32) - if length(subsys.dynprop_metadata) == 0 + if dep_id == UInt32(0) return Dict{String,Any}() end + # dynprops metadata is stored in format + # [(nprops, prop_obj_id_1, ..., prop_obj_id_n), ...] for each dep_id + offset = 1 while dep_id > 0 nprops = subsys.dynprop_metadata[offset] @@ -341,7 +344,7 @@ function get_dynamic_properties(subsys::Subsystem, dep_id::UInt32) offset += 1 dyn_prop_obj_ids = subsys.dynprop_metadata[offset:(offset + ndynprops - 1)] - if dyn_prop_obj_ids == UInt32[] + if length(dyn_prop_obj_ids) == 0 return Dict{String,Any}() end dyn_prop_map = Dict{String,Any}() @@ -361,7 +364,7 @@ function get_properties(subsys::Subsystem, object_id::UInt32) return Dict{String,Any}() end - class_id, _, _, saveobj_id, normobj_id, _ = get_object_metadata(subsys, object_id) + class_id, _, _, saveobj_id, normobj_id, dep_id = get_object_metadata(subsys, object_id) if saveobj_id != 0 saveobj_ret_type = true obj_type_id = saveobj_id @@ -372,7 +375,7 @@ function get_properties(subsys::Subsystem, object_id::UInt32) defaults = get_default_properties(subsys, class_id) prop_map = merge(defaults, get_saved_properties(subsys, obj_type_id, saveobj_ret_type)) - dyn_props = get_dynamic_properties(subsys, object_id) + dyn_props = get_dynamic_properties(subsys, dep_id) merge!(prop_map, dyn_props) return prop_map end diff --git a/src/MAT_types.jl b/src/MAT_types.jl index 1b89a64..14c90ad 100644 --- a/src/MAT_types.jl +++ b/src/MAT_types.jl @@ -494,7 +494,7 @@ end ms_to_datetime(ms::Complex) = ms_to_datetime(real(ms)) function ms_to_datetime(ms::Real) s, ms_rem = fldmod(ms, 1_000) # whole seconds and remainder milliseconds - return DateTime(1970, 1, 1) + Second(s) + Millisecond(ms_rem) + return DateTime(1970, 1, 1) + Second(s) + Millisecond(round(Int, ms_rem)) end function to_matlab_data(d::DateTime) From 0809b3c59aa8451bcfc77c8c8d60def87c175523 Mon Sep 17 00:00:00 2001 From: foreverallama Date: Sat, 6 Dec 2025 20:26:11 +0530 Subject: [PATCH 2/3] revert changes to MAT_subsys --- src/MAT_subsys.jl | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/MAT_subsys.jl b/src/MAT_subsys.jl index 86ae960..0b94169 100644 --- a/src/MAT_subsys.jl +++ b/src/MAT_subsys.jl @@ -325,13 +325,10 @@ end function get_dynamic_properties(subsys::Subsystem, dep_id::UInt32) - if dep_id == UInt32(0) + if length(subsys.dynprop_metadata) == 0 return Dict{String,Any}() end - # dynprops metadata is stored in format - # [(nprops, prop_obj_id_1, ..., prop_obj_id_n), ...] for each dep_id - offset = 1 while dep_id > 0 nprops = subsys.dynprop_metadata[offset] @@ -344,7 +341,7 @@ function get_dynamic_properties(subsys::Subsystem, dep_id::UInt32) offset += 1 dyn_prop_obj_ids = subsys.dynprop_metadata[offset:(offset + ndynprops - 1)] - if length(dyn_prop_obj_ids) == 0 + if dyn_prop_obj_ids == UInt32[] return Dict{String,Any}() end dyn_prop_map = Dict{String,Any}() @@ -364,7 +361,7 @@ function get_properties(subsys::Subsystem, object_id::UInt32) return Dict{String,Any}() end - class_id, _, _, saveobj_id, normobj_id, dep_id = get_object_metadata(subsys, object_id) + class_id, _, _, saveobj_id, normobj_id, _ = get_object_metadata(subsys, object_id) if saveobj_id != 0 saveobj_ret_type = true obj_type_id = saveobj_id @@ -375,7 +372,7 @@ function get_properties(subsys::Subsystem, object_id::UInt32) defaults = get_default_properties(subsys, class_id) prop_map = merge(defaults, get_saved_properties(subsys, obj_type_id, saveobj_ret_type)) - dyn_props = get_dynamic_properties(subsys, dep_id) + dyn_props = get_dynamic_properties(subsys, object_id) merge!(prop_map, dyn_props) return prop_map end From 486bdab643cd968fc9b9d0924d3d1d9239b3afe2 Mon Sep 17 00:00:00 2001 From: foreverallama Date: Sat, 6 Dec 2025 20:35:17 +0530 Subject: [PATCH 3/3] Add test for complex valued datetime data in MAT-file; update test mat-files --- test/read.jl | 4 ++++ test/v7.3/struct_table_datetime.mat | Bin 34400 -> 41744 bytes test/v7/struct_table_datetime.mat | Bin 1451 -> 1496 bytes 3 files changed, 4 insertions(+) diff --git a/test/read.jl b/test/read.jl index 08dc429..7222de4 100644 --- a/test/read.jl +++ b/test/read.jl @@ -273,6 +273,10 @@ for format in ["v7", "v7.3"] @test dt isa DateTime @test dt - DateTime(2019, 12, 2, 16, 42, 49) < Second(1) + @test "testDatetimeComplex" in keys(vars) + dtc = vars["testDatetimeComplex"] + @test dtc isa DateTime + # test no conversion at all vars = matread(filepath; convert_opaque=false)["s"] t = vars["testTable"] diff --git a/test/v7.3/struct_table_datetime.mat b/test/v7.3/struct_table_datetime.mat index 9082308c5624adaf05a4ffd4e33dc9cabf4a8b38..3c201c02d2621f00a6bae8980389b836aa0e1c32 100644 GIT binary patch literal 41744 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

MXC87)S#n7G-emp97-@lvDhOet1 z6nwD1MM?cSCrTy9fp6-JfA2o!?YaXcHywe9ss^w==4 UBL|Y&Gnh~O{egp;PvCF(e?3_8)c^nh delta 4234 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