From 304caa47e46028d679a8e8136b99706da9cd197c Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Tue, 12 Mar 2024 07:51:46 +0100 Subject: handle floating-point parameter values --- lib/loader/plain.py | 6 +++--- lib/utils.py | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/loader/plain.py b/lib/loader/plain.py index 07a3be5..1818bce 100644 --- a/lib/loader/plain.py +++ b/lib/loader/plain.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from ..utils import soft_cast_int, soft_cast_float +from ..utils import soft_cast_int_or_float, soft_cast_float import os import re @@ -33,7 +33,7 @@ class CSVfile: else: param_values = list( map( - soft_cast_int, + soft_cast_int_or_float, map( lambda iv: iv[1], filter( @@ -82,7 +82,7 @@ class Logfile: return self.kv_to_param(kv_str, soft_cast_float) def kv_to_param_i(self, kv_str): - return self.kv_to_param(kv_str, soft_cast_int) + return self.kv_to_param(kv_str, soft_cast_int_or_float) def load(self, f): observations = list() diff --git a/lib/utils.py b/lib/utils.py index 0cc9a7b..879a53d 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -117,6 +117,20 @@ def soft_cast_float(n): return n +def soft_cast_int_or_float(n): + """ + Convert `n` to int (if integer), float (if numeric), or return it as-is. + + If `n` is empty, returns None. + If `n` is not numeric, it is left unchanged. + """ + if n is None or n == "": + return None + if "." in n: + return soft_cast_float(n) + return soft_cast_int(n) + + def flatten(somelist): """ Flatten a list. @@ -269,7 +283,7 @@ def param_to_ndarray( if i in category_to_scalar and not is_numeric(param): ret_tuple.append(category_to_scalar[i][param]) elif categorical_to_scalar: - ret_tuple.append(soft_cast_int(param)) + ret_tuple.append(soft_cast_int_or_float(param)) else: ret_tuple.append(param) ret_tuples.append(ret_tuple) -- cgit v1.2.3