@@ -39,7 +39,7 @@ const UnknownIndexMap = Dict{
39
39
const TunableIndexMap = Dict{BasicSymbolic,
40
40
Union{Int, UnitRange{Int}, Base. ReshapedArray{Int, N, UnitRange{Int}} where {N}}}
41
41
42
- struct IndexCache
42
+ struct IndexCache{D}
43
43
unknown_idx:: UnknownIndexMap
44
44
# sym => (bufferidx, idx_in_buffer)
45
45
discrete_idx:: Dict{BasicSymbolic, DiscreteIndex}
@@ -49,7 +49,7 @@ struct IndexCache
49
49
constant_idx:: ParamIndexMap
50
50
nonnumeric_idx:: NonnumericMap
51
51
observed_syms:: Set{BasicSymbolic}
52
- dependent_pars:: Set{BasicSymbolic }
52
+ dependent_pars:: Set{D }
53
53
discrete_buffer_sizes:: Vector{Vector{BufferTemplate}}
54
54
tunable_buffer_size:: BufferTemplate
55
55
constant_buffer_sizes:: Vector{BufferTemplate}
@@ -275,7 +275,15 @@ function IndexCache(sys::AbstractSystem)
275
275
end
276
276
end
277
277
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
+
279
287
for eq in parameter_dependencies (sys)
280
288
sym = eq. lhs
281
289
ttsym = default_toterm (sym)
@@ -289,7 +297,7 @@ function IndexCache(sys::AbstractSystem)
289
297
end
290
298
end
291
299
292
- return IndexCache (
300
+ return IndexCache {D} (
293
301
unk_idxs,
294
302
disc_idxs,
295
303
callback_to_clocks,
0 commit comments