Source code for oasislmf.pytools.converters.csvtobin.utils.fm

import numpy as np
from oasislmf.pytools.common.data import oasis_float
from oasislmf.pytools.converters.csvtobin.utils.common import read_csv_as_ndarray
from oasislmf.pytools.converters.data import TOOL_INFO


[docs] def fm_tobin(stack, file_in, file_out, file_type, stream_type, max_sample_index): headers = TOOL_INFO[file_type]["headers"] dtype = TOOL_INFO[file_type]["dtype"] data = read_csv_as_ndarray(stack, file_in, headers, dtype) stream_agg_type = 1 stream_info = (stream_type << 24 | stream_agg_type) # Write stream info byte np.array([stream_info], dtype="i4").tofile(file_out) # Write sample len byte np.array([max_sample_index], dtype="i4").tofile(file_out) curr_event_id = -1 curr_item_id = -1 sidx_losses = [] sidx_loss_dtype = np.dtype([ ("sidx", np.int32), ("loss", oasis_float)] ) for row in data: event_id = row["event_id"] item_id = row["output_id"] sidx = row["sidx"] loss = row["loss"] if (event_id != curr_event_id) or (item_id != curr_item_id): if curr_event_id != -1: sidx_losses.append((0, 0)) np.array([curr_event_id, curr_item_id], dtype=np.int32).tofile(file_out) np.array(sidx_losses, dtype=sidx_loss_dtype).tofile(file_out) curr_event_id = event_id curr_item_id = item_id sidx_losses = [] if sidx <= max_sample_index: sidx_losses.append((sidx, loss)) if curr_event_id != -1: sidx_losses.append((0, 0)) np.array([curr_event_id, curr_item_id], dtype=np.int32).tofile(file_out) np.array(sidx_losses, dtype=sidx_loss_dtype).tofile(file_out)