コード例 #1
0
ファイル: test_ctypeslib.py プロジェクト: frank1991430/test
 def test_dtype(self):
     dt = np.intc
     p = ndpointer(dtype=dt)
     assert_(p.from_param(np.array([1], dt)))
     dt = '<i4'
     p = ndpointer(dtype=dt)
     assert_(p.from_param(np.array([1], dt)))
     dt = np.dtype('>i4')
     p = ndpointer(dtype=dt)
     p.from_param(np.array([1], dt))
     assert_raises(TypeError, p.from_param,
                       np.array([1], dt.newbyteorder('swap')))
     dtnames = ['x', 'y']
     dtformats = [np.intc, np.float64]
     dtdescr = {'names': dtnames, 'formats': dtformats}
     dt = np.dtype(dtdescr)
     p = ndpointer(dtype=dt)
     assert_(p.from_param(np.zeros((10,), dt)))
     samedt = np.dtype(dtdescr)
     p = ndpointer(dtype=samedt)
     assert_(p.from_param(np.zeros((10,), dt)))
     dt2 = np.dtype(dtdescr, align=True)
     if dt.itemsize != dt2.itemsize:
         assert_raises(TypeError, p.from_param, np.zeros((10,), dt2))
     else:
         assert_(p.from_param(np.zeros((10,), dt2)))
コード例 #2
0
    def test_get_fieldstructure(self):
        # Test get_fieldstructure

        # No nested fields
        ndtype = np.dtype([('A', '|S3'), ('B', float)])
        test = get_fieldstructure(ndtype)
        assert_equal(test, {'A': [], 'B': []})

        # One 1-nested field
        ndtype = np.dtype([('A', int), ('B', [('BA', float), ('BB', '|S1')])])
        test = get_fieldstructure(ndtype)
        assert_equal(test, {
            'A': [],
            'B': [],
            'BA': [
                'B',
            ],
            'BB': ['B']
        })

        # One 2-nested fields
        ndtype = np.dtype([('A', int),
                           ('B', [('BA', int),
                                  ('BB', [('BBA', int), ('BBB', int)])])])
        test = get_fieldstructure(ndtype)
        control = {
            'A': [],
            'B': [],
            'BA': ['B'],
            'BB': ['B'],
            'BBA': ['B', 'BB'],
            'BBB': ['B', 'BB']
        }
        assert_equal(test, control)
コード例 #3
0
def _guessvartypes(arr):
    """
    Tries to guess the dtypes of the str_ ndarray `arr`.

    Guesses by testing element-wise conversion. Returns a list of dtypes.
    The array is first converted to ndarray. If the array is 2D, the test
    is performed on the first line. An exception is raised if the file is
    3D or more.

    """
    vartypes = []
    arr = np.asarray(arr)
    if arr.ndim == 2:
        arr = arr[0]
    elif arr.ndim > 2:
        raise ValueError("The array should be 2D at most!")
    # Start the conversion loop.
    for f in arr:
        try:
            int(f)
        except (ValueError, TypeError):
            try:
                float(f)
            except (ValueError, TypeError):
                try:
                    complex(f)
                except (ValueError, TypeError):
                    vartypes.append(arr.dtype)
                else:
                    vartypes.append(np.dtype(complex))
            else:
                vartypes.append(np.dtype(float))
        else:
            vartypes.append(np.dtype(int))
    return vartypes
コード例 #4
0
 def test_dtype(self):
     y = logspace(0, 6, dtype='float32')
     assert_equal(y.dtype, dtype('float32'))
     y = logspace(0, 6, dtype='float64')
     assert_equal(y.dtype, dtype('float64'))
     y = logspace(0, 6, dtype='int32')
     assert_equal(y.dtype, dtype('int32'))
コード例 #5
0
ファイル: test_scalarmath.py プロジェクト: frank1991430/test
    def test_seq_repeat(self):
        # Test that basic sequences get repeated when multiplied with
        # numpy integers. And errors are raised when multiplied with others.
        # Some of this behaviour may be controversial and could be open for
        # change.
        accepted_types = set(np.typecodes["AllInteger"])
        deprecated_types = set('?')
        forbidden_types = (set(np.typecodes["All"]) - accepted_types -
                           deprecated_types)
        forbidden_types -= set('V')  # can't default-construct void scalars

        for seq_type in (list, tuple):
            seq = seq_type([1, 2, 3])
            for numpy_type in accepted_types:
                i = np.dtype(numpy_type).type(2)
                assert_equal(seq * i, seq * int(i))
                assert_equal(i * seq, int(i) * seq)

            for numpy_type in deprecated_types:
                i = np.dtype(numpy_type).type()
                assert_equal(
                    assert_warns(DeprecationWarning, operator.mul, seq, i),
                    seq * int(i))
                assert_equal(
                    assert_warns(DeprecationWarning, operator.mul, i, seq),
                    int(i) * seq)

            for numpy_type in forbidden_types:
                i = np.dtype(numpy_type).type()
                assert_raises(TypeError, operator.mul, seq, i)
                assert_raises(TypeError, operator.mul, i, seq)
コード例 #6
0
def addfield(mrecord, newfield, newfieldname=None):
    """Adds a new field to the masked record array

    Uses `newfield` as data and `newfieldname` as name. If `newfieldname`
    is None, the new field name is set to 'fi', where `i` is the number of
    existing fields.

    """
    _data = mrecord._data
    _mask = mrecord._mask
    if newfieldname is None or newfieldname in reserved_fields:
        newfieldname = 'f%i' % len(_data.dtype)
    newfield = ma.array(newfield)
    # Get the new data.
    # Create a new empty recarray
    newdtype = np.dtype(_data.dtype.descr + [(newfieldname, newfield.dtype)])
    newdata = recarray(_data.shape, newdtype)
    # Add the existing field
    [newdata.setfield(_data.getfield(*f), *f)
         for f in _data.dtype.fields.values()]
    # Add the new field
    newdata.setfield(newfield._data, *newdata.dtype.fields[newfieldname])
    newdata = newdata.view(MaskedRecords)
    # Get the new mask
    # Create a new empty recarray
    newmdtype = np.dtype([(n, bool_) for n in newdtype.names])
    newmask = recarray(_data.shape, newmdtype)
    # Add the old masks
    [newmask.setfield(_mask.getfield(*f), *f)
         for f in _mask.dtype.fields.values()]
    # Add the mask of the new field
    newmask.setfield(getmaskarray(newfield),
                     *newmask.dtype.fields[newfieldname])
    newdata._mask = newmask
    return newdata
コード例 #7
0
 def test_has_nested_dtype(self):
     "Test has_nested_dtype"
     ndtype = np.dtype(float)
     assert_equal(has_nested_fields(ndtype), False)
     ndtype = np.dtype([('A', '|S3'), ('B', float)])
     assert_equal(has_nested_fields(ndtype), False)
     ndtype = np.dtype([('A', int), ('B', [('BA', float), ('BB', '|S1')])])
     assert_equal(has_nested_fields(ndtype), True)
コード例 #8
0
    def test_get_names_flat(self):
        # Test get_names_flat
        ndtype = np.dtype([('A', '|S3'), ('B', float)])
        test = get_names_flat(ndtype)
        assert_equal(test, ('A', 'B'))

        ndtype = np.dtype([('a', int), ('b', [('ba', float), ('bb', int)])])
        test = get_names_flat(ndtype)
        assert_equal(test, ('a', 'b', 'ba', 'bb'))
コード例 #9
0
    def test_same_name_different_dtypes_key(self):
        a_dtype = np.dtype([('key', 'S5'), ('value', '<f4')])
        b_dtype = np.dtype([('key', 'S10'), ('value', '<f4')])
        expected_dtype = np.dtype([('key', 'S10'), ('value1', '<f4'),
                                   ('value2', '<f4')])

        a = np.array([('Sarah', 8.0), ('John', 6.0)], dtype=a_dtype)
        b = np.array([('Sarah', 10.0), ('John', 7.0)], dtype=b_dtype)
        res = join_by('key', a, b)

        assert_equal(res.dtype, expected_dtype)
コード例 #10
0
    def test_repack_fields(self):
        dt = np.dtype('u1,f4,i8', align=True)
        a = np.zeros(2, dtype=dt)

        assert_equal(repack_fields(dt), np.dtype('u1,f4,i8'))
        assert_equal(repack_fields(a).itemsize, 13)
        assert_equal(repack_fields(repack_fields(dt), align=True), dt)

        # make sure type is preserved
        dt = np.dtype((np.record, dt))
        assert_(repack_fields(dt).type is np.record)
コード例 #11
0
 def test_keep_default(self):
     "Make sure we don't lose an explicit default"
     converter = StringConverter(None, missing_values='', default=-999)
     converter.upgrade('3.14159265')
     assert_equal(converter.default, -999)
     assert_equal(converter.type, np.dtype(float))
     #
     converter = StringConverter(None, missing_values='', default=0)
     converter.upgrade('3.14159265')
     assert_equal(converter.default, 0)
     assert_equal(converter.type, np.dtype(float))
コード例 #12
0
    def test_dtype(self):
        y = geomspace(1, 1e6, dtype='float32')
        assert_equal(y.dtype, dtype('float32'))
        y = geomspace(1, 1e6, dtype='float64')
        assert_equal(y.dtype, dtype('float64'))
        y = geomspace(1, 1e6, dtype='int32')
        assert_equal(y.dtype, dtype('int32'))

        # Native types
        y = geomspace(1, 1e6, dtype=float)
        assert_equal(y.dtype, dtype('float_'))
        y = geomspace(1, 1e6, dtype=complex)
        assert_equal(y.dtype, dtype('complex'))
コード例 #13
0
    def test_padded_dtype(self):
        dt = np.dtype('i1,f4', align=True)
        dt.names = ('k', 'v')
        assert_(len(dt.descr), 3)  # padding field is inserted

        a = np.array([(1, 3), (3, 2)], dt)
        b = np.array([(1, 1), (2, 2)], dt)
        res = join_by('k', a, b)

        # no padding fields remain
        expected_dtype = np.dtype([('k', 'i1'), ('v1', 'f4'), ('v2', 'f4')])

        assert_equal(res.dtype, expected_dtype)
コード例 #14
0
    def test_subarray_key(self):
        a_dtype = np.dtype([('pos', int, 3), ('f', '<f4')])
        a = np.array([([1, 1, 1], np.pi), ([1, 2, 3], 0.0)], dtype=a_dtype)

        b_dtype = np.dtype([('pos', int, 3), ('g', '<f4')])
        b = np.array([([1, 1, 1], 3), ([3, 2, 1], 0.0)], dtype=b_dtype)

        expected_dtype = np.dtype([('pos', int, 3), ('f', '<f4'),
                                   ('g', '<f4')])
        expected = np.array([([1, 1, 1], np.pi, 3)], dtype=expected_dtype)

        res = join_by('pos', a, b)
        assert_equal(res.dtype, expected_dtype)
        assert_equal(res, expected)
コード例 #15
0
ファイル: test_regression.py プロジェクト: frank1991430/test
    def test_norm_object_array(self):
        # gh-7575
        testvector = np.array([np.array([0, 1]), 0, 0], dtype=object)

        norm = linalg.norm(testvector)
        assert_array_equal(norm, [0, 1])
        assert_(norm.dtype == np.dtype('float64'))

        norm = linalg.norm(testvector, ord=1)
        assert_array_equal(norm, [0, 1])
        assert_(norm.dtype != np.dtype('float64'))

        norm = linalg.norm(testvector, ord=2)
        assert_array_equal(norm, [0, 1])
        assert_(norm.dtype == np.dtype('float64'))

        assert_raises(ValueError, linalg.norm, testvector, ord='fro')
        assert_raises(ValueError, linalg.norm, testvector, ord='nuc')
        assert_raises(ValueError, linalg.norm, testvector, ord=np.inf)
        assert_raises(ValueError, linalg.norm, testvector, ord=-np.inf)
        with warnings.catch_warnings():
            warnings.simplefilter("error", DeprecationWarning)
            assert_raises((AttributeError, DeprecationWarning),
                          linalg.norm,
                          testvector,
                          ord=0)
        assert_raises(ValueError, linalg.norm, testvector, ord=-1)
        assert_raises(ValueError, linalg.norm, testvector, ord=-2)

        testmatrix = np.array([[np.array([0, 1]), 0, 0], [0, 0, 0]],
                              dtype=object)

        norm = linalg.norm(testmatrix)
        assert_array_equal(norm, [0, 1])
        assert_(norm.dtype == np.dtype('float64'))

        norm = linalg.norm(testmatrix, ord='fro')
        assert_array_equal(norm, [0, 1])
        assert_(norm.dtype == np.dtype('float64'))

        assert_raises(TypeError, linalg.norm, testmatrix, ord='nuc')
        assert_raises(ValueError, linalg.norm, testmatrix, ord=np.inf)
        assert_raises(ValueError, linalg.norm, testmatrix, ord=-np.inf)
        assert_raises(ValueError, linalg.norm, testmatrix, ord=0)
        assert_raises(ValueError, linalg.norm, testmatrix, ord=1)
        assert_raises(ValueError, linalg.norm, testmatrix, ord=-1)
        assert_raises(TypeError, linalg.norm, testmatrix, ord=2)
        assert_raises(TypeError, linalg.norm, testmatrix, ord=-2)
        assert_raises(ValueError, linalg.norm, testmatrix, ord=3)
コード例 #16
0
ファイル: test_indexing.py プロジェクト: frank1991430/test
    def test_small_regressions(self):
        # Reference count of intp for index checks
        a = np.array([0])
        if HAS_REFCOUNT:
            refcount = sys.getrefcount(np.dtype(np.intp))
        # item setting always checks indices in separate function:
        a[np.array([0], dtype=np.intp)] = 1
        a[np.array([0], dtype=np.uint8)] = 1
        assert_raises(IndexError, a.__setitem__,
                      np.array([1], dtype=np.intp), 1)
        assert_raises(IndexError, a.__setitem__,
                      np.array([1], dtype=np.uint8), 1)

        if HAS_REFCOUNT:
            assert_equal(sys.getrefcount(np.dtype(np.intp)), refcount)
コード例 #17
0
 def test_scalar_match_array(self):
     for scalar, _ in scalars_and_codes:
         x = scalar()
         a = np.array([], dtype=np.dtype(scalar))
         mv_x = memoryview(x)
         mv_a = memoryview(a)
         assert_equal(mv_x.format, mv_a.format)
コード例 #18
0
 class PdDtype(object):
     name = 'category'
     names = None
     type = PdComplex
     kind = 'c'
     str = '<c16'
     base = np.dtype('complex128')
コード例 #19
0
 def test_dtype_from_dtype(self):
     mat = np.eye(3)
     codes = 'efdgFDG'
     for nf, rf in zip(self.nanfuncs, self.stdfuncs):
         for c in codes:
             with suppress_warnings() as sup:
                 if nf in {np.nanstd, np.nanvar} and c in 'FDG':
                     # Giving the warning is a small bug, see gh-8000
                     sup.filter(np.ComplexWarning)
                 tgt = rf(mat, dtype=np.dtype(c), axis=1).dtype.type
                 res = nf(mat, dtype=np.dtype(c), axis=1).dtype.type
                 assert_(res is tgt)
                 # scalar case
                 tgt = rf(mat, dtype=np.dtype(c), axis=None).dtype.type
                 res = nf(mat, dtype=np.dtype(c), axis=None).dtype.type
                 assert_(res is tgt)
コード例 #20
0
    def test_datetime_memoryview(self):
        # gh-11656
        # Values verified with v1.13.3, shape is not () as in test_scalar_dim
        def as_dict(m):
            return dict(strides=m.strides,
                        shape=m.shape,
                        itemsize=m.itemsize,
                        ndim=m.ndim,
                        format=m.format)

        dt1 = np.datetime64('2016-01-01')
        dt2 = np.datetime64('2017-01-01')
        expected = {
            'strides': (1, ),
            'itemsize': 1,
            'ndim': 1,
            'shape': (8, ),
            'format': 'B'
        }
        v = memoryview(dt1)
        res = as_dict(v)
        assert_equal(res, expected)

        v = memoryview(dt2 - dt1)
        res = as_dict(v)
        assert_equal(res, expected)

        dt = np.dtype([('a', 'uint16'), ('b', 'M8[s]')])
        a = np.empty(1, dt)
        # Fails to create a PEP 3118 valid buffer
        assert_raises((ValueError, BufferError), memoryview, a[0])
コード例 #21
0
def _checknames(descr, names=None):
    """
    Checks that field names ``descr`` are not reserved keywords.

    If this is the case, a default 'f%i' is substituted.  If the argument
    `names` is not None, updates the field names to valid names.

    """
    ndescr = len(descr)
    default_names = ['f%i' % i for i in range(ndescr)]
    if names is None:
        new_names = default_names
    else:
        if isinstance(names, (tuple, list)):
            new_names = names
        elif isinstance(names, str):
            new_names = names.split(',')
        else:
            raise NameError("illegal input names %s" % repr(names))
        nnames = len(new_names)
        if nnames < ndescr:
            new_names += default_names[nnames:]
    ndescr = []
    for (n, d, t) in zip(new_names, default_names, descr.descr):
        if n in reserved_fields:
            if t[0] in reserved_fields:
                ndescr.append((d, t[1]))
            else:
                ndescr.append(t)
        else:
            ndescr.append((n, t[1]))
    return np.dtype(ndescr)
コード例 #22
0
ファイル: test_indexing.py プロジェクト: frank1991430/test
 def setup(self):
     self.a = np.arange(np.prod([3, 1, 5, 6])).reshape(3, 1, 5, 6)
     self.b = np.empty((3, 0, 5, 6))
     self.complex_indices = ['skip', Ellipsis,
         0,
         # Boolean indices, up to 3-d for some special cases of eating up
         # dimensions, also need to test all False
         np.array([True, False, False]),
         np.array([[True, False], [False, True]]),
         np.array([[[False, False], [False, False]]]),
         # Some slices:
         slice(-5, 5, 2),
         slice(1, 1, 100),
         slice(4, -1, -2),
         slice(None, None, -3),
         # Some Fancy indexes:
         np.empty((0, 1, 1), dtype=np.intp),  # empty and can be broadcast
         np.array([0, 1, -2]),
         np.array([[2], [0], [1]]),
         np.array([[0, -1], [0, 1]], dtype=np.dtype('intp').newbyteorder()),
         np.array([2, -1], dtype=np.int8),
         np.zeros([1]*31, dtype=int),  # trigger too large array.
         np.array([0., 1.])]  # invalid datatype
     # Some simpler indices that still cover a bit more
     self.simple_indices = [Ellipsis, None, -1, [1], np.array([True]),
                            'skip']
     # Very simple ones to fill the rest:
     self.fill_indices = [slice(None, None), 0]
コード例 #23
0
    def test_keywords(self):
        x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)])
        # We must be specific about the endianness here:
        y = x.view(dtype='<i2', type=np.matrix)
        assert_array_equal(y, [[513]])

        assert_(isinstance(y, np.matrix))
        assert_equal(y.dtype, np.dtype('<i2'))
コード例 #24
0
 def test_scalar_dim(self):
     for scalar, _ in scalars_and_codes:
         x = scalar()
         mv_x = memoryview(x)
         assert_equal(mv_x.itemsize, np.dtype(scalar).itemsize)
         assert_equal(mv_x.ndim, 0)
         assert_equal(mv_x.shape, ())
         assert_equal(mv_x.strides, ())
         assert_equal(mv_x.suboffsets, ())
コード例 #25
0
 def test_in1d_both_arrays_have_structured_dtype(self):
     # Test arrays of a structured data type containing an integer field
     # and a field of dtype `object` allowing for arbitrary Python objects
     dt = np.dtype([('field1', int), ('field2', object)])
     ar1 = np.array([(1, None)], dtype=dt)
     ar2 = np.array([(1, None)] * 10, dtype=dt)
     expected = np.array([True])
     result = np.in1d(ar1, ar2)
     assert_array_equal(result, expected)
コード例 #26
0
 def test_view_flexible_type(self):
     (mrec, a, b, arr) = self.data
     alttype = [('A', float), ('B', float)]
     test = mrec.view(alttype)
     assert_(isinstance(test, MaskedRecords))
     assert_equal_records(test, arr.view(alttype))
     assert_(test['B'][3] is masked)
     assert_equal(test.dtype, np.dtype(alttype))
     assert_(test._fill_value is None)
コード例 #27
0
def test_as_strided():
    a = np.array([None])
    a_view = as_strided(a)
    expected = np.array([None])
    assert_array_equal(a_view, np.array([None]))

    a = np.array([1, 2, 3, 4])
    a_view = as_strided(a, shape=(2, ), strides=(2 * a.itemsize, ))
    expected = np.array([1, 3])
    assert_array_equal(a_view, expected)

    a = np.array([1, 2, 3, 4])
    a_view = as_strided(a, shape=(3, 4), strides=(0, 1 * a.itemsize))
    expected = np.array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]])
    assert_array_equal(a_view, expected)

    # Regression test for gh-5081
    dt = np.dtype([('num', 'i4'), ('obj', 'O')])
    a = np.empty((4, ), dtype=dt)
    a['num'] = np.arange(1, 5)
    a_view = as_strided(a, shape=(3, 4), strides=(0, a.itemsize))
    expected_num = [[1, 2, 3, 4]] * 3
    expected_obj = [[None] * 4] * 3
    assert_equal(a_view.dtype, dt)
    assert_array_equal(expected_num, a_view['num'])
    assert_array_equal(expected_obj, a_view['obj'])

    # Make sure that void types without fields are kept unchanged
    a = np.empty((4, ), dtype='V4')
    a_view = as_strided(a, shape=(3, 4), strides=(0, a.itemsize))
    assert_equal(a.dtype, a_view.dtype)

    # Make sure that the only type that could fail is properly handled
    dt = np.dtype({'names': [''], 'formats': ['V4']})
    a = np.empty((4, ), dtype=dt)
    a_view = as_strided(a, shape=(3, 4), strides=(0, a.itemsize))
    assert_equal(a.dtype, a_view.dtype)

    # Custom dtypes should not be lost (gh-9161)
    r = [rational(i) for i in range(4)]
    a = np.array(r, dtype=rational)
    a_view = as_strided(a, shape=(3, 4), strides=(0, a.itemsize))
    assert_equal(a.dtype, a_view.dtype)
    assert_array_equal([r] * 3, a_view)
コード例 #28
0
ファイル: format.py プロジェクト: frank1991430/test
def _read_array_header(fp, version):
    """
    see read_array_header_1_0
    """
    # Read an unsigned, little-endian short int which has the length of the
    # header.
    import struct
    if version == (1, 0):
        hlength_type = '<H'
    elif version == (2, 0):
        hlength_type = '<I'
    else:
        raise ValueError("Invalid version %r" % version)

    hlength_str = _read_bytes(fp, struct.calcsize(hlength_type),
                              "array header length")
    header_length = struct.unpack(hlength_type, hlength_str)[0]
    header = _read_bytes(fp, header_length, "array header")

    # The header is a pretty-printed string representation of a literal
    # Python dictionary with trailing newlines padded to a ARRAY_ALIGN byte
    # boundary. The keys are strings.
    #   "shape" : tuple of int
    #   "fortran_order" : bool
    #   "descr" : dtype.descr
    header = _filter_header(header)
    try:
        d = safe_eval(header)
    except SyntaxError as e:
        msg = "Cannot parse header: %r\nException: %r"
        raise ValueError(msg % (header, e))
    if not isinstance(d, dict):
        msg = "Header is not a dictionary: %r"
        raise ValueError(msg % d)
    keys = sorted(d.keys())
    if keys != ['descr', 'fortran_order', 'shape']:
        msg = "Header does not contain the correct keys: %r"
        raise ValueError(msg % (keys, ))

    # Sanity-check the values.
    if (not isinstance(d['shape'], tuple)
            or not numpy1.all([isinstance(x, (int, long))
                               for x in d['shape']])):
        msg = "shape is not valid: %r"
        raise ValueError(msg % (d['shape'], ))
    if not isinstance(d['fortran_order'], bool):
        msg = "fortran_order is not a valid bool: %r"
        raise ValueError(msg % (d['fortran_order'], ))
    try:
        dtype = numpy1.dtype(d['descr'])
    except TypeError as e:
        msg = "descr is not a valid dtype descriptor: %r"
        raise ValueError(msg % (d['descr'], ))

    return d['shape'], d['fortran_order'], dtype
コード例 #29
0
class GenericObject(object):
    def __init__(self, v):
        self.v = v

    def __add__(self, other):
        return self

    def __radd__(self, other):
        return self

    dtype = np.dtype('O')
コード例 #30
0
    def test_void_scalar_structured_data(self):
        dt = np.dtype([('name', np.unicode_, 16),
                       ('grades', np.float64, (2, ))])
        x = np.array(('ndarray_scalar', (1.2, 3.0)), dtype=dt)[()]
        assert_(isinstance(x, np.void))
        mv_x = memoryview(x)
        expected_size = 16 * np.dtype((np.unicode_, 1)).itemsize
        expected_size += 2 * np.dtype((np.float64, 1)).itemsize
        assert_equal(mv_x.itemsize, expected_size)
        assert_equal(mv_x.ndim, 0)
        assert_equal(mv_x.shape, ())
        assert_equal(mv_x.strides, ())
        assert_equal(mv_x.suboffsets, ())

        # check scalar format string against ndarray format string
        a = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)
        assert_(isinstance(a, np.ndarray))
        mv_a = memoryview(a)
        assert_equal(mv_x.itemsize, mv_a.itemsize)
        assert_equal(mv_x.format, mv_a.format)