Source code for orion.core.utils.format_trials

# -*- coding: utf-8 -*-
"""
Utility functions for formatting data
=====================================

Conversion functions between various data types used in framework's ecosystem.

"""

from orion.core.utils.flatten import flatten
from orion.core.worker.trial import Trial


[docs]def trial_to_tuple(trial, space): """Extract a parameter tuple from a `orion.core.worker.trial.Trial`. The order within the tuple is dictated by the defined `orion.algo.space.Space` object. """ params = flatten(trial.params) trial_keys = set(params.keys()) space_keys = set(space.keys()) if trial_keys != space_keys: raise ValueError( """" The trial {} has wrong params: Trial params: {} Space dims: {}""".format( trial.id, sorted(trial_keys), sorted(space_keys) ) ) return tuple(params[name] for name in space.keys())
[docs]def dict_to_trial(data, space): """Create a `orion.core.worker.trial.Trial` object from `data`, filling only parameter information from `data`. :param data: A dict representing a sample point from `space`. :param space: Definition of problem's domain. :type space: `orion.algo.space.Space` """ data = flatten(data) params = [] for name, dim in space.items(): if name not in data and dim.default_value is dim.NO_DEFAULT_VALUE: raise ValueError( "Dimension {} not specified and does not have a default value.".format( name ) ) value = data.get(name, dim.default_value) if value not in dim: error_msg = "Dimension {} value {} is outside of prior {}".format( name, value, dim.get_prior_string() ) raise ValueError(error_msg) params.append(dict(name=dim.name, type=dim.type, value=value)) assert len(params) == len(space) return Trial(params=params)
[docs]def tuple_to_trial(data, space): """Create a `orion.core.worker.trial.Trial` object from `data`, filling only parameter information from `data`. :param data: A tuple representing a sample point from `space`. :param space: Definition of problem's domain. :type space: `orion.algo.space.Space` """ assert len(data) == len(space) params = [] for i, dim in enumerate(space.values()): params.append(dict(name=dim.name, type=dim.type, value=data[i])) return Trial(params=params)
[docs]def get_trial_results(trial): """Format results from a `orion.core.worker.trial.Trial` using standard structures.""" results = dict() lie = trial.lie objective = trial.objective if lie: results["objective"] = lie.value elif objective: results["objective"] = objective.value else: results["objective"] = None results["constraint"] = [ result.value for result in trial.results if result.type == "constraint" ] grad = trial.gradient results["gradient"] = tuple(grad.value) if grad else None return results
[docs]def standard_param_name(name): """Convert parameter name to namespace format""" return name.lstrip("/").lstrip("-").replace("-", "_")