Source code for paws.core.operations.PACKAGING.BATCH.XYDataFromBatch
from collections import OrderedDict
import numpy as np
from ... import Operation as opmod
from ...Operation import Operation
from ... import optools
inputs = OrderedDict(
batch_outputs=None,
x_key=None,
y_key=None,
x_sort_flag=False,
x_shift_flag=False)
outputs = OrderedDict(
x=None,
y=None,
x_y=None)
[docs]class XYDataFromBatch(Operation):
"""
Harvest two arrays from a batch output (a list of dicts).
Takes a batch output, a key for x values, and a key for y values.
"""
def __init__(self):
super(XYDataFromBatch,self).__init__(inputs,outputs)
self.input_doc['batch_outputs'] = 'list of dicts produced by a batch execution'
self.input_doc['x_key'] = 'key for x data from batch_outputs'
self.input_doc['y_key'] = 'key for y data from batch_outputs'
self.input_doc['x_sort_flag'] = 'if True, sort data for increasing x'
self.input_doc['x_shift_flag'] = 'if True, shift x data so that its minimum value is zero'
self.output_doc['x'] = 'array of the x values'
self.output_doc['y'] = 'array of the y values'
self.output_doc['x_y'] = 'n-by-2 array of x and y values'
[docs] def run(self):
b_out = self.inputs['batch_outputs']
kx = self.inputs['x_key']
ky = self.inputs['y_key']
sortflag = self.inputs['x_shift_flag']
shiftflag = self.inputs['x_shift_flag']
x_list = []
y_list = []
for d in b_out:
if kx in d and ky in d:
x_list.append(d[kx])
y_list.append(d[ky])
if shiftflag or sortflag:
x_all = np.array(x_list)
y_all = np.array(y_list)
if shiftflag and len(x_list)>0:
xmin = min(x_list)
x_all = x_all - xmin
x_list = list(x_all)
if sortflag:
i_xsort = np.argsort(x_all)
x_list = list(x_all[i_xsort])
y_list = list(y_all[i_xsort])
self.outputs['x'] = x_list
self.outputs['y'] = y_list
self.outputs['x_y'] = zip(x_list,y_list)