def add_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']
        rm_fields = cmd.get('rm_fields', [])
        fnname = cmd.get('fnname', None)

        arr = self.get_session_array(array_name).ddesc.dynd_arr()

        res = nd.add_computed_fields(arr, fields, rm_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': 'add_computed_fields',
                'params': {
                    'fields': fields,
                    'rm_fields': rm_fields,
                    '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 add_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']
        rm_fields = cmd.get('rm_fields', [])
        fnname = cmd.get('fnname', None)

        arr = self.get_session_array(array_name).ddesc.dynd_arr()

        res = nd.add_computed_fields(arr, fields, rm_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': 'add_computed_fields',
                'params': {
                    'fields': fields,
                    'rm_fields': rm_fields,
                    '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)
예제 #3
0
 def test_simple_expr(self):
     a = np.array([(1,), (2,), (3,), (4,), (5,)],
             dtype=[('xyz', np.int32)])
     b = nd.add_computed_fields(a,
             [('twice', np.int32, '2 * xyz'),
              ('onemore', np.int16, 'xyz + 1')])
     self.assertEqual(nd.type_of(b).element_type.type_id, 'unary_expr')
     self.assertEqual(nd.type_of(b).element_type.value_type,
             ndt.type('c{xyz: int32, twice: int32, onemore: int16}'))
     self.assertEqual(nd.as_py(b.xyz), [1, 2, 3, 4, 5])
     self.assertEqual(nd.as_py(b.twice), [2, 4, 6, 8, 10])
     self.assertEqual(nd.as_py(b.onemore), [2, 3, 4, 5, 6])
예제 #4
0
 def test_rm_fields(self):
     a = np.array([(1, 2), (-1, 1), (2, 5)],
             dtype=[('x', np.float32), ('y', np.float32)])
     b = nd.add_computed_fields(a,
             fields=[('sum', np.float32, 'x + y'),
                     ('difference', np.float32, 'x - y'),
                     ('product', np.float32, 'x * y'),
                     ('complex', np.complex64, 'x + 1j*y')],
             rm_fields=['x', 'y'])
     self.assertEqual(nd.type_of(b).element_type.value_type,
             ndt.type('c{sum: float32, difference: float32,' +
                 ' product: float32, complex: complex[float32]}'))
     self.assertEqual(nd.as_py(b.sum), [3, 0, 7]),
     self.assertEqual(nd.as_py(b.difference), [-1, -2, -3])
     self.assertEqual(nd.as_py(b.product), [2, -1, 10])
     self.assertEqual(nd.as_py(b.complex), [1+2j, -1+1j, 2+5j])