@@ -230,7 +230,8 @@ function wrap_parameter_dependencies(sys::AbstractSystem, isscalar)
230
230
end
231
231
232
232
function wrap_array_vars (
233
- sys:: AbstractSystem , exprs; dvs = unknowns (sys), ps = parameters (sys), inputs = nothing )
233
+ sys:: AbstractSystem , exprs; dvs = unknowns (sys), ps = parameters (sys),
234
+ inputs = nothing , history = false )
234
235
isscalar = ! (exprs isa AbstractArray)
235
236
array_vars = Dict {Any, AbstractArray{Int}} ()
236
237
if dvs != = nothing
@@ -328,6 +329,19 @@ function wrap_array_vars(
328
329
array_parameters[p] = (idxs, buffer_idx, sz)
329
330
end
330
331
end
332
+
333
+ inputind = if history
334
+ uind + 2
335
+ else
336
+ uind + 1
337
+ end
338
+ params_offset = if history && hasinputs
339
+ uind + 2
340
+ elseif history || hasinputs
341
+ uind + 1
342
+ else
343
+ uind
344
+ end
331
345
if isscalar
332
346
function (expr)
333
347
Func (
@@ -336,10 +350,10 @@ function wrap_array_vars(
336
350
Let (
337
351
vcat (
338
352
[k ← :(view ($ (expr. args[uind]. name), $ v)) for (k, v) in array_vars],
339
- [k ← :(view ($ (expr. args[uind + hasinputs ]. name), $ v))
353
+ [k ← :(view ($ (expr. args[inputind ]. name), $ v))
340
354
for (k, v) in input_vars],
341
355
[k ← :(reshape (
342
- view ($ (expr. args[uind + hasinputs + buffer_idx]. name), $ idxs),
356
+ view ($ (expr. args[params_offset + buffer_idx]. name), $ idxs),
343
357
$ sz))
344
358
for (k, (idxs, buffer_idx, sz)) in array_parameters],
345
359
[k ← Code. MakeArray (v, symtype (k))
@@ -358,10 +372,10 @@ function wrap_array_vars(
358
372
Let (
359
373
vcat (
360
374
[k ← :(view ($ (expr. args[uind]. name), $ v)) for (k, v) in array_vars],
361
- [k ← :(view ($ (expr. args[uind + hasinputs ]. name), $ v))
375
+ [k ← :(view ($ (expr. args[inputind ]. name), $ v))
362
376
for (k, v) in input_vars],
363
377
[k ← :(reshape (
364
- view ($ (expr. args[uind + hasinputs + buffer_idx]. name), $ idxs),
378
+ view ($ (expr. args[params_offset + buffer_idx]. name), $ idxs),
365
379
$ sz))
366
380
for (k, (idxs, buffer_idx, sz)) in array_parameters],
367
381
[k ← Code. MakeArray (v, symtype (k))
@@ -380,10 +394,10 @@ function wrap_array_vars(
380
394
vcat (
381
395
[k ← :(view ($ (expr. args[uind + 1 ]. name), $ v))
382
396
for (k, v) in array_vars],
383
- [k ← :(view ($ (expr. args[uind + hasinputs + 1 ]. name), $ v))
397
+ [k ← :(view ($ (expr. args[inputind + 1 ]. name), $ v))
384
398
for (k, v) in input_vars],
385
399
[k ← :(reshape (
386
- view ($ (expr. args[uind + hasinputs + buffer_idx + 1 ]. name),
400
+ view ($ (expr. args[params_offset + buffer_idx + 1 ]. name),
387
401
$ idxs),
388
402
$ sz))
389
403
for (k, (idxs, buffer_idx, sz)) in array_parameters],
0 commit comments