def setUp(self): # Get a kernel from dynd self.ckb = _lowlevel.CKernelBuilder() _lowlevel.make_assignment_ckernel( ndt.float32, None, ndt.int64, None, 'single', self.ckb) self.ck = self.ckb.ckernel(UnarySingleOperation)
def test_assignment_ckernel_strided(self): with _lowlevel.ckernel.CKernelBuilder() as ckb: _lowlevel.make_assignment_ckernel( ckb, 0, ndt.float32, None, ndt.type('string[15,"A"]'), None, 'unary', 'strided') ck = ckb.ckernel(_lowlevel.UnaryStridedOperation) # Do an assignment using a numpy array src = np.array(['3.25', '-1000', '1e5'], dtype='S15') dst = np.arange(3, dtype=np.float32) ck(dst.ctypes.data, 4, src.ctypes.data, 15, 3) self.assertEqual(dst.tolist(), [3.25, -1000, 1e5])
def test_assignment_ckernel_single(self): with _lowlevel.ckernel.CKernelBuilder() as ckb: _lowlevel.make_assignment_ckernel( ckb, 0, ndt.float32, None, ndt.int64, None, "unary", "single") ck = ckb.ckernel(_lowlevel.UnarySingleOperation) # Do an assignment using ctypes i64 = ctypes.c_int64(1234) f32 = ctypes.c_float(1) ck(ctypes.addressof(f32), ctypes.addressof(i64)) self.assertEqual(f32.value, 1234.0)
def test_assignment_ckernel_strided(self): with _lowlevel.ckernel.CKernelBuilder() as ckb: _lowlevel.make_assignment_ckernel( ckb, 0, ndt.float32, None, ndt.type('string[15,"A"]'), None, 'strided') ck = ckb.ckernel(_lowlevel.ExprStridedOperation) # Do an assignment using a numpy array src = np.array(['3.25', '-1000', '1e5'], dtype='S15') src_ptr = ctypes.c_void_p(src.ctypes.data) src_stride = c_ssize_t(15) dst = np.arange(3, dtype=np.float32) ck(dst.ctypes.data, 4, ctypes.pointer(src_ptr), ctypes.pointer(src_stride), 3) self.assertEqual(dst.tolist(), [3.25, -1000, 1e5])
def instantiate_assignment(out_ckb, ckb_offset, types, meta, kerntype, ectx): out_ckb = _lowlevel.CKernelBuilderStruct.from_address(out_ckb) return _lowlevel.make_assignment_ckernel(out_ckb, ckb_offset, types[0], meta[0], types[1], meta[1], 'expr', kerntype, ectx)
def instantiate_assignment(out_ckb, ckb_offset, dst_tp, dst_arrmeta, src_tp, src_arrmeta, kernreq, ectx): out_ckb = _lowlevel.CKernelBuilderStruct.from_address(out_ckb) return _lowlevel.make_assignment_ckernel(out_ckb, ckb_offset, dst_tp, dst_arrmeta, src_tp[0], src_arrmeta[0], kernreq, ectx)