Skip to content

Commit 85f3776

Browse files
committed
add function to strip metadata type
1 parent ad8be92 commit 85f3776

File tree

3 files changed

+72
-5
lines changed

3 files changed

+72
-5
lines changed

src/NetworkDynamics.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,11 @@ export initialize_component, initialize_component!, init_residual
8888
export initialize_componentwise, initialize_componentwise!, interface_values
8989
include("initialization.jl")
9090

91-
export has_metadata, get_metadata, set_metadata!, delete_metadata!
92-
export has_default, get_default, set_default!, delete_default!, set_defaults!
93-
export has_guess, get_guess, set_guess!, delete_guess!
94-
export has_init, get_init, set_init!, delete_init!
95-
export has_bounds, get_bounds, set_bounds!, delete_bounds!
91+
export has_metadata, get_metadata, set_metadata!, delete_metadata!, strip_metadata!
92+
export has_default, get_default, set_default!, delete_default!, set_defaults!, strip_defaults!
93+
export has_guess, get_guess, set_guess!, delete_guess!, strip_guesses!
94+
export has_init, get_init, set_init!, delete_init!, strip_inits!
95+
export has_bounds, get_bounds, set_bounds!, delete_bounds!, strip_bounds!
9696
export has_graphelement, get_graphelement, set_graphelement!
9797
export get_initial_state, dump_initial_state, dump_state
9898
export has_callback, get_callbacks, set_callback!, add_callback!

src/metadata.jl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,33 @@ function delete_metadata!(c::ComponentModel, sym::Symbol, key::Symbol)
101101
end
102102
delete_metadata!(nw::Network, sym::SymbolicIndex, key::Symbol) = delete_metadata!(getcomp(nw, sym), sym.subidx, key)
103103

104+
"""
105+
strip_metadata!(c::ComponentModel, key::Symbol)
106+
107+
Remove all metadata of type `key` from the component.
108+
"""
109+
function strip_metadata!(c::ComponentModel, key::Symbol)
110+
md_dict = symmetadata(c)
111+
for (sym, sym_md) in md_dict
112+
delete!(sym_md, key)
113+
end
114+
return c
115+
end
116+
strip_metadata!(nw::Network, sym::SymbolicIndex, key::Symbol) = strip_metadata!(getcomp(nw, sym), key)
117+
104118
# generate default methods for some per-symbol metadata fields
105119
for md in [:default, :guess, :init, :bounds]
106120
fname_has = Symbol(:has_, md)
107121
fname_get = Symbol(:get_, md)
108122
fname_set = Symbol(:set_, md, :!)
109123
fname_del = Symbol(:delete_, md, :!)
124+
fname_strip = if md == :guess
125+
:strip_guesses!
126+
elseif md == :bounds
127+
:strip_bounds!
128+
else
129+
Symbol(:strip_, string(md)*"s", :!)
130+
end
110131
@eval begin
111132
"""
112133
has_$($(QuoteNode(md)))(c::ComponentModel, sym::Symbol)
@@ -159,6 +180,17 @@ for md in [:default, :guess, :init, :bounds]
159180
See also [`has_$($(QuoteNode(md)))`](@ref), [`set_$($(QuoteNode(md)))!`](@ref).
160181
"""
161182
$fname_del(c::Comp_or_NW, sym) = delete_metadata!(c, sym, $(QuoteNode(md)))
183+
184+
"""
185+
strip_$($(QuoteNode(md)))!(c::ComponentModel)
186+
strip_$($(QuoteNode(md)))!(nw::Network, idx::Union{VIndex,EIndex})
187+
188+
Removes all `$($(QuoteNode(md)))` values from a component model,
189+
or from a component referenced by `idx` in a network.
190+
191+
See also [`delete_$($(QuoteNode(md)))!`](@ref), [`set_$($(QuoteNode(md)))!`](@ref).
192+
"""
193+
$fname_strip(c::Comp_or_NW) = strip_metadata!(c, $(QuoteNode(md)))
162194
end
163195
end
164196

test/metadata_test.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,3 +421,38 @@ end
421421
end
422422
end
423423
end
424+
425+
@testset "strip_metadata! function" begin
426+
# Create a test vertex model
427+
vm = Lib.swing_mtk()
428+
429+
# Set up various metadata types
430+
set_default!(vm, , 1.0)
431+
set_default!(vm, , 2.0)
432+
set_guess!(vm, :M, 5.0)
433+
set_init!(vm, :Pmech, 3.0)
434+
set_metadata!(vm, , :custom, "test_value")
435+
436+
# Verify metadata was set
437+
@test has_default(vm, )
438+
@test has_default(vm, )
439+
@test has_guess(vm, :M)
440+
@test has_init(vm, :Pmech)
441+
@test has_metadata(vm, , :custom)
442+
443+
# Test stripping defaults
444+
strip_metadata!(vm, :default)
445+
@test !has_default(vm, )
446+
@test !has_default(vm, )
447+
# Other metadata should remain
448+
@test has_guess(vm, :M)
449+
@test has_init(vm, :Pmech)
450+
@test has_metadata(vm, , :custom)
451+
452+
# Test stripping custom metadata
453+
strip_metadata!(vm, :custom)
454+
@test !has_metadata(vm, , :custom)
455+
# Other metadata should remain
456+
@test has_guess(vm, :M)
457+
@test has_init(vm, :Pmech)
458+
end

0 commit comments

Comments
 (0)