Example #1
0
    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)