mirror of
https://github.com/clearml/clearml
synced 2025-03-03 18:52:12 +00:00
Add Task.[get/set]_parameters_as_dict() to allow interaction with non-main task parameters (no need to connect())
This commit is contained in:
parent
98e6c2004c
commit
8972c1f005
@ -48,7 +48,7 @@ from .utilities.args import argparser_parseargs_called, get_argparser_last_args,
|
|||||||
argparser_update_currenttask
|
argparser_update_currenttask
|
||||||
from .utilities.dicts import ReadOnlyDict
|
from .utilities.dicts import ReadOnlyDict
|
||||||
from .utilities.proxy_object import ProxyDictPreWrite, ProxyDictPostWrite, flatten_dictionary, \
|
from .utilities.proxy_object import ProxyDictPreWrite, ProxyDictPostWrite, flatten_dictionary, \
|
||||||
nested_from_flat_dictionary
|
nested_from_flat_dictionary, naive_nested_from_flat_dictionary
|
||||||
from .utilities.resource_monitor import ResourceMonitor
|
from .utilities.resource_monitor import ResourceMonitor
|
||||||
from .utilities.seed import make_deterministic
|
from .utilities.seed import make_deterministic
|
||||||
|
|
||||||
@ -878,6 +878,21 @@ class Task(_Task):
|
|||||||
j['variant'], {'last': j['value'], 'min': j['min_value'], 'max': j['max_value']})
|
j['variant'], {'last': j['value'], 'min': j['min_value'], 'max': j['max_value']})
|
||||||
return scalar_metrics
|
return scalar_metrics
|
||||||
|
|
||||||
|
def get_parameters_as_dict(self):
|
||||||
|
"""
|
||||||
|
Get task parameters as a raw nested dict
|
||||||
|
Note that values are not parsed and returned as is (i.e. string)
|
||||||
|
"""
|
||||||
|
return naive_nested_from_flat_dictionary(self.get_parameters())
|
||||||
|
|
||||||
|
def set_parameters_as_dict(self, dictionary):
|
||||||
|
"""
|
||||||
|
Set task parameters from a (possibly nested) dict.
|
||||||
|
While parameters are set just as they would be in connect(dict), this does not link the dict to the task,
|
||||||
|
but rather does a one-time update.
|
||||||
|
"""
|
||||||
|
self._arguments.copy_from_dict(flatten_dictionary(dictionary))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_credentials(cls, api_host=None, web_host=None, files_host=None, key=None, secret=None, host=None):
|
def set_credentials(cls, api_host=None, web_host=None, files_host=None, key=None, secret=None, host=None):
|
||||||
"""
|
"""
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import itertools
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
|
||||||
@ -110,3 +112,28 @@ def nested_from_flat_dictionary(a_dict, flat_dict, prefix=''):
|
|||||||
# leave it as is, we have nothing to do with it.
|
# leave it as is, we have nothing to do with it.
|
||||||
a_dict[k] = flat_dict.get(prefix+k, v)
|
a_dict[k] = flat_dict.get(prefix+k, v)
|
||||||
return a_dict
|
return a_dict
|
||||||
|
|
||||||
|
|
||||||
|
def naive_nested_from_flat_dictionary(flat_dict, sep='/'):
|
||||||
|
""" A naive conversion of a flat dictionary with '/'-separated keys signifying nesting
|
||||||
|
into a nested dictionary.
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
sub_prefix: (
|
||||||
|
bucket[0][1] if (len(bucket) == 1 and sub_prefix == bucket[0][0])
|
||||||
|
else naive_nested_from_flat_dictionary(
|
||||||
|
{
|
||||||
|
k[len(sub_prefix)+1:]: v
|
||||||
|
for k, v in bucket
|
||||||
|
if len(k) > len(sub_prefix)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for sub_prefix, bucket in (
|
||||||
|
(key, list(group))
|
||||||
|
for key, group in itertools.groupby(
|
||||||
|
sorted(flat_dict.items()),
|
||||||
|
key=lambda item: item[0].partition(sep)[0]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user