def startup(self, group): super(SqliteRecorder, self).startup(group) # Need this for use when recording the metadata # Can't do this in the record_metadata method because it only gets # called for rank 0 when running in parallel and so the MPI gather # that is called in that function won't work. All processes # need to participate in that collective call self.model_viewer_data = get_model_viewer_data(group)
def record_metadata(self, group): """Stores the metadata of the given group in a HDF5 file using the variable name for the key. Args ---- group : `System` `System` containing vectors """ params = group.params.iteritems() resids = group.resids.iteritems() unknowns = group.unknowns.iteritems() metadata_group = self.out['metadata'] # The group metadata could be anything so need to pickle it # There are other ways of storing any kind of Python object in HDF5 but this is the simplest system_metadata_val = np.array( pickle.dumps(group.metadata, pickle.HIGHEST_PROTOCOL)) metadata_group.create_dataset('system_metadata', data=system_metadata_val) # Also store the model_viewer_data model_viewer_data = get_model_viewer_data(group) model_viewer_data_val = np.array( pickle.dumps(model_viewer_data, pickle.HIGHEST_PROTOCOL)) metadata_group.create_dataset('model_viewer_data', data=model_viewer_data_val) pairings = ( (metadata_group.create_group("Parameters"), params), (metadata_group.create_group("Unknowns"), unknowns), ) for grp, data in pairings: for key, val in data: meta_group = grp.create_group(key) for mkey, mval in iteritems(val): meta_group.create_dataset(mkey, data=mval)
def record_metadata(self, group): """Stores the metadata of the given group in a HDF5 file using the variable name for the key. Args ---- group : `System` `System` containing vectors """ params = group.params.iteritems() resids = group.resids.iteritems() unknowns = group.unknowns.iteritems() metadata_group = self.out["metadata"] # The group metadata could be anything so need to pickle it # There are other ways of storing any kind of Python object in HDF5 but this is the simplest system_metadata_val = np.array(pickle.dumps(group.metadata, pickle.HIGHEST_PROTOCOL)) metadata_group.create_dataset("system_metadata", data=system_metadata_val) # Also store the model_viewer_data model_viewer_data = get_model_viewer_data(group) model_viewer_data_val = np.array(pickle.dumps(model_viewer_data, pickle.HIGHEST_PROTOCOL)) metadata_group.create_dataset("model_viewer_data", data=model_viewer_data_val) pairings = ( (metadata_group.create_group("Parameters"), params), (metadata_group.create_group("Unknowns"), unknowns), ) for grp, data in pairings: for key, val in data: meta_group = grp.create_group(key) for mkey, mval in iteritems(val): meta_group.create_dataset(mkey, data=mval)