Esempio n. 1
0
def process_cfg_conv(raw_cfg, def_cfg_vals=None, req_keys=None, int_list=True):
    """
    Converts the given raw configuration, filling in defaults and converting the specified value (if any) to the
    default value's type.
    @param raw_cfg: The configuration map.
    @param def_cfg_vals: dictionary of default values
    @param req_keys: dictionary of required types
    @param int_list: flag to specify if lists should converted to a list of integers
    @return: The processed configuration.

    """
    proc_cfg = {}
    for key in raw_cfg:
        if not (key in def_cfg_vals or key in req_keys):
            raise InvalidDataError(
                "Unexpected key '{}' in configuration ('ini') file.".format(
                    key))
    key = None
    try:
        for key, def_val in def_cfg_vals.items():
            proc_cfg[key] = conv_raw_val(raw_cfg.get(key), def_val, int_list)
        for key, type_func in req_keys.items():
            proc_cfg[key] = type_func(raw_cfg[key])
    except KeyError as e:
        raise KeyError("Missing config val for key '{}'".format(key, e))
    except Exception as e:
        raise InvalidDataError('Problem with config vals on key {}: {}'.format(
            key, e))
    if proc_cfg[SCIPY_OPT_METHOD] != DEF_OPT_METHOD:
        proc_cfg[SCIPY_OPT_METHOD] = proc_cfg[SCIPY_OPT_METHOD].lower()
        if proc_cfg[SCIPY_OPT_METHOD] not in TESTED_SCIPY_MIN:
            warning(
                "Only the following optimization methods have been tested: scipy.optimize.minimize with {}."
                "".format(TESTED_SCIPY_MIN))
    for int_key in [TEMP, NITER_SUCCESS]:
        if proc_cfg[int_key] is not None:
            proc_cfg[int_key] = float(proc_cfg[int_key])

    # Remove any repeated parameters, or zero-character-length params (can happen if accidentally an additional comma)
    if len(proc_cfg[OPT_PARAMS]) > 0:
        filtered_opt_params = []
        for param in proc_cfg[OPT_PARAMS]:
            if len(param) > 0:
                if param in filtered_opt_params:
                    warning("'{}' repeated in '{}'; skipping repeated entry".
                            format(param, OPT_PARAMS))
                else:
                    filtered_opt_params.append(param)
        proc_cfg[OPT_PARAMS] = filtered_opt_params

    return proc_cfg
Esempio n. 2
0
 def testNotIntList(self):
     non_int_str = 'a,b,c'
     non_int_list = ['a', 'b', 'c']
     self.assertEqual(non_int_list,
                      conv_raw_val(non_int_str, [], int_list=False))
Esempio n. 3
0
 def testNotIntMissFlag(self):
     non_int_str = 'a,b,c'
     try:
         conv_raw_val(non_int_str, [])
     except ValueError as e:
         self.assertTrue("invalid literal for int()" in e.message)
Esempio n. 4
0
 def testIntList(self):
     int_str = '2,3,4'
     int_list = [2, 3, 4]
     self.assertEquals(int_list, conv_raw_val(int_str, []))
Esempio n. 5
0
 def testNotIntList(self):
     non_int_str = 'a,b,c'
     non_int_list = ['a', 'b', 'c']
     self.assertEqual(non_int_list, conv_raw_val(non_int_str, [], int_list=False))
Esempio n. 6
0
 def testNotIntMissFlag(self):
     non_int_str = 'a,b,c'
     try:
         conv_raw_val(non_int_str, [])
     except ValueError as e:
         self.assertTrue("invalid literal for int()" in e.message)
Esempio n. 7
0
 def testIntList(self):
     int_str = '2,3,4'
     int_list = [2, 3, 4]
     self.assertEquals(int_list, conv_raw_val(int_str, []))