def test_broadcast_to_one_d(self): # Set up our data buffers src0 = data_descriptor_from_ctypes(ctypes.c_double(12), writable=False) src1_data = (ctypes.c_double * 1)() src1_data[0] = 3 src1 = data_descriptor_from_ctypes(src1_data, writable=False) src2_data = (ctypes.c_double * 3)() src2_list = [5, 3, -2] for i, val in enumerate(src2_list): src2_data[i] = val src2 = data_descriptor_from_ctypes(src2_data, writable=False) dst = data_descriptor_from_ctypes((ctypes.c_double * 3)(), writable=True) # Do assignments with the different permuations of the source arguments execute_expr_single(dst, [src0, src1, src2], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(12 + 1) * 3 + x for x in [5, 3, -2]]) execute_expr_single(dst, [src0, src2, src1], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(12 + 1) * x + 3 for x in [5, 3, -2]]) execute_expr_single(dst, [src1, src0, src2], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(3 + 1) * 12 + x for x in [5, 3, -2]]) execute_expr_single(dst, [src1, src2, src0], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(3 + 1) * x + 12 for x in [5, 3, -2]]) execute_expr_single(dst, [src2, src0, src1], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(x + 1) * 12 + 3 for x in [5, 3, -2]]) execute_expr_single(dst, [src2, src1, src0], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(x + 1) * 3 + 12 for x in [5, 3, -2]])
def test_assign_scalar(self): # Set up our data buffers src = data_descriptor_from_ctypes(ctypes.c_float(1028), writable=False) dst = data_descriptor_from_ctypes(ctypes.c_double(-100), writable=True) # Do the assignment execute_unary_single(dst, src, datashape.float64, datashape.float32, self.sqr) self.assertEqual(dd_as_py(dst), 1028.0*1028.0)
def test_assign_scalar_to_two_d_array(self): # Set up our data buffers src = data_descriptor_from_ctypes(ctypes.c_float(-50), writable=False) dst = data_descriptor_from_ctypes((ctypes.c_double * 3 * 4)(), writable=True) # Do the assignment execute_unary_single(dst, src, datashape.float64, datashape.float32, self.sqr) self.assertEqual(dd_as_py(dst), [[-50.0 * -50] * 3] * 4)
def test_assign_scalar_to_one_d_array(self): # Set up our data buffers src = data_descriptor_from_ctypes(ctypes.c_int64(1028), writable=False) dst = data_descriptor_from_ctypes((ctypes.c_float * 3)(), writable=True) # Do the assignment execute_unary_single(dst, src, datashape.float32, datashape.int64, self.ck) self.assertEqual(dd_as_py(dst), [1028.0] * 3)
def test_assign_one_d_to_two_d_array(self): # Set up our data buffers src_data = (ctypes.c_float * 3)() for i, val in enumerate([3, 6, 9]): src_data[i] = val src = data_descriptor_from_ctypes(src_data, writable=False) dst = data_descriptor_from_ctypes((ctypes.c_double * 3 * 4)(), writable=True) # Do the assignment execute_unary_single(dst, src, datashape.float64, datashape.float32, self.sqr) self.assertEqual(dd_as_py(dst), [[x*x for x in [3.0, 6.0, 9.0]]] * 4)
def test_scalar_to_one_d(self): # Set up our data buffers src0 = data_descriptor_from_ctypes(ctypes.c_double(1028), writable=False) src1 = data_descriptor_from_ctypes(ctypes.c_double(5), writable=False) src2 = data_descriptor_from_ctypes(ctypes.c_double(-123), writable=False) dst = data_descriptor_from_ctypes((ctypes.c_double * 3)(), writable=True) # Do the assignment execute_expr_single(dst, [src0, src1, src2], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [(1028.0 + 1) * 5 - 123] * 3)
def test_assign_broadcast_outer_two_d_to_two_d_array(self): # Set up our data buffers src_data = (ctypes.c_int64 * 3 * 1)() for i, val_i in enumerate([[3,1,7]]): for j, val in enumerate(val_i): src_data[i][j] = val src = data_descriptor_from_ctypes(src_data, writable=False) dst = data_descriptor_from_ctypes((ctypes.c_float * 3 * 4)(), writable=True) # Do the assignment execute_unary_single(dst, src, datashape.float32, datashape.int64, self.ck) self.assertEqual(dd_as_py(dst), [[3,1,7]]*4)
def test_assign_broadcast_inner_two_d_to_two_d_array(self): # Set up our data buffers src_data = (ctypes.c_float * 1 * 4)() src_list = [[3], [1], [7], [12]] for i, val_i in enumerate(src_list): for j, val in enumerate(val_i): src_data[i][j] = val src = data_descriptor_from_ctypes(src_data, writable=False) dst = data_descriptor_from_ctypes((ctypes.c_double * 3 * 4)(), writable=True) # Do the assignment execute_unary_single(dst, src, datashape.float64, datashape.float32, self.sqr) self.assertEqual(dd_as_py(dst), [[x*x for x in y] * 3 for y in src_list])
def test_scalar(self): a = ctypes.c_int(3) dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('int32')) self.assertEqual(dd_as_py(dd), 3) self.assertTrue(isinstance(dd_as_py(dd), int)) a = ctypes.c_float(3.25) dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('float32')) self.assertEqual(dd_as_py(dd), 3.25) self.assertTrue(isinstance(dd_as_py(dd), float))
def test_scalar(self): a = ctypes.c_int(3) dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('int32')) self.assertEqual(ddesc_as_py(dd), 3) self.assertTrue(isinstance(ddesc_as_py(dd), int)) a = ctypes.c_float(3.25) dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('float32')) self.assertEqual(ddesc_as_py(dd), 3.25) self.assertTrue(isinstance(ddesc_as_py(dd), float))
def test_1d_array(self): a = (ctypes.c_short * 32)() for i in range(32): a[i] = 2*i dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * int16')) self.assertEqual(dd_as_py(dd), [2*i for i in range(32)]) a = (ctypes.c_double * 32)() for i in range(32): a[i] = 1.5*i dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * float64')) self.assertEqual(dd_as_py(dd), [1.5*i for i in range(32)])
def test_1d_array(self): a = (ctypes.c_short * 32)() for i in range(32): a[i] = 2 * i dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * int16')) self.assertEqual(ddesc_as_py(dd), [2 * i for i in range(32)]) a = (ctypes.c_double * 32)() for i in range(32): a[i] = 1.5 * i dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * float64')) self.assertEqual(ddesc_as_py(dd), [1.5 * i for i in range(32)])
def test_ctypes_1d_array(self): cdat = (ctypes.c_int64 * 3)() cdat[0] = 3 cdat[1] = 6 cdat[2] = 10 dd = data_descriptor_from_ctypes(cdat, writable=True) a = blaze.array(dd) self.assertEqual(str(a), '[ 3 6 10]')
def test_2d_array(self): a = (ctypes.c_double * 35 * 32)() vals = [[2**i + j for i in range(35)] for j in range(32)] for i in range(32): for j in range(35): a[i][j] = vals[i][j] dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * 35 * float64')) self.assertEqual(ddesc_as_py(dd), vals) a = (ctypes.c_uint8 * 35 * 32)() vals = [[i + j * 2 for i in range(35)] for j in range(32)] for i in range(32): for j in range(35): a[i][j] = vals[i][j] dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * 35 * uint8')) self.assertEqual(ddesc_as_py(dd), vals)
def test_2d_array(self): a = (ctypes.c_double * 35 * 32)() vals = [[2**i + j for i in range(35)] for j in range(32)] for i in range(32): for j in range(35): a[i][j] = vals[i][j] dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * 35 * float64')) self.assertEqual(dd_as_py(dd), vals) a = (ctypes.c_uint8 * 35 * 32)() vals = [[i + j*2 for i in range(35)] for j in range(32)] for i in range(32): for j in range(35): a[i][j] = vals[i][j] dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('32 * 35 * uint8')) self.assertEqual(dd_as_py(dd), vals)
def test_broadcast_to_two_d(self): # Set up our data buffers src0 = data_descriptor_from_ctypes(ctypes.c_double(12), writable=False) src0_broadcast = [[12] * 3] * 2 src1_data = (ctypes.c_double * 3)() src1_list = [3, 9, 1] src1_broadcast = [src1_list] * 2 for i, val in enumerate(src1_list): src1_data[i] = val src1 = data_descriptor_from_ctypes(src1_data, writable=False) src2_data = (ctypes.c_double * 3 * 2)() src2_list = [[5, 3, -2], [-1, 4, 9]] src2_broadcast = src2_list for j, val_j in enumerate(src2_list): for i, val in enumerate(val_j): src2_data[j][i] = val src2 = data_descriptor_from_ctypes(src2_data, writable=False) dst = data_descriptor_from_ctypes((ctypes.c_double * 3 * 2)(), writable=True) # Do assignments with the different permuations of the source arguments execute_expr_single(dst, [src0, src1, src2], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [[(x + 1) * y + z for x, y, z in izip(*tmp)] for tmp in izip(src0_broadcast, src1_broadcast, src2_broadcast)]) execute_expr_single(dst, [src0, src2, src1], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [[(x + 1) * y + z for x, z, y in izip(*tmp)] for tmp in izip(src0_broadcast, src1_broadcast, src2_broadcast)]) execute_expr_single(dst, [src1, src0, src2], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [[(x + 1) * y + z for y, x, z in izip(*tmp)] for tmp in izip(src0_broadcast, src1_broadcast, src2_broadcast)]) execute_expr_single(dst, [src1, src2, src0], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [[(x + 1) * y + z for z, x, y in izip(*tmp)] for tmp in izip(src0_broadcast, src1_broadcast, src2_broadcast)]) execute_expr_single(dst, [src2, src0, src1], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [[(x + 1) * y + z for y, z, x in izip(*tmp)] for tmp in izip(src0_broadcast, src1_broadcast, src2_broadcast)]) execute_expr_single(dst, [src2, src1, src0], datashape.float64, [datashape.float64]*3, self.muladd) self.assertEqual(dd_as_py(dst), [[(x + 1) * y + z for z, y, x in izip(*tmp)] for tmp in izip(src0_broadcast, src1_broadcast, src2_broadcast)])
def test_3d_array(self): # Simple 3D array a = (ctypes.c_uint32 * 10 * 12 * 14)() vals = [[[(i + 2 * j + 3 * k) for i in range(10)] for j in range(12)] for k in range(14)] for i in range(14): for j in range(12): for k in range(10): a[i][j][k] = vals[i][j][k] dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('14 * 12 * 10 * uint32')) self.assertEqual(ddesc_as_py(dd), vals)
def test_3d_array(self): # Simple 3D array a = (ctypes.c_uint32 * 10 * 12 * 14)() vals = [[[(i + 2*j + 3*k) for i in range(10)] for j in range(12)] for k in range(14)] for i in range(14): for j in range(12): for k in range(10): a[i][j][k] = vals[i][j][k] dd = data_descriptor_from_ctypes(a, writable=True) self.assertEqual(dd.dshape, dshape('14 * 12 * 10 * uint32')) self.assertEqual(dd_as_py(dd), vals)
def test_ctypes_scalar(self): dd = data_descriptor_from_ctypes(ctypes.c_int32(1022), writable=True) a = blaze.array(dd) self.assertEqual(str(a), '1022')