Source code for openmdao.util.record_util

""" Utility functions related to recording or execution metadata. """
from six.moves import map, zip


class _ExecutionMetadata(object):
    def __init__(self, name='', coord=None, timestamp=None):
        self.name = name
        self.coord = coord
        self.timestamp = timestamp

    def __getitem__(self, key):
        try:
            return getattr(self, key)
        except AttributeError:
            msg = "KeyError: '{0}'.".format(key)
            raise KeyError(msg)

    def __setitem__(self, key, value):
        if not hasattr(self, key):
            msg = "KeyError: '{0}'.".format(key)
            raise KeyError(msg)
        setattr(self, key, value)


[docs]def create_local_meta(metadata, name): """ Creates the metadata dictionary for this level of execution. Args ---- metadata : dict Dictionary containing the metadata passed from the parent level. name : str String to describe the current level of execution. """ # Create new metadata if parent's isn't available if metadata is None: parent_coordinate = [] else: parent_coordinate = metadata['coord'] # The root group has no name, but we want the iteration coordinate to have one. if len(parent_coordinate) == 2 and name == '': name = 'root' local_meta = _ExecutionMetadata(name, parent_coordinate + [name, (0,)]) return local_meta
[docs]def update_local_meta(local_meta, iteration): """ Updates the local metadata dictionary to prepare for a new iteration. Args ---- local_meta : dict Dictionary containing the execution metadata at the current level. parent : list List containing the parent iteration coordinate. iteration : tuple(int) Tuple of integers representing the current iteration and any sub-iterations. """ # Construct needed structures iter_coord = local_meta['coord'] # Last entry in the iteration coordinate should be the iteration number # for this level. if isinstance(iteration, int): iteration = (iteration,) iter_coord[-1] = iteration
[docs]def format_iteration_coordinate(coord): """ Formats the iteration coordinate to a human-readable string. Args ---- coord : list List containing the iteration coordinate. """ separator = '/' iteration_number_separator = '-' iteration_coordinate = [] for name, local_coord in zip(coord[::2], coord[1::2]): iteration_coordinate.append(name) iter_str = map(str, local_coord) coord_str = iteration_number_separator.join(iter_str) iteration_coordinate.append(coord_str) return separator.join(iteration_coordinate)