11"""Module for reading excel file with input for generation of
2- a design matrix and converting to an OrderedDict that can be
2+ a design matrix and converting to a dict that can be
33read by semeio.fmudesign.DesignMatrix.generate
44"""
55
6- from collections import Counter , OrderedDict
6+ from collections import Counter
77from collections .abc import Hashable , Mapping , Sequence
88from pathlib import Path
99from typing import Any , cast
@@ -20,7 +20,7 @@ def excel2dict_design(
2020 gen_input_sheet : str = "general_input" ,
2121 design_input_sheet : str = "designinput" ,
2222 default_val_sheet : str = "defaultvalues" ,
23- ) -> OrderedDict [str , Any ]:
23+ ) -> dict [str , Any ]:
2424 """Read excel file with input to design setup
2525 Currently only specification of
2626 onebyone design is implemented
@@ -32,7 +32,7 @@ def excel2dict_design(
3232 default_val_sheet (str): Sheet name for default input
3333
3434 Returns:
35- OrderedDict on format for DesignMatrix.generate
35+ dict on format for DesignMatrix.generate
3636 """
3737
3838 # Find sheets
@@ -74,7 +74,7 @@ def inputdict_to_yaml(inputdict: Mapping[str, Any], filename: str) -> None:
7474 """Write inputdict to yaml format
7575
7676 Args:
77- inputdict (OrderedDict )
77+ inputdict (dict )
7878 filename (str): path for where to write file
7979 """
8080 with open (filename , "w" , encoding = "utf-8" ) as stream :
@@ -171,7 +171,7 @@ def _excel2dict_onebyone(
171171 gen_input_sheet : str ,
172172 design_input_sheet : str ,
173173 default_val_sheet : str ,
174- ) -> OrderedDict [str , Any ]:
174+ ) -> dict [str , Any ]:
175175 """Reads specification for onebyone design
176176
177177 Args:
@@ -184,11 +184,11 @@ def _excel2dict_onebyone(
184184 and designinput.
185185
186186 Returns:
187- OrderedDict on format for DesignMatrix.generate
187+ dict on format for DesignMatrix.generate
188188 """
189189 input_filename = str (input_filename )
190190 seedname = "RMS_SEED"
191- inputdict : OrderedDict [str , Any ] = OrderedDict ()
191+ inputdict : dict [str , Any ] = {}
192192
193193 generalinput = pd .read_excel (
194194 input_filename , gen_input_sheet , header = None , index_col = 0 , engine = "openpyxl"
@@ -223,7 +223,7 @@ def _excel2dict_onebyone(
223223
224224 if "background" in generalinput .index :
225225 background = str (generalinput .loc ["background" ].iloc [0 ])
226- inputdict ["background" ] = OrderedDict ()
226+ inputdict ["background" ] = {}
227227 if background .endswith (("csv" , "xlsx" )):
228228 inputdict ["background" ]["extern" ] = resolve_path (input_filename , background )
229229 elif background == "None" :
@@ -235,7 +235,7 @@ def _excel2dict_onebyone(
235235
236236 inputdict ["defaultvalues" ] = _read_defaultvalues (input_filename , default_val_sheet )
237237
238- inputdict ["sensitivities" ] = OrderedDict ()
238+ inputdict ["sensitivities" ] = {}
239239 designinput = pd .read_excel (input_filename , design_input_sheet , engine = "openpyxl" )
240240 designinput .dropna (axis = 0 , how = "all" , inplace = True )
241241 designinput = designinput .loc [
@@ -259,12 +259,10 @@ def _excel2dict_onebyone(
259259 mask = numeric_decimals .notna () & (numeric_decimals % 1 == 0 )
260260
261261 valid_decimals = designinput [mask ]
262- inputdict ["decimals" ] = OrderedDict (
263- {
264- row .param_name : int (cast (float , row .decimals ))
265- for row in valid_decimals .itertuples ()
266- }
267- )
262+ inputdict ["decimals" ] = {
263+ row .param_name : int (cast (float , row .decimals ))
264+ for row in valid_decimals .itertuples ()
265+ }
268266
269267 grouped = designinput .groupby ("sensname" , sort = False )
270268
@@ -275,7 +273,7 @@ def _excel2dict_onebyone(
275273 group ,
276274 )
277275
278- sensdict : OrderedDict [str , Any ] = OrderedDict ()
276+ sensdict : dict [str , Any ] = {}
279277
280278 sens_type = group ["type" ].iloc [0 ]
281279 if sens_type in {"ref" , "background" }:
@@ -318,11 +316,11 @@ def _excel2dict_onebyone(
318316 sensdict ["numreal" ] = int (group ["numreal" ].iloc [0 ])
319317
320318 # If this sensitivity has dependencies, then get them from sheet
321- sensdict ["dependencies" ] = OrderedDict ()
319+ sensdict ["dependencies" ] = {}
322320 if "dependencies" in group :
323321 # Get all dependencies in this sensitivity
324322 valid_deps = group [group ["dependencies" ].notna ()]
325- dependencies_dict = OrderedDict ()
323+ dependencies_dict = {}
326324
327325 # For each dependency, get the mapping
328326 for row in valid_deps .itertuples ():
@@ -339,7 +337,7 @@ def _excel2dict_onebyone(
339337 return inputdict
340338
341339
342- def _read_defaultvalues (filename : str , sheetname : str ) -> OrderedDict [str , Any ]:
340+ def _read_defaultvalues (filename : str , sheetname : str ) -> dict [str , Any ]:
343341 """Reads defaultvalues, also used as values for
344342 reference/base case
345343
@@ -348,7 +346,7 @@ def _read_defaultvalues(filename: str, sheetname: str) -> OrderedDict[str, Any]:
348346 sheetname (string): name of defaultsheet
349347
350348 Returns:
351- OrderedDict with defaultvalues (parameter, value)
349+ dict with defaultvalues (parameter, value)
352350 """
353351 default_df = pd .read_excel (
354352 filename , sheetname , header = 0 , index_col = 0 , engine = "openpyxl"
@@ -360,7 +358,7 @@ def _read_defaultvalues(filename: str, sheetname: str) -> OrderedDict[str, Any]:
360358 ]
361359
362360 if default_df .empty :
363- return OrderedDict ()
361+ return {}
364362
365363 # Strip leading/trailing spaces from parameter names such that
366364 # for example " PARAM" and "PARAM" are treated as duplicates.
@@ -374,12 +372,12 @@ def _read_defaultvalues(filename: str, sheetname: str) -> OrderedDict[str, Any]:
374372 f"Duplicate parameter names found in sheet '{ sheetname } ': "
375373 f"{ ', ' .join (duplicate_names )} . All parameter names must be unique."
376374 )
377- return OrderedDict (default_df .iloc [:, 0 ].to_dict ())
375+ return dict (default_df .iloc [:, 0 ].to_dict ())
378376
379377
380378def _read_dependencies (
381379 * , filename : str , sheetname : str , from_parameter : str
382- ) -> OrderedDict [str , Any ]:
380+ ) -> dict [str , Any ]:
383381 """Reads parameters that are set from other parameters
384382
385383 Args:
@@ -388,10 +386,10 @@ def _read_dependencies(
388386 from_parameter (string): parameter name to map from
389387
390388 Returns:
391- OrderedDict with design parameter, dependent parameters
389+ dict with design parameter, dependent parameters
392390 and values
393391 """
394- depend_dict : OrderedDict [str , Any ] = OrderedDict ()
392+ depend_dict : dict [str , Any ] = {}
395393 depend_df = pd .read_excel (
396394 filename , sheetname , dtype = str , na_values = "" , engine = "openpyxl"
397395 )
@@ -402,7 +400,7 @@ def _read_dependencies(
402400
403401 if from_parameter in depend_df :
404402 depend_dict ["from_values" ] = depend_df [from_parameter ].tolist ()
405- depend_dict ["to_params" ] = OrderedDict ()
403+ depend_dict ["to_params" ] = {}
406404 for key in depend_df :
407405 if key != from_parameter :
408406 depend_dict ["to_params" ][key ] = depend_df [key ].tolist ()
@@ -415,18 +413,18 @@ def _read_dependencies(
415413 return depend_dict
416414
417415
418- def _read_background (inp_filename : str , bck_sheet : str ) -> OrderedDict [str , Any ]:
416+ def _read_background (inp_filename : str , bck_sheet : str ) -> dict [str , Any ]:
419417 """Reads excel sheet with background parameters and distributions
420418
421419 Args:
422420 inp_filename (path): path to Excel workbook
423421 bck_sheet (str): name of sheet with background parameters
424422
425423 Returns:
426- OrderedDict with parameter names and distributions
424+ dict with parameter names and distributions
427425 """
428- backdict : OrderedDict [str , Any ] = OrderedDict ()
429- paramdict : OrderedDict [str , Any ] = OrderedDict ()
426+ backdict : dict [str , Any ] = {}
427+ paramdict : dict [str , Any ] = {}
430428 bck_input = pd .read_excel (inp_filename , bck_sheet , engine = "openpyxl" )
431429 bck_input .dropna (axis = 0 , how = "all" , inplace = True )
432430 bck_input = bck_input .loc [
@@ -493,7 +491,7 @@ def _read_background(inp_filename: str, bck_sheet: str) -> OrderedDict[str, Any]
493491 backdict ["parameters" ] = paramdict
494492
495493 if "decimals" in bck_input :
496- decimals : OrderedDict [str , Any ] = OrderedDict ()
494+ decimals : dict [str , Any ] = {}
497495 for row in bck_input .itertuples ():
498496 if _has_value (row .decimals ) and _is_int (row .decimals ): # type: ignore[arg-type]
499497 decimals [row .param_name ] = int (row .decimals ) # type: ignore[arg-type, index]
@@ -502,14 +500,14 @@ def _read_background(inp_filename: str, bck_sheet: str) -> OrderedDict[str, Any]
502500 return backdict
503501
504502
505- def _read_scenario_sensitivity (sensgroup : pd .DataFrame ) -> OrderedDict [str , Any ]:
503+ def _read_scenario_sensitivity (sensgroup : pd .DataFrame ) -> dict [str , Any ]:
506504 """Reads parameters and values
507505 for scenario sensitivities
508506 """
509- sdict : OrderedDict [str , Any ] = OrderedDict ()
510- sdict ["cases" ] = OrderedDict ()
511- casedict1 : OrderedDict [str , Any ] = OrderedDict ()
512- casedict2 : OrderedDict [str , Any ] = OrderedDict ()
507+ sdict : dict [str , Any ] = {}
508+ sdict ["cases" ] = {}
509+ casedict1 : dict [str , Any ] = {}
510+ casedict2 : dict [str , Any ] = {}
513511
514512 if not _has_value (sensgroup ["senscase1" ].iloc [0 ]):
515513 raise ValueError (
@@ -563,12 +561,12 @@ def _read_scenario_sensitivity(sensgroup: pd.DataFrame) -> OrderedDict[str, Any]
563561 return sdict
564562
565563
566- def _read_constants (sensgroup : pd .DataFrame ) -> OrderedDict [str , Any ]:
564+ def _read_constants (sensgroup : pd .DataFrame ) -> dict [str , Any ]:
567565 """Reads constants to be used together with
568566 seed sensitivity"""
569567 if "dist_param1" not in sensgroup .columns .values :
570568 sensgroup ["dist_param1" ] = float ("NaN" )
571- paramdict : OrderedDict [str , Any ] = OrderedDict ()
569+ paramdict : dict [str , Any ] = {}
572570 for row in sensgroup .itertuples ():
573571 if not _has_value (row .dist_param1 ):
574572 raise ValueError (
@@ -589,7 +587,7 @@ def _read_constants(sensgroup: pd.DataFrame) -> OrderedDict[str, Any]:
589587 return paramdict
590588
591589
592- def _read_dist_sensitivity (sensgroup : pd .DataFrame ) -> OrderedDict [str , Any ]:
590+ def _read_dist_sensitivity (sensgroup : pd .DataFrame ) -> dict [str , Any ]:
593591 """Reads parameters and distributions
594592 for monte carlo sensitivities
595593 """
@@ -601,7 +599,7 @@ def _read_dist_sensitivity(sensgroup: pd.DataFrame) -> OrderedDict[str, Any]:
601599 sensgroup ["dist_param3" ] = float ("NaN" )
602600 if "dist_param4" not in sensgroup .columns .values :
603601 sensgroup ["dist_param4" ] = float ("NaN" )
604- paramdict : OrderedDict [str , Any ] = OrderedDict ()
602+ paramdict : dict [str , Any ] = {}
605603 for row in sensgroup .itertuples ():
606604 if not _has_value (row .param_name ):
607605 raise ValueError (
@@ -650,10 +648,10 @@ def _read_dist_sensitivity(sensgroup: pd.DataFrame) -> OrderedDict[str, Any]:
650648
651649def _read_correlations (
652650 sensgroup : pd .DataFrame , inputfile : str
653- ) -> OrderedDict [str , Any ] | None :
651+ ) -> dict [str , Any ] | None :
654652 if "corr_sheet" in sensgroup :
655653 if not sensgroup ["corr_sheet" ].dropna ().empty :
656- correlations : OrderedDict [str , Any ] = OrderedDict ()
654+ correlations : dict [str , Any ] = {}
657655 correlations ["inputfile" ] = inputfile
658656 correlations ["sheetnames" ] = []
659657 for _index , row in sensgroup .iterrows ():
0 commit comments