Source code for openmdao.util.record_util
""" Utility functions related to recording or execution metadata. """
from six.moves import map, zip
from openmdao.core.mpi_wrap import MPI
[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.
"""
if MPI:
rank = MPI.COMM_WORLD.rank
else:
rank = 0
# Create new metadata if parent's isn't available
if metadata is None:
parent_coordinate = [rank]
else:
parent_coordinate = metadata['coord']
# The root group has no name, but we want the iteration coordinate to have one.
if len(parent_coordinate) == 3 and name == '':
name = 'root'
local_meta = {
'name': name,
'coord': parent_coordinate + [name, (0,)],
'timestamp': None,
}
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[1::2], coord[2::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 ':'.join(["rank%d"%coord[0], separator.join(iteration_coordinate)])