@@ -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