From e563aaa2e7c6e1454e4ffe1afd98ade58e9d655c Mon Sep 17 00:00:00 2001 From: Aayush Sabharwal Date: Tue, 6 Aug 2024 18:55:58 +0530 Subject: [PATCH 1/4] fix: better handle empty parameter dependencies --- src/systems/parameter_buffer.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/systems/parameter_buffer.jl b/src/systems/parameter_buffer.jl index 67b26ea50c..1bd90762bd 100644 --- a/src/systems/parameter_buffer.jl +++ b/src/systems/parameter_buffer.jl @@ -59,7 +59,7 @@ function MTKParameters( end p = Dict() missing_params = Set() - pdeps = has_parameter_dependencies(sys) ? parameter_dependencies(sys) : nothing + pdeps = has_parameter_dependencies(sys) ? parameter_dependencies(sys) : [] for sym in all_ps ttsym = default_toterm(sym) @@ -92,7 +92,7 @@ function MTKParameters( delete!(missing_params, ttsym) end - if pdeps !== nothing + if !isempty(pdeps) for eq in pdeps sym = eq.lhs expr = eq.rhs From f658073de0ab8a6933177a9d41016e17424ccd50 Mon Sep 17 00:00:00 2001 From: Aayush Sabharwal Date: Tue, 6 Aug 2024 18:57:09 +0530 Subject: [PATCH 2/4] feat: implement `size` and `IndexStyle` for `MTKParameters` --- src/systems/parameter_buffer.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/systems/parameter_buffer.jl b/src/systems/parameter_buffer.jl index 1bd90762bd..8b5a303c29 100644 --- a/src/systems/parameter_buffer.jl +++ b/src/systems/parameter_buffer.jl @@ -678,6 +678,10 @@ end return len end +Base.size(ps::MTKParameters) = (length(ps),) + +Base.IndexStyle(::Type{T}) where {T <: MTKParameters} = IndexLinear() + Base.getindex(p::MTKParameters, pind::ParameterIndex) = parameter_values(p, pind) Base.setindex!(p::MTKParameters, val, pind::ParameterIndex) = set_parameter!(p, val, pind) From 2811b1d0d1226727134bd15199dd661a9c0ff64c Mon Sep 17 00:00:00 2001 From: Aayush Sabharwal Date: Fri, 9 Aug 2024 14:02:54 +0530 Subject: [PATCH 3/4] refactor: make `repack` call `replace` --- src/systems/parameter_buffer.jl | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/systems/parameter_buffer.jl b/src/systems/parameter_buffer.jl index 8b5a303c29..72af9f594d 100644 --- a/src/systems/parameter_buffer.jl +++ b/src/systems/parameter_buffer.jl @@ -279,10 +279,7 @@ function SciMLStructures.canonicalize(::SciMLStructures.Tunable, p::MTKParameter arr = p.tunable repack = let p = p function (new_val) - if new_val !== p.tunable - copyto!(p.tunable, new_val) - end - return p + return SciMLStructures.replace(SciMLStructures.Tunable(), p, new_val) end end return arr, repack, true @@ -303,12 +300,9 @@ for (Portion, field, recurse) in [(SciMLStructures.Discrete, :discrete, 1) (Nonnumeric, :nonnumeric, 1)] @eval function SciMLStructures.canonicalize(::$Portion, p::MTKParameters) as_vector = buffer_to_arraypartition(p.$field) - repack = let as_vector = as_vector, p = p + repack = let p = p function (new_val) - if new_val !== as_vector - update_tuple_of_buffers(new_val, p.$field) - end - p + return SciMLStructures.replace(($Portion)(), p, new_val) end end return as_vector, repack, true From 94f1c3d354c95ed839adb11a61d06617d342d8a2 Mon Sep 17 00:00:00 2001 From: Aayush Sabharwal Date: Tue, 22 Oct 2024 16:38:35 +0530 Subject: [PATCH 4/4] test: fix repack test --- test/mtkparameters.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mtkparameters.jl b/test/mtkparameters.jl index b4fc1a9677..603426aaf7 100644 --- a/test/mtkparameters.jl +++ b/test/mtkparameters.jl @@ -53,7 +53,7 @@ for (portion, values) in [(Tunable(), [1.0, 5.0, 6.0, 7.0]) SciMLStructures.replace!(portion, ps, ones(length(buffer))) # make sure it is in-place @test all(isone, canonicalize(portion, ps)[1]) - repack(zeros(length(buffer))) + global ps = repack(zeros(length(buffer))) @test all(iszero, canonicalize(portion, ps)[1]) end