def make_computed_fields(self, json_cmd): print('Adding computed fields') cmd = json.loads(json_cmd) array_url = cmd.get('input', self.base_url + self.array_name) if not array_url.startswith(self.base_url): raise RuntimeError('Input array must start with the base url') array_name = array_url[len(self.base_url):] fields = cmd['fields'] replace_undim = cmd.get('replace_undim', 0) fnname = cmd.get('fnname', None) arr = self.get_session_array(array_name).ddesc.dynd_arr() res = nd.make_computed_fields(arr, replace_undim, fields, fnname) defarr = self.array_provider.create_deferred_array_filename( self.session_name, 'computed_fields_', array(res)) dshape = nd.dshape_of(res) defarr[0].write(json.dumps({ 'dshape': dshape, 'command': 'make_computed_fields', 'params': { 'fields': fields, 'replace_undim': replace_undim, 'fnname': fnname } })) defarr[0].close() content_type = 'application/json; charset=utf-8' body = json.dumps({ 'session': self.base_url + self.session_name, 'output': self.base_url + defarr[1], 'dshape': dshape }) return (content_type, body)
def make_computed_fields(self, json_cmd): print('Adding computed fields') cmd = json.loads(json_cmd) array_url = cmd.get('input', self.base_url + self.array_name) if not array_url.startswith(self.base_url): raise RuntimeError('Input array must start with the base url') array_name = array_url[len(self.base_url):] fields = cmd['fields'] replace_undim = cmd.get('replace_undim', 0) fnname = cmd.get('fnname', None) arr = self.get_session_array(array_name).ddesc.dynd_arr() res = nd.make_computed_fields(arr, replace_undim, fields, fnname) defarr = self.array_provider.create_deferred_array_filename( self.session_name, 'computed_fields_', array(res)) dshape = nd.dshape_of(res) defarr[0].write( json.dumps({ 'dshape': dshape, 'command': 'make_computed_fields', 'params': { 'fields': fields, 'replace_undim': replace_undim, 'fnname': fnname } })) defarr[0].close() content_type = 'application/json; charset=utf-8' body = json.dumps({ 'session': self.base_url + self.session_name, 'output': self.base_url + defarr[1], 'dshape': dshape }) return (content_type, body)
def test_aggregate(self): a = nd.array([ ('A', 1, 2), ('A', 3, 4), ('B', 1.5, 2.5), ('A', 0.5, 9), ('C', 1, 5), ('B', 2, 2)], dtype='c{cat: string, x: float32, y: float32}') gb = nd.groupby(a, nd.fields(a, 'cat')).eval() b = nd.make_computed_fields(gb, 1, fields=[('sum_x', ndt.float32, 'sum(x)'), ('mean_y', ndt.float32, 'mean(y)'), ('max_x', ndt.float32, 'max(x)'), ('max_y', ndt.float32, 'max(y)')]) self.assertEqual(nd.as_py(b.sum_x), [4.5, 3.5, 1]) self.assertEqual(nd.as_py(b.mean_y), [5, 2.25, 5]) self.assertEqual(nd.as_py(b.max_x), [3, 2, 1]) self.assertEqual(nd.as_py(b.max_y), [9, 2.5, 5])