@@ -55,7 +55,14 @@ function VertexModel(sys::ODESystem, inputs, outputs; verbose=false, name=getnam
5555 sym = [s => _get_metadata (sys, s) for s in _sym]
5656
5757 _psym = getname .(gen. params)
58- psym = [s => _get_metadata (sys, s) for s in _psym]
58+ psym = map (gen. params) do p
59+ pname = getname (p)
60+ md = _get_metadata (sys, pname)
61+ if p in gen. unused_params
62+ md = (; md... , unused= true )
63+ end
64+ pname => md
65+ end
5966
6067 _obssym = getname .(gen. obsstates)
6168 obssym = [s => _get_metadata (sys, s) for s in _obssym]
@@ -152,7 +159,14 @@ function EdgeModel(sys::ODESystem, srcin, dstin, srcout, dstout; verbose=false,
152159 sym = [s => _get_metadata (sys, s) for s in _sym]
153160
154161 _psym = getname .(gen. params)
155- psym = [s => _get_metadata (sys, s) for s in _psym]
162+ psym = map (gen. params) do p
163+ pname = getname (p)
164+ md = _get_metadata (sys, pname)
165+ if p in gen. unused_params
166+ md = (; md... , unused= true )
167+ end
168+ pname => md
169+ end
156170
157171 _obssym = getname .(gen. obsstates)
158172 obssym = [s => _get_metadata (sys, s) for s in _obssym]
@@ -373,12 +387,11 @@ function generate_io_function(_sys, inputss::Tuple, outputss::Tuple;
373387 fftype = _determine_fftype (out_deps, states, allinputs, params, iv)
374388
375389 # filter out unnecessary parameters
376- # var_deps = _all_rhs_symbols(eqs)
377- # used_params = params ∩ (var_deps ∪ obs_deps ∪ out_deps)
378- # if Set(params) != Set(used_params)
379- # verbose && @info "Remove parameters $(collect(setdiff(params, used_params))) which arn't used in the equations."
380- # params = used_params
381- # end
390+ var_deps = _all_rhs_symbols (eqs)
391+ unused_params = Set (setdiff (params, (var_deps ∪ out_deps))) # do not exclud obs_deps
392+ if verbose && ! isempth (unused_params)
393+ @info " Parameters $(unused_params) do not appear in equations of f and g and will be marked as unused."
394+ end
382395
383396 # TODO : explore Symbolcs/SymbolicUtils CSE
384397 # now generate the actual functions
@@ -412,19 +425,22 @@ function generate_io_function(_sys, inputss::Tuple, outputss::Tuple;
412425 obsformulas = [eq. rhs for eq in obseqs]
413426 _, obsf_ip = build_function (obsformulas, states, inputss... , params, iv; cse= true , expression)
414427
415- return (;f= f_ip, g= g_ip,
416- mass_matrix,
417- states,
418- inputss,
419- outputss,
420- obsstates,
421- fftype,
422- obsf = obsf_ip,
423- equations= formulas,
424- outputeqs= Dict (Iterators. flatten (outputss) .=> gformulas),
425- observed= Dict (getname .(obsstates) .=> obsformulas),
426- odesystem= sys,
427- params)
428+ return (;
429+ f= f_ip, g= g_ip,
430+ mass_matrix,
431+ states,
432+ inputss,
433+ outputss,
434+ obsstates,
435+ fftype,
436+ obsf = obsf_ip,
437+ equations= formulas,
438+ outputeqs= Dict (Iterators. flatten (outputss) .=> gformulas),
439+ observed= Dict (getname .(obsstates) .=> obsformulas),
440+ odesystem= sys,
441+ params,
442+ unused_params
443+ )
428444end
429445
430446function _determine_fftype (deps, states, allinputs, params, t)
0 commit comments