@@ -45,7 +45,10 @@ struct GetParameterIndex{I} <: AbstractParameterGetIndexer
45
45
end
46
46
47
47
is_indexer_timeseries (:: Type{GetParameterIndex{I}} ) where {I} = IndexerNotTimeseries ()
48
- is_indexer_timeseries (:: Type{GetParameterIndex{I}} ) where {I <: ParameterTimeseriesIndex } = IndexerTimeseries ()
48
+ function is_indexer_timeseries (:: Type{GetParameterIndex{I}} ) where {I < :
49
+ ParameterTimeseriesIndex}
50
+ IndexerTimeseries ()
51
+ end
49
52
function indexer_timeseries_index (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )
50
53
gpi. idx. timeseries_idx
51
54
end
@@ -56,38 +59,48 @@ function (gpi::GetParameterIndex)(::Timeseries, prob, args)
56
59
throw (ParameterTimeseriesValueIndexMismatchError {Timeseries} (prob, gpi, args))
57
60
end
58
61
function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(ts:: Timeseries , prob)
59
- gpi .((ts,), (prob,), eachindex (parameter_timeseries (prob, indexer_timeseries_index (gpi))))
62
+ gpi .((ts,), (prob,),
63
+ eachindex (parameter_timeseries (prob, indexer_timeseries_index (gpi))))
60
64
end
61
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(buffer:: AbstractArray , ts:: Timeseries , prob)
62
- for (buf_idx, ts_idx) in zip (eachindex (buffer), eachindex (parameter_timeseries (prob, indexer_timeseries_index (gpi))))
65
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
66
+ buffer:: AbstractArray , ts:: Timeseries , prob)
67
+ for (buf_idx, ts_idx) in zip (eachindex (buffer),
68
+ eachindex (parameter_timeseries (prob, indexer_timeseries_index (gpi))))
63
69
buffer[buf_idx] = gpi (ts, prob, ts_idx)
64
70
end
65
71
return buffer
66
72
end
67
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(:: Timeseries , prob, i:: Union{Int, CartesianIndex} )
73
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
74
+ :: Timeseries , prob, i:: Union{Int, CartesianIndex} )
68
75
parameter_values (prob, gpi. idx, i)
69
76
end
70
77
function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(ts:: Timeseries , prob, :: Colon )
71
78
gpi (ts, prob)
72
79
end
73
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(buffer:: AbstractArray , ts:: Timeseries , prob, :: Colon )
80
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
81
+ buffer:: AbstractArray , ts:: Timeseries , prob, :: Colon )
74
82
gpi (buffer, ts, prob)
75
83
end
76
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(ts:: Timeseries , prob, i:: AbstractArray{Bool} )
77
- map (only (to_indices (parameter_timeseries (prob, indexer_timeseries_index (gpi)), (i,)))) do idx
84
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
85
+ ts:: Timeseries , prob, i:: AbstractArray{Bool} )
86
+ map (only (to_indices (
87
+ parameter_timeseries (prob, indexer_timeseries_index (gpi)), (i,)))) do idx
78
88
gpi (ts, prob, idx)
79
89
end
80
90
end
81
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(buffer:: AbstractArray , ts:: Timeseries , prob, i:: AbstractArray{Bool} )
82
- for (buf_idx, ts_idx) in zip (eachindex (buffer), only (to_indices (parameter_timeseries (prob, indexer_timeseries_index (gpi)), (i,))))
91
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
92
+ buffer:: AbstractArray , ts:: Timeseries , prob, i:: AbstractArray{Bool} )
93
+ for (buf_idx, ts_idx) in zip (eachindex (buffer),
94
+ only (to_indices (parameter_timeseries (prob, indexer_timeseries_index (gpi)), (i,))))
83
95
buffer[buf_idx] = gpi (ts, prob, ts_idx)
84
96
end
85
97
return buffer
86
98
end
87
99
function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(ts:: Timeseries , prob, i)
88
100
gpi .((ts,), (prob,), i)
89
101
end
90
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(buffer:: AbstractArray , ts:: Timeseries , prob, i)
102
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
103
+ buffer:: AbstractArray , ts:: Timeseries , prob, i)
91
104
for (buf_idx, subidx) in zip (eachindex (buffer), i)
92
105
buffer[buf_idx] = gpi (ts, prob, subidx)
93
106
end
96
109
function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(:: NotTimeseries , prob)
97
110
throw (ParameterTimeseriesValueIndexMismatchError {NotTimeseries} (prob, gpi))
98
111
end
99
- function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(:: AbstractArray , :: NotTimeseries , prob)
112
+ function (gpi:: GetParameterIndex{<:ParameterTimeseriesIndex} )(
113
+ :: AbstractArray , :: NotTimeseries , prob)
100
114
throw (ParameterTimeseriesValueIndexMismatchError {NotTimeseries} (prob, gpi))
101
115
end
102
116
103
117
function _getp (sys, :: NotSymbolic , :: NotSymbolic , p)
104
118
return GetParameterIndex (p)
105
119
end
106
120
107
- struct GetParameterTimeseriesIndex{I <: GetParameterIndex , J <: GetParameterIndex{<:ParameterTimeseriesIndex} } <: AbstractParameterGetIndexer
121
+ struct GetParameterTimeseriesIndex{
122
+ I <: GetParameterIndex , J <: GetParameterIndex{<:ParameterTimeseriesIndex} } < :
123
+ AbstractParameterGetIndexer
108
124
param_idx:: I
109
125
param_timeseries_idx:: J
110
126
end
111
127
112
128
is_indexer_timeseries (:: Type{G} ) where {G <: GetParameterTimeseriesIndex } = IndexerBoth ()
113
- indexer_timeseries_index (gpti:: GetParameterTimeseriesIndex ) = indexer_timeseries_index (gpti. param_timeseries_idx)
129
+ function indexer_timeseries_index (gpti:: GetParameterTimeseriesIndex )
130
+ indexer_timeseries_index (gpti. param_timeseries_idx)
131
+ end
114
132
as_not_timeseries_indexer (:: IndexerBoth , gpti:: GetParameterTimeseriesIndex ) = gpti. param_idx
115
- as_timeseries_indexer (:: IndexerBoth , gpti:: GetParameterTimeseriesIndex ) = gpti. param_timeseries_idx
133
+ function as_timeseries_indexer (:: IndexerBoth , gpti:: GetParameterTimeseriesIndex )
134
+ gpti. param_timeseries_idx
135
+ end
116
136
117
137
function (gpti:: GetParameterTimeseriesIndex )(ts:: Timeseries , prob, args... )
118
138
gpti. param_timeseries_idx (ts, prob, args... )
119
139
end
120
- function (gpti:: GetParameterTimeseriesIndex )(buffer:: AbstractArray , ts:: Timeseries , prob, args... )
140
+ function (gpti:: GetParameterTimeseriesIndex )(
141
+ buffer:: AbstractArray , ts:: Timeseries , prob, args... )
121
142
gpti. param_timeseries_idx (buffer, ts, prob, args... )
122
143
end
123
144
function (gpti:: GetParameterTimeseriesIndex )(ts:: NotTimeseries , prob)
@@ -128,17 +149,19 @@ function _getp(sys, ::ScalarSymbolic, ::SymbolicTypeTrait, p)
128
149
idx = parameter_index (sys, p)
129
150
if is_timeseries_parameter (sys, p)
130
151
ts_idx = timeseries_parameter_index (sys, p)
131
- return GetParameterTimeseriesIndex (GetParameterIndex (idx), GetParameterIndex (ts_idx))
152
+ return GetParameterTimeseriesIndex (
153
+ GetParameterIndex (idx), GetParameterIndex (ts_idx))
132
154
else
133
155
return GetParameterIndex (idx)
134
156
end
135
157
end
136
158
137
159
struct MixedTimeseriesIndexes
138
- indexes
160
+ indexes:: Any
139
161
end
140
162
141
- struct MultipleParametersGetter{T <: IsIndexerTimeseries , G, I} <: AbstractParameterGetIndexer
163
+ struct MultipleParametersGetter{T <: IsIndexerTimeseries , G, I} < :
164
+ AbstractParameterGetIndexer
142
165
getters:: G
143
166
timeseries_idx:: I
144
167
@@ -165,7 +188,8 @@ struct MultipleParametersGetter{T <: IsIndexerTimeseries, G, I} <: AbstractParam
165
188
IndexerBoth
166
189
end
167
190
168
- if indexer_type != IndexerNotTimeseries && ! allequal (indexer_timeseries_index (g) for g in getters)
191
+ if indexer_type != IndexerNotTimeseries &&
192
+ ! allequal (indexer_timeseries_index (g) for g in getters)
169
193
if indexer_type == IndexerTimeseries
170
194
throw (ArgumentError (" All parameters must belong to the same timeseries" ))
171
195
else
@@ -175,29 +199,38 @@ struct MultipleParametersGetter{T <: IsIndexerTimeseries, G, I} <: AbstractParam
175
199
end
176
200
end
177
201
178
- return new {indexer_type, typeof(getters), typeof(timeseries_idx)} (getters, timeseries_idx)
202
+ return new {indexer_type, typeof(getters), typeof(timeseries_idx)} (
203
+ getters, timeseries_idx)
179
204
end
180
205
end
181
206
182
- const AtLeastTimeseriesMPG = Union{MultipleParametersGetter{IndexerTimeseries}, MultipleParametersGetter{IndexerBoth}}
183
- const MixedTimeseriesIndexMPG = MultipleParametersGetter{IndexerNotTimeseries, G, MixedTimeseriesIndexes} where {G}
207
+ const AtLeastTimeseriesMPG = Union{
208
+ MultipleParametersGetter{IndexerTimeseries}, MultipleParametersGetter{IndexerBoth}}
209
+ const MixedTimeseriesIndexMPG = MultipleParametersGetter{
210
+ IndexerNotTimeseries, G, MixedTimeseriesIndexes} where {G}
184
211
185
212
is_indexer_timeseries (:: Type{<:MultipleParametersGetter{T}} ) where {T} = T ()
186
213
function indexer_timeseries_index (mpg:: MultipleParametersGetter )
187
214
mpg. timeseries_idx
188
215
end
189
- as_not_timeseries_indexer (:: IndexerBoth , mpg:: MultipleParametersGetter ) = MultipleParametersGetter (as_not_timeseries_indexer .(mpg. getters))
216
+ function as_not_timeseries_indexer (:: IndexerBoth , mpg:: MultipleParametersGetter )
217
+ MultipleParametersGetter (as_not_timeseries_indexer .(mpg. getters))
218
+ end
190
219
191
- as_timeseries_indexer (:: IndexerBoth , mpg:: MultipleParametersGetter ) = MultipleParametersGetter (as_timeseries_indexer .(mpg. getters))
220
+ function as_timeseries_indexer (:: IndexerBoth , mpg:: MultipleParametersGetter )
221
+ MultipleParametersGetter (as_timeseries_indexer .(mpg. getters))
222
+ end
192
223
193
224
for (indexerTimeseriesType, timeseriesType) in [
194
225
(IndexerNotTimeseries, IsTimeseriesTrait),
195
226
(IndexerBoth, NotTimeseries)
196
227
]
197
- @eval function (mpg:: MultipleParametersGetter{$indexerTimeseriesType} )(:: $timeseriesType , prob)
228
+ @eval function (mpg:: MultipleParametersGetter{$indexerTimeseriesType} )(
229
+ :: $timeseriesType , prob)
198
230
CallWith (prob).(mpg. getters)
199
231
end
200
- @eval function (mpg:: MultipleParametersGetter{$indexerTimeseriesType} )(buffer:: AbstractArray , :: $timeseriesType , prob)
232
+ @eval function (mpg:: MultipleParametersGetter{$indexerTimeseriesType} )(
233
+ buffer:: AbstractArray , :: $timeseriesType , prob)
201
234
for (buf_idx, getter) in zip (eachindex (buffer), mpg. getters)
202
235
buffer[buf_idx] = getter (prob)
203
236
end
212
245
function (mpg:: MultipleParametersGetter{IndexerNotTimeseries} )(:: Timeseries , prob, args)
213
246
throw (ParameterTimeseriesValueIndexMismatchError {Timeseries} (prob, mpg, args))
214
247
end
215
- function (mpg:: MultipleParametersGetter{IndexerNotTimeseries} )(:: AbstractArray , :: Timeseries , prob, args)
248
+ function (mpg:: MultipleParametersGetter{IndexerNotTimeseries} )(
249
+ :: AbstractArray , :: Timeseries , prob, args)
216
250
throw (ParameterTimeseriesValueIndexMismatchError {Timeseries} (prob, mpg, args))
217
251
end
218
252
function (mpg:: AtLeastTimeseriesMPG )(ts:: Timeseries , prob)
@@ -227,20 +261,23 @@ function (mpg::AtLeastTimeseriesMPG)(ts::Timeseries, prob, ::Colon)
227
261
mpg (ts, prob)
228
262
end
229
263
function (mpg:: AtLeastTimeseriesMPG )(ts:: Timeseries , prob, i:: AbstractArray{Bool} )
230
- map (only (to_indices (parameter_timeseries (prob, indexer_timeseries_index (mpg)), (i,)))) do idx
264
+ map (only (to_indices (
265
+ parameter_timeseries (prob, indexer_timeseries_index (mpg)), (i,)))) do idx
231
266
mpg (ts, prob, idx)
232
267
end
233
268
end
234
269
function (mpg:: AtLeastTimeseriesMPG )(ts:: Timeseries , prob, i)
235
270
mpg .((ts,), (prob,), i)
236
271
end
237
272
function (mpg:: AtLeastTimeseriesMPG )(buffer:: AbstractArray , ts:: Timeseries , prob)
238
- for (buf_idx, ts_idx) in zip (eachindex (buffer), eachindex (parameter_timeseries (prob, indexer_timeseries_index (mpg))))
273
+ for (buf_idx, ts_idx) in zip (eachindex (buffer),
274
+ eachindex (parameter_timeseries (prob, indexer_timeseries_index (mpg))))
239
275
mpg (buffer[buf_idx], ts, prob, ts_idx)
240
276
end
241
277
return buffer
242
278
end
243
- function (mpg:: AtLeastTimeseriesMPG )(buffer:: AbstractArray , :: Timeseries , prob, i:: Union{Int, CartesianIndex} )
279
+ function (mpg:: AtLeastTimeseriesMPG )(
280
+ buffer:: AbstractArray , :: Timeseries , prob, i:: Union{Int, CartesianIndex} )
244
281
for (buf_idx, getter) in zip (eachindex (buffer), mpg. getters)
245
282
buffer[buf_idx] = getter (prob, i)
246
283
end
249
286
function (mpg:: AtLeastTimeseriesMPG )(buffer:: AbstractArray , ts:: Timeseries , prob, :: Colon )
250
287
mpg (buffer, ts, prob)
251
288
end
252
- function (mpg:: AtLeastTimeseriesMPG )(buffer:: AbstractArray , ts:: Timeseries , prob, i:: AbstractArray{Bool} )
253
- mpg (buffer, ts, prob, only (to_indices (parameter_timeseries (prob, indexer_timeseries_index (mpg)), (i,))))
289
+ function (mpg:: AtLeastTimeseriesMPG )(
290
+ buffer:: AbstractArray , ts:: Timeseries , prob, i:: AbstractArray{Bool} )
291
+ mpg (buffer, ts, prob,
292
+ only (to_indices (parameter_timeseries (prob, indexer_timeseries_index (mpg)), (i,))))
254
293
end
255
294
function (mpg:: AtLeastTimeseriesMPG )(buffer:: AbstractArray , ts:: Timeseries , prob, i)
256
295
for (buf_idx, ts_idx) in zip (eachindex (buffer), i)
261
300
function (mpg:: MultipleParametersGetter{IndexerTimeseries} )(:: NotTimeseries , prob)
262
301
throw (ParameterTimeseriesValueIndexMismatchError {NotTimeseries} (prob, mpg))
263
302
end
264
- function (mpg:: MultipleParametersGetter{IndexerTimeseries} )(:: AbstractArray , :: NotTimeseries , prob)
303
+ function (mpg:: MultipleParametersGetter{IndexerTimeseries} )(
304
+ :: AbstractArray , :: NotTimeseries , prob)
265
305
throw (ParameterTimeseriesValueIndexMismatchError {NotTimeseries} (prob, mpg))
266
306
end
267
307
0 commit comments