@@ -39,7 +39,7 @@ const UnknownIndexMap = Dict{
3939const TunableIndexMap = Dict{BasicSymbolic,
4040 Union{Int, UnitRange{Int}, Base. ReshapedArray{Int, N, UnitRange{Int}} where {N}}}
4141
42- struct IndexCache
42+ struct IndexCache{D}
4343 unknown_idx:: UnknownIndexMap
4444 # sym => (bufferidx, idx_in_buffer)
4545 discrete_idx:: Dict{BasicSymbolic, DiscreteIndex}
@@ -49,7 +49,7 @@ struct IndexCache
4949 constant_idx:: ParamIndexMap
5050 nonnumeric_idx:: NonnumericMap
5151 observed_syms:: Set{BasicSymbolic}
52- dependent_pars:: Set{BasicSymbolic }
52+ dependent_pars:: Set{D }
5353 discrete_buffer_sizes:: Vector{Vector{BufferTemplate}}
5454 tunable_buffer_size:: BufferTemplate
5555 constant_buffer_sizes:: Vector{BufferTemplate}
@@ -275,7 +275,15 @@ function IndexCache(sys::AbstractSystem)
275275 end
276276 end
277277
278- dependent_pars = Set {BasicSymbolic} ()
278+ pdeps = parameter_dependencies (sys)
279+
280+ D = if isempty (pdeps)
281+ BasicSymbolic
282+ else
283+ mapreduce (typeof, promote_type, getproperty .(pdeps, :lhs ))
284+ end
285+ dependent_pars = Set {D} ()
286+
279287 for eq in parameter_dependencies (sys)
280288 sym = eq. lhs
281289 ttsym = default_toterm (sym)
@@ -289,7 +297,7 @@ function IndexCache(sys::AbstractSystem)
289297 end
290298 end
291299
292- return IndexCache (
300+ return IndexCache {D} (
293301 unk_idxs,
294302 disc_idxs,
295303 callback_to_clocks,
0 commit comments