diff --git a/clearml/backend_interface/task/args.py b/clearml/backend_interface/task/args.py index c0159c98..7805e24f 100644 --- a/clearml/backend_interface/task/args.py +++ b/clearml/backend_interface/task/args.py @@ -95,7 +95,7 @@ class _Arguments(object): else: args_dict = call_original_argparser(a_parser, args=a_args, namespace=a_namespace).__dict__ defaults_ = { - a.dest: cls.__cast_arg(args_dict.get(a.dest)) for a in actions + a.dest: cls.__cast_arg(args_dict.get(a.dest), a.type) for a in actions } except Exception: # don't crash us if we failed parsing the inputs @@ -539,10 +539,12 @@ class _Arguments(object): return dictionary @classmethod - def __cast_arg(cls, arg): + def __cast_arg(cls, arg, dtype=None): if arg is None or callable(arg): return '' # If this an instance, just store the type if str(hex(id(arg))) in str(arg): return str(type(arg)) + if dtype in (float, int) and isinstance(arg, list): + return [dtype(a) for a in arg] return arg diff --git a/clearml/utilities/args.py b/clearml/utilities/args.py index a90c9b80..a21f2b6b 100644 --- a/clearml/utilities/args.py +++ b/clearml/utilities/args.py @@ -150,10 +150,11 @@ class PatchArgumentParser: if parsed_args_namespace and isinstance(parsed_args_namespace, Namespace): for k, v in parser._parsed_arg_string_lookup.items(): # noqa if hasattr(parsed_args_namespace, k): + if isinstance(getattr(parsed_args_namespace, k, None), list) and not isinstance(v, list): + v = [v] setattr( parsed_args_namespace, k, - str([v] if (isinstance(getattr(parsed_args_namespace, k, None), list) and - not isinstance(v, list)) else v) + v if isinstance(v, list) else str(v) ) PatchArgumentParser._last_parsed_args = (PatchArgumentParser._last_parsed_args or []) + [parsed_args]