Source code for bspump.matrix.matrixexportcsvgenerator
import collections
import logging
from ..abc.generator import Generator
from .sessionmatrix import SessionMatrix
from .timewindowmatrix import TimeWindowMatrix
L = logging.getLogger(__name__)
[docs]
class TimeWindowMatrixExportCSVGenerator(Generator):
[docs]
def process(self, context, event):
assert isinstance(event, TimeWindowMatrix)
def generate(time_window_matrix):
for i in range(time_window_matrix.Array.shape[0]):
row_id = time_window_matrix.get_row_name(i)
if row_id is None:
continue
for j in range(0, time_window_matrix.Dimensions[0]):
event = collections.OrderedDict()
event["id"] = row_id
event["timestamp"] = (
time_window_matrix.Start + j * time_window_matrix.Resolution
)
for k in range(0, time_window_matrix.Dimensions[1]):
field_name = "value_{}".format(k)
event[field_name] = time_window_matrix.Array[i, j, k]
yield event
return generate(event)
[docs]
class SessionMatrixExportCSVGenerator(Generator):
[docs]
def process(self, context, event):
assert isinstance(event, SessionMatrix)
def generate(session_matrix):
for i in range(0, session_matrix.Array.shape[0]):
event = collections.OrderedDict()
row_id = session_matrix.get_row_name(i)
if row_id is None:
continue
event["id"] = row_id
for name in session_matrix.Array.dtype.names:
if session_matrix.Array.dtype[name].shape == ():
event[name] = session_matrix.Array[name][i]
else:
for j in range(0, session_matrix.Array.dtype[name].shape[0]):
for k in range(
0, session_matrix.Array.dtype[name].shape[1]
):
field_name = "{}_{}_{}".format(name, j, k)
if session_matrix.Array.dtype[name].subdtype[
0
].kind in ["f", "u", "i", "b"]:
value = "{0:.10f}".format(
session_matrix.Array[name][i, j, k]
)
else:
value = session_matrix.Array[name][i, j, k]
event[field_name] = value
yield event
return generate(event)