@@ -7,7 +7,9 @@ export RMSEVariable,
7
7
model_names,
8
8
category_names,
9
9
rmse_units,
10
- read_rmses
10
+ read_rmses,
11
+ getindex,
12
+ setindex!
11
13
12
14
"""
13
15
Holding root mean squared errors over multiple categories and models for a single
@@ -304,4 +306,120 @@ function read_rmses(csv_file::String, short_name::String; units = nothing)
304
306
)
305
307
end
306
308
309
+ """
310
+ function _index_convert(key2index, key::Colon)
311
+
312
+ Convert the symbol colon into an index for indexing.
313
+ """
314
+ function _index_convert (key2index, key:: Colon )
315
+ return collect (values (key2index))
316
+ end
317
+
318
+ """
319
+ function _index_convert(key2index,
320
+ indices::AbstractVector{I})
321
+ where {I <: Integer}
322
+
323
+ Convert a string into an index for indexing.
324
+ """
325
+ function _index_convert (key2index, key:: AbstractString )
326
+ ! haskey (key2index, key) &&
327
+ error (" Key ($key ) is not present in ($(keys (key2index)) )" )
328
+ return key2index[key]
329
+ end
330
+
331
+ """
332
+ function _index_convert(key2index,
333
+ keys::AbstractVector{S})
334
+ where {S <: AbstractString}
335
+
336
+ Convert a vector of strings to indices for indexing.
337
+ """
338
+ function _index_convert (
339
+ key2index,
340
+ keys:: AbstractVector{S} ,
341
+ ) where {S <: AbstractString }
342
+ for key in keys
343
+ ! haskey (key2index, key) &&
344
+ error (" Key ($key ) is not present in ($(keys (key2index)) )" )
345
+ end
346
+ return [key2index[key] for key in keys]
347
+ end
348
+
349
+ """
350
+ function _index_convert(key2index,
351
+ indices::AbstractVector{I})
352
+ where {I <: Integer}
353
+
354
+ Convert an integer to an index for indexing.
355
+ """
356
+ function _index_convert (key2index, index:: Integer )
357
+ ! (index in values (key2index)) &&
358
+ error (" Index ($index ) is not present in ($(values (key2index)) )" )
359
+ return index
360
+ end
361
+
362
+ """
363
+ function _index_convert(key2index,
364
+ indices::AbstractVector{I})
365
+ where {I <: Integer}
366
+
367
+ Convert a vector of integers to indices for indexing.
368
+ """
369
+ function _index_convert (
370
+ key2index,
371
+ indices:: AbstractVector{I} ,
372
+ ) where {I <: Integer }
373
+ for index in indices
374
+ ! (index in values (key2index)) &&
375
+ error (" Index ($index ) is not present in ($(values (key2index)) )" )
376
+ end
377
+ return indices
378
+ end
379
+
380
+ """
381
+ Base.getindex(rmse_var::RMSEVariable, model_name, category)
382
+
383
+ Return a subset of the array holding the root mean square errors as specified by
384
+ `model_name` and `category`. Support indexing by `String` and `Int`.
385
+ """
386
+ function Base. getindex (rmse_var:: RMSEVariable , model_name, category)
387
+ model_idx = _index_convert (rmse_var. model2index, model_name)
388
+ cat_idx = _index_convert (rmse_var. category2index, category)
389
+ return rmse_var. RMSEs[model_idx, cat_idx]
390
+ end
391
+
392
+ """
393
+ Base.getindex(rmse_var::RMSEVariable, model_name::String)
394
+
395
+ Return a subset of the array holding the root mean square errors as specified by
396
+ `model_name`. Support indexing by `String`. Do not support linear indexing.
397
+ """
398
+ function Base. getindex (rmse_var:: RMSEVariable , model_name:: String )
399
+ return rmse_var[model_name, :]
400
+ end
401
+
402
+ """
403
+ Base.setindex!(rmse_var::RMSEVariable, rmse, model_name, category)
404
+
405
+ Store a value or values from an array in the array of root mean squared errors in
406
+ `rmse_var`. Support indexing by `String` and `Int`.
407
+ """
408
+ function Base. setindex! (rmse_var:: RMSEVariable , rmse, model_name, category)
409
+ model_idx = _index_convert (rmse_var. model2index, model_name)
410
+ cat_idx = _index_convert (rmse_var. category2index, category)
411
+ rmse_var. RMSEs[model_idx, cat_idx] = rmse
412
+ end
413
+
414
+ """
415
+ Base.setindex!(rmse_var::RMSEVariable, rmse, model_name::String)
416
+
417
+ Store a value or values from an array into the array of root mean squared errors in
418
+ `rmse_var`. Support indexing by `String`. Do not support linear indexing.
419
+ """
420
+ function Base. setindex! (rmse_var:: RMSEVariable , rmse, model_name:: String )
421
+ model_idx = _index_convert (rmse_var. model2index, model_name)
422
+ rmse_var. RMSEs[model_idx, :] = rmse
423
+ end
424
+
307
425
end
0 commit comments