def test_fixedstring_dtype_properties(self): d = nd.make_fixedstring_dtype('ascii', 10) self.assertEqual(str(d), 'fixedstring<ascii,10>') self.assertEqual(d.element_size, 10) self.assertEqual(d.alignment, 1) self.assertEqual(d.string_encoding, 'ascii') d = nd.make_fixedstring_dtype('ucs_2', 10) self.assertEqual(str(d), 'fixedstring<ucs_2,10>') self.assertEqual(d.element_size, 20) self.assertEqual(d.alignment, 2) self.assertEqual(d.string_encoding, 'ucs_2') d = nd.make_fixedstring_dtype('utf_8', 10) self.assertEqual(str(d), 'fixedstring<utf_8,10>') self.assertEqual(d.element_size, 10) self.assertEqual(d.alignment, 1) self.assertEqual(d.string_encoding, 'utf_8') d = nd.make_fixedstring_dtype('utf_16', 10) self.assertEqual(str(d), 'fixedstring<utf_16,10>') self.assertEqual(d.element_size, 20) self.assertEqual(d.alignment, 2) self.assertEqual(d.string_encoding, 'utf_16') d = nd.make_fixedstring_dtype('utf_32', 10) self.assertEqual(str(d), 'fixedstring<utf_32,10>') self.assertEqual(d.element_size, 40) self.assertEqual(d.alignment, 4) self.assertEqual(d.string_encoding, 'utf_32')
def test_dtype_from_numpy_dtype(self): """Tests converting numpy dtypes to pydynd dtypes""" # native byte order self.assertEqual(nd.bool, nd.dtype(np.dtype(np.bool))) self.assertEqual(nd.int8, nd.dtype(np.dtype(np.int8))) self.assertEqual(nd.int16, nd.dtype(np.dtype(np.int16))) self.assertEqual(nd.int32, nd.dtype(np.dtype(np.int32))) self.assertEqual(nd.int64, nd.dtype(np.dtype(np.int64))) self.assertEqual(nd.uint8, nd.dtype(np.dtype(np.uint8))) self.assertEqual(nd.uint16, nd.dtype(np.dtype(np.uint16))) self.assertEqual(nd.uint32, nd.dtype(np.dtype(np.uint32))) self.assertEqual(nd.uint64, nd.dtype(np.dtype(np.uint64))) self.assertEqual(nd.float32, nd.dtype(np.dtype(np.float32))) self.assertEqual(nd.float64, nd.dtype(np.dtype(np.float64))) self.assertEqual(nd.cfloat32, nd.dtype(np.dtype(np.complex64))) self.assertEqual(nd.cfloat64, nd.dtype(np.dtype(np.complex128))) self.assertEqual(nd.make_fixedstring_dtype('ascii', 10), nd.dtype(np.dtype('S10'))) self.assertEqual(nd.make_fixedstring_dtype('utf_32', 10), nd.dtype(np.dtype('U10'))) # non-native byte order nonnative = self.nonnative self.assertEqual(nd.make_byteswap_dtype(nd.int16), nd.dtype(np.dtype(nonnative + 'i2'))) self.assertEqual(nd.make_byteswap_dtype(nd.int32), nd.dtype(np.dtype(nonnative + 'i4'))) self.assertEqual(nd.make_byteswap_dtype(nd.int64), nd.dtype(np.dtype(nonnative + 'i8'))) self.assertEqual(nd.make_byteswap_dtype(nd.uint16), nd.dtype(np.dtype(nonnative + 'u2'))) self.assertEqual(nd.make_byteswap_dtype(nd.uint32), nd.dtype(np.dtype(nonnative + 'u4'))) self.assertEqual(nd.make_byteswap_dtype(nd.uint64), nd.dtype(np.dtype(nonnative + 'u8'))) self.assertEqual(nd.make_byteswap_dtype(nd.float32), nd.dtype(np.dtype(nonnative + 'f4'))) self.assertEqual(nd.make_byteswap_dtype(nd.float64), nd.dtype(np.dtype(nonnative + 'f8'))) self.assertEqual(nd.make_byteswap_dtype(nd.cfloat32), nd.dtype(np.dtype(nonnative + 'c8'))) self.assertEqual(nd.make_byteswap_dtype(nd.cfloat64), nd.dtype(np.dtype(nonnative + 'c16')))
def test_numpy_dynd_fixedstring_interop(self): """Tests converting fixed-size string arrays to/from numpy""" # ASCII Numpy -> dynd a = np.array(['abc', 'testing', 'array']) b = nd.ndarray(a) self.assertEqual(nd.make_fixedstring_dtype('ascii', 7), b.dtype) self.assertEqual(b.dtype, nd.dtype(a.dtype)) # ASCII dynd -> Numpy c = np.asarray(b) self.assertEqual(a.dtype, c.dtype) assert_array_equal(a, c) # verify 'a' and 'c' are looking at the same data a[1] = 'modify' assert_array_equal(a, c) # ASCII dynd -> UTF32 dynd b_u = b.as_dtype(nd.make_fixedstring_dtype('utf_32', 7)) self.assertEqual( nd.make_convert_dtype( nd.make_fixedstring_dtype('utf_32', 7), nd.make_fixedstring_dtype('ascii', 7)), b_u.dtype) # Evaluate to its value array b_u = b_u.vals() self.assertEqual( nd.make_fixedstring_dtype('utf_32', 7), b_u.dtype) # UTF32 dynd -> Numpy c_u = np.asarray(b_u) self.assertEqual(b_u.dtype, nd.dtype(c_u.dtype)) assert_array_equal(a, c_u) # 'a' and 'c_u' are not looking at the same data a[1] = 'diff' self.assertFalse(np.all(a == c_u))
def test_utf_encodings(self): # Ensure all of the UTF encodings work ok for a basic string x = u'\uc548\ub155 hello' # UTF-8 a = nd.ndarray(x) a = a.as_dtype(nd.make_fixedstring_dtype('utf_8', 16)) a = a.vals() self.assertEqual(a.dtype, nd.make_fixedstring_dtype('utf_8', 16)) self.assertEqual(type(a.as_py()), unicode) self.assertEqual(a.as_py(), x) # UTF-16 a = nd.ndarray(x) a = a.as_dtype(nd.make_fixedstring_dtype('utf_16', 8)) a = a.vals() self.assertEqual(a.dtype, nd.make_fixedstring_dtype('utf_16', 8)) self.assertEqual(type(a.as_py()), unicode) self.assertEqual(a.as_py(), x) # UTF-32 a = nd.ndarray(x) a = a.as_dtype(nd.make_fixedstring_dtype('utf_32', 8)) a = a.vals() self.assertEqual(a.dtype, nd.make_fixedstring_dtype('utf_32', 8)) self.assertEqual(type(a.as_py()), unicode) self.assertEqual(a.as_py(), x)