3
Kd                 @   sd  d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	Z
ddlmZmZmZmZmZ ddlmZ dadd Zdd	 Ze
je
je
je
je
je
je
je
je
je
je
j e
j!e"gZ#g Z$xe#D ]Z%x~d
D ]vZ&e
j'e%j(e&Z'e
j)dj*e'Z+e$j,e
j-g e'de
j-de'de+e+j.de+j.dj/e+j.dddddddf g qW qW dddgZ0ddgddgddggdfddgddgddggdfgZ1dd ddd$ddddgfddgfdd-ddgfddgZ2ddgd1dd2d1d3gddgddgfd4d5fd6dddgddggdfddgd7dd8d7d9gddgddgfd:d;fd<dddgddggdfgZ3e
j-e1e
j'e0j(d=de
j-e3e
j'e2j(d=de
j-e1e
j'e0j(d>de
j-e3e
j'e2j(d>de
j4ddgdgZ5G dBdC dCeZ6dDdE Z7dFdG Z8dHdI Z9dJdK Z:dLdM Z;dNdO Z<dPdQ Z=dRdS Z>ej?j@dTdU ZAdVdW ZBe
j'dXd5dYZCe
j'dZd[gddgdd\gd]ZDe
j'd?d^gdeDgd_ZEe
j'dZd`d[gdgd d_ZFe
j'dZd[gddgdd\gdadbgdcZGe
j'g g dddZHej?jIdeeCeDeEeFeGeHgdfdg ZJdhdi ZKdjdk ZLdldm ZMej?jIdee
j'e
j'dZe
jfd[e
jfd?e
jfgd5dYdɃe
j'de
j'dZd[gdndngddgddodʃdfge
j'dge
j'de
j'e
j'e
j'dZd[gdndngddgddodfdffge
j'dZe
j'e
j'e
j'e
j'dZeNfd[e
j'dZd[gdndngddgddofgdfdfdffggdpdq ZOdrds ZPej?j@dtdu ZQdvdw ZRdxdydzd{d|d}gZSd~ddddddgZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]ej?j^e
j'e
j_j`dk ddej?j@dd Zadd Zbdd Zcej?jIde
j'dZd[gede
j'dddidgd_d5fe
j'eNddidd;fe
j'deNdffgddidd;fe
j'dZd[gede
j'd?ge
j'eNi dgd_gd_d;fgdd ZedS )aD   Test the .npy file format.

Set up:

    >>> import sys
    >>> from io import BytesIO
    >>> from numpy.lib import format
    >>>
    >>> scalars = [
    ...     np.uint8,
    ...     np.int8,
    ...     np.uint16,
    ...     np.int16,
    ...     np.uint32,
    ...     np.int32,
    ...     np.uint64,
    ...     np.int64,
    ...     np.float32,
    ...     np.float64,
    ...     np.complex64,
    ...     np.complex128,
    ...     object,
    ... ]
    >>>
    >>> basic_arrays = []
    >>>
    >>> for scalar in scalars:
    ...     for endian in '<>':
    ...         dtype = np.dtype(scalar).newbyteorder(endian)
    ...         basic = np.arange(15).astype(dtype)
    ...         basic_arrays.extend([
    ...             np.array([], dtype=dtype),
    ...             np.array(10, dtype=dtype),
    ...             basic,
    ...             basic.reshape((3,5)),
    ...             basic.reshape((3,5)).T,
    ...             basic.reshape((3,5))[::-1,::2],
    ...         ])
    ...
    >>>
    >>> Pdescr = [
    ...     ('x', 'i4', (2,)),
    ...     ('y', 'f8', (2, 2)),
    ...     ('z', 'u1')]
    >>>
    >>>
    >>> PbufferT = [
    ...     ([3,2], [[6.,4.],[6.,4.]], 8),
    ...     ([4,3], [[7.,5.],[7.,5.]], 9),
    ...     ]
    >>>
    >>>
    >>> Ndescr = [
    ...     ('x', 'i4', (2,)),
    ...     ('Info', [
    ...         ('value', 'c16'),
    ...         ('y2', 'f8'),
    ...         ('Info2', [
    ...             ('name', 'S2'),
    ...             ('value', 'c16', (2,)),
    ...             ('y3', 'f8', (2,)),
    ...             ('z3', 'u4', (2,))]),
    ...         ('name', 'S2'),
    ...         ('z2', 'b1')]),
    ...     ('color', 'S2'),
    ...     ('info', [
    ...         ('Name', 'U8'),
    ...         ('Value', 'c16')]),
    ...     ('y', 'f8', (2, 2)),
    ...     ('z', 'u1')]
    >>>
    >>>
    >>> NbufferT = [
    ...     ([3,2], (6j, 6., ('nn', [6j,4j], [6.,4.], [1,2]), 'NN', True), 'cc', ('NN', 6j), [[6.,4.],[6.,4.]], 8),
    ...     ([4,3], (7j, 7., ('oo', [7j,5j], [7.,5.], [2,1]), 'OO', False), 'dd', ('OO', 7j), [[7.,5.],[7.,5.]], 9),
    ...     ]
    >>>
    >>>
    >>> record_arrays = [
    ...     np.array(PbufferT, dtype=np.dtype(Pdescr).newbyteorder('<')),
    ...     np.array(NbufferT, dtype=np.dtype(Ndescr).newbyteorder('<')),
    ...     np.array(PbufferT, dtype=np.dtype(Pdescr).newbyteorder('>')),
    ...     np.array(NbufferT, dtype=np.dtype(Ndescr).newbyteorder('>')),
    ... ]

Test the magic string writing.

    >>> format.magic(1, 0)
    '\x93NUMPY\x01\x00'
    >>> format.magic(0, 0)
    '\x93NUMPY\x00\x00'
    >>> format.magic(255, 255)
    '\x93NUMPY\xff\xff'
    >>> format.magic(2, 5)
    '\x93NUMPY\x02\x05'

Test the magic string reading.

    >>> format.read_magic(BytesIO(format.magic(1, 0)))
    (1, 0)
    >>> format.read_magic(BytesIO(format.magic(0, 0)))
    (0, 0)
    >>> format.read_magic(BytesIO(format.magic(255, 255)))
    (255, 255)
    >>> format.read_magic(BytesIO(format.magic(2, 5)))
    (2, 5)

Test the header writing.

    >>> for arr in basic_arrays + record_arrays:
    ...     f = BytesIO()
    ...     format.write_array_header_1_0(f, arr)   # XXX: arr is not a dict, items gets called on it
    ...     print(repr(f.getvalue()))
    ...
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|u1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|u1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<u2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>u2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<i2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>i2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<u4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>u4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<i4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>i4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<u8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>u8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<i8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>i8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<f4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>f4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<f8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>f8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<c8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>c8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (0,)}             \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': ()}               \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (15,)}            \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (3, 5)}           \n"
    "F\x00{'descr': '<c16', 'fortran_order': True, 'shape': (5, 3)}            \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (3, 3)}           \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (0,)}             \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': ()}               \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (15,)}            \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (3, 5)}           \n"
    "F\x00{'descr': '>c16', 'fortran_order': True, 'shape': (5, 3)}            \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (3, 3)}           \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': 'O', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': 'O', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "v\x00{'descr': [('x', '<i4', (2,)), ('y', '<f8', (2, 2)), ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}         \n"
    "\x16\x02{'descr': [('x', '<i4', (2,)),\n           ('Info',\n            [('value', '<c16'),\n             ('y2', '<f8'),\n             ('Info2',\n              [('name', '|S2'),\n               ('value', '<c16', (2,)),\n               ('y3', '<f8', (2,)),\n               ('z3', '<u4', (2,))]),\n             ('name', '|S2'),\n             ('z2', '|b1')]),\n           ('color', '|S2'),\n           ('info', [('Name', '<U8'), ('Value', '<c16')]),\n           ('y', '<f8', (2, 2)),\n           ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}      \n"
    "v\x00{'descr': [('x', '>i4', (2,)), ('y', '>f8', (2, 2)), ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}         \n"
    "\x16\x02{'descr': [('x', '>i4', (2,)),\n           ('Info',\n            [('value', '>c16'),\n             ('y2', '>f8'),\n             ('Info2',\n              [('name', '|S2'),\n               ('value', '>c16', (2,)),\n               ('y3', '>f8', (2,)),\n               ('z3', '>u4', (2,))]),\n             ('name', '|S2'),\n             ('z2', '|b1')]),\n           ('color', '|S2'),\n           ('info', [('Name', '>U8'), ('Value', '>c16')]),\n           ('y', '>f8', (2, 2)),\n           ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}      \n"
    N)BytesIO)assert_assert_array_equalassert_raisesassert_raises_regexassert_warns)formatc               C   s   t j ad S )N)tempfilemkdtemptempdir r   r   O/var/www/html/virt/lib64/python3.6/site-packages/numpy/lib/tests/test_format.pysetup_module*  s    r   c               C   s&   t d k	r"tjjt r"tjt  d a d S )N)r   ospathisdirshutilrmtreer   r   r   r   teardown_module/  s    
r   z<>i  )dtype
      2         xi4yf8zu1   g      @g      @      g      @g      @	   ZInfovaluec16y2ZInfo2nameS2y3z3u4z2b1colorinfoNameU8Value              @nny              @NNTcc              @Zooy              @OOFdd<>c<f8   c                   s   e Zd Zd fdd	Z  ZS )BytesIOSRandomSizeNc                s$   dd l }|jd|}tt| j|S )Nr   r   )randomrandintsuperr@   read)selfsizerA   )	__class__r   r   rD     s    zBytesIOSRandomSize.read)N)__name__
__module____qualname__rD   __classcell__r   r   )rG   r   r@     s   r@   c             C   s0   t  }tj||  t |j }tj|dd}|S )NT)allow_pickle)r   r   write_arraygetvalue
read_array)arrff2arr2r   r   r   	roundtrip  s
    rT   c             C   s,   t  }tj||  t|j }tj|}|S )N)r   r   rM   r@   rN   rO   )rP   rQ   rR   rS   r   r   r   roundtrip_randsize  s
    
rU   c             C   s4   t  }tj||  t |j dd }tj|}|S )Nr   r   )r   r   rM   rN   rO   )rP   rQ   rR   rS   r   r   r   roundtrip_truncated  s
    
rW   c             C   s   t | |k d S )N)r   )Zo1Zo2r   r   r   assert_equal_  s    rX   c              C   s(   x"t t D ]} t| }t| | q
W d S )N)basic_arraysrecord_arraysrT   r   )rP   rS   r   r   r   test_roundtrip  s    r[   c              C   s2   x,t t D ] } | jtkr
t| }t| | q
W d S )N)rY   rZ   r   objectrU   r   )rP   rS   r   r   r   test_roundtrip_randsize  s    
r]   c              C   s(   x"t D ]} | jtkrttt|  qW d S )N)rY   r   r\   r   
ValueErrorrW   )rP   r   r   r   test_roundtrip_truncated  s    

r_   c              C   s4   t jdt jttjd fd} t| }t| | d S )Nr   )r   )nponesr   strr   BUFFER_SIZErT   r   )Zlong_str_arrZlong_str_arr2r   r   r   test_long_str  s    rd   c              C   s   t jdkpt jdksxtt D ]} | jjr,qtjjt	d}tjjt	d}t
|d}ztj||  W d |j  X | jjo~| jj }tj|d| j| j|d}| |d< ~t
|d	}|j }|j  t
|d	}|j }|j  t|| tj|d
d}~qW d S )Nwin32cygwinz
normal.npyz
memmap.npywbzw+)moder   shapefortran_order.rbr)rh   )sysplatformrY   rZ   r   Z	hasobjectr   r   joinr   openr   rM   closeflagsf_contiguousc_contiguousopen_memmapri   rD   rX   )rP   ZnfnZmfnfprj   maZnormal_bytesZmemmap_bytesr   r   r   test_memmap_roundtrip  s0    




rx   c              C   sF   t jjdd} tjjtd}t j|| d t j|d }t	| | d S )N   zcompressed.npz)rP   rP   )
r`   rA   Zrandr   r   ro   r   Zsavez_compressedloadr   )rP   npz_filearr1r   r   r   test_compressed_roundtrip  s
    r}   z
i1, i4, i1)Zalignab   )namesformatsoffsetsd)r   r    ZaaZbb)r   r   r   titles)r   r   itemsizedtc             C   sb   t jd| }xtdD ]}|d ||< qW tjjtd}t j||d t j|d }t	|| d S )Nr!   r?   zaligned.npz)rP   rP   )
r`   zerosranger   r   ro   r   savezrz   r   )r   rP   ir{   r|   r   r   r   test_load_padded_dtype  s    r   c              C   s:   d} t jjt jjtd| }tj|}t|tjd d S )Nzwin64python2.npydatar   )	r   r   ro   dirname__file__r`   rz   r   ra   )fnamer   r   r   r   r   %test_python2_python3_interoperability(  s    
r   c           	   C   s  t jjt jjtd} tjd tddgtd}xZdD ]P}t jj| |}xdD ]}tj	|d|d}|j
dr~|d }|j  n|}|d
kr|jdrtt|d t t|d d |d d  t|d j||d  qNtt|d t t|| qNW |jdr4|j
dr^tj	|dd}tt|jd |j  tj	|ddd
d}tt|jd |j  q4tttj	|dd tttj	|ddd
d q4W d S )Nr   u   優良s   不良)r   py2-objarr.npypy2-objarr.npzpy3-objarr.npypy3-objarr.npzbyteslatin1T)rL   encodingz.npzr   Zpy2r!   r   )rL   F)rL   fix_importsr   )r   r   r   r   )r   r   rV   rV   rV   rV   )r   r   ro   r   r   r`   arrayr   r\   rz   endswithrq   
startswithr   
isinstancerb   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r   r   Zdata_fr   r   r   r   test_pickle_python2_python3.  sB    









r   c              C   s   t jjt jjtd} t jj| d}tttj|ddd t jj| d}tj|ddd}tt|j	d t jjt
d}tttj|tjd gtd	dd
 d S )Nr   zpy2-objarr.npyFr   )rL   r   zpy2-objarr.npzr   zpickle-disabled.npy)r   )rL   )r   r   ro   r   r   r   r^   r`   rz   r   r   saver   r\   )r   r   rQ   r   r   r   test_pickle_disallow]  s    

r   i1)r   r   r   r   c             C   s8   t j| j}t||  tjd| }t|}t|| d S )Nr!   )r   Zdescr_to_dtypedescrrX   r`   r   rT   r   )r   dt1r|   rS   r   r   r   test_descr_to_dtypel  s
    2
r   c              C   s   t  } dd tdD }tjd|d}tj| |dd tjd	d
2}tjddt	 tj| | t
|d jt	k W d Q R X | jd | j }t
t|tj dk | jd tj| }t|| tttj| |d d S )Nc             S   s   g | ]}d | d t fqS )z%dd   )float).0r   r   r   r   
<listcomp>  s    z$test_version_2_0.<locals>.<listcomp>i  i  )r   r   r   )versionT)recordalwaysr   r   )r   r   )r   r   )r   r   r`   ra   r   rM   warningscatch_warningsfilterwarningsUserWarningr   categoryseekreadlinelenARRAY_ALIGNrO   r   r   r^   )rQ   r   r   wheadernr   r   r   test_version_2_0  s    



r   c              C   s   dd t dD } tjd| d}tjddtd}tttj	|d	|j
|jdd tj	|d	|j
|jdd}||d< ~tjddH}tjddt tj	|d	|j
|jd d}t|d jtk ||d< ~W d Q R X tj	|dd}t|| d S )Nc             S   s   g | ]}d | d t fqS )z%dr   )r   )r   r   r   r   r   r     s    z+test_version_2_0_memmap.<locals>.<listcomp>i  i  )r   r   Zmmap)dirzw+r   r   )rh   r   ri   r   r   .T)r   r   rl   )rh   )r   r   )r   r   )r   r`   ra   r	   mktempr   r   r^   r   ru   r   ri   r   r   r   r   r   r   r   )r   r   tfrw   r   r   r   r   test_version_2_0_memmap  s$    r   c              C   s   t  } tjd}tj| |dd tj| | tj| |d d tj| | tj| |dd tj| | d	d
dddg}x2|D ]*}ttd tj| ||d W d Q R X qxW d S )Nr   r   )r   r      z we only support format version.*)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r`   aranger   rM   r   r^   )rQ   rP   Zbad_versionsr   r   r   r   test_write_version  s"    

r   s   NUMPYs   NUMPY  s   NUMPY s   NUMPY s   NUMPYs   NUMPYs   NUMPY s    NUMPY s   numpy s   MATLB s   NUMPYs   NUMPY    c              C   s   t  } t  }tjdtd}tj| |d	d tj||d
d | jd |jd tj| }tj|}t|dk t|dk t| j	 tj
k t|j	 tj
k d S )Nr!   r   )r   r   r   )r   r   )r!   r   )r   r   )r   r   )r   r   )r   r   )r   r`   ra   r   r   rM   r   Z
read_magicr   tell	MAGIC_LEN)s1s2rP   Zversion1Zversion2r   r   r   test_read_magic  s    



r   c              C   s(   x"t D ]} t| }tttj| qW d S )N)malformed_magicr   r   r^   r   rO   )magicrQ   r   r   r   test_read_magic_bad_magic  s    
r   c              C   s,   x&t t D ]} t| }tttj| q
W d S )N)bad_version_magicr   r   r   r^   r   rO   )r   rQ   r   r   r   test_read_version_1_0_bad_magic!  s    r   c               C   sD   t ttjdd t ttjdd t ttjdd t ttjdd d S )Nr      rV   rV   )r   r^   r   r   r   r   r   r   test_bad_magic_args'  s    r   c              C   sJ   t  } ddd}tj| | t  } dddd d d}tttj| | d S )Nr   r   )r~   r   r   r   )r~   r   r=   )r   r   write_array_header_1_0r   r^   )sr   r   r   r   test_large_header.  s    
r   c              C   sr   t  } tjdtd}tj| |d	d | jtj tj| \}}}t	| j
 tj dk t	|||fd
dtfk d S )Nr!   r   )r   r   r   )r   F)r!   r   )r   r   )r!   r   )r   r`   ra   r   r   rM   r   r   read_array_header_1_0r   r   r   )r   rP   ri   fortranr   r   r   r   test_read_array_header_1_08  s    r   c              C   sr   t  } tjdtd}tj| |d	d | jtj tj| \}}}t	| j
 tj dk t	|||fd
dtfk d S )Nr!   r   )r   r   r   )r   F)r!   r   )r   r   )r!   r   )r   r`   ra   r   r   rM   r   r   Zread_array_header_2_0r   r   r   )r   rP   ri   r   r   r   r   r   test_read_array_header_2_0E  s    r   c              C   s   t  } tttj|  t d} tttj|  t d} tttj|  d	dd}t  } tj| | tttj|  d
dddd}t  } tj| | tttj|  d S )N   1s    r   r   r   )ri   r   F)ri   rj   r   Zextrakey)r   r   )r   r   rV   )r   r   r^   r   r   r   )r   r   r   r   r   test_bad_headerR  s$    r   c              C   s   t jdkst jdkrtjd tjjtd} ydd l}|j	ddd| g W n t
k
rh   tjd	 Y nX t| d
&}|jd tjd}tj|| W d Q R X t| d}|jd tj|}W d Q R X t|| d S )Nre   rf   z)Unknown if Windows has sparse filesystemsZsparse_filer   truncatez-sZ
5368709120zCould not create 5GB large filerg   l        r?   rk   )rm   rn   pytestskipr   r   ro   r   
subprocess
check_call	Exceptionrp   r   r`   r   r   rz   r   )Ztf_namesprQ   r   rl   r   r   r   test_large_file_supportm  s     



r   ztest requires 64-bit system)reasonc              C   s   yt jdt jd} W n tk
r2   tjd Y nX tjjt	d}t
|d}t j|| d W d Q R X t
|d}t j|d	 }W d Q R X t| j|jk d S )Nr   r   )r   zCould not create large fileZlarge_archiverg   )rP   rk   rP      @)r   r   )r`   emptyuint8MemoryErrorr   r   r   r   ro   r   rp   r   rz   r   ri   )r~   r   rQ   Znew_ar   r   r   test_large_archive  s    r   c              C   s&   t jjtd} tj|  tj|  d S )Nznothing.npz)r   r   ro   r   r`   r   rz   )r   r   r   r   test_empty_npz  s    
r   c           !   C   s   t jddddgdtfdtfgd} tjjtd}t|d}tj	|| dd
 W d Q R X t|d}tj
|}W d Q R X t| | t|d*}tt tj	|| d d
 W d Q R X W d Q R X d S )Nr   r!   r   intu   整形)r   zunicode.npyrg   r   )r   rk   )r   r!   )r   r   )r   r!   )r   r   )r!   r   )r`   r   r   r   r   ro   r   rp   r   rM   rO   r   r   r   )rP   r   rQ   rS   r   r   r   test_unicode_field_names  s     

r   zdt, failZS3Zsomestuff)metadataZsubarrayc             C   s   t jd| d}t }tt t j|| W d Q R X |jd |rbtt t j	| W d Q R X n>t j	|}ddl
m} t|| ||jst||j std S )Nr   )r   r   )_has_metadata)r`   ra   r   r   r   r   r   r   r^   rz   Znumpy.lib.formatr   r   r   AssertionError)r   ZfailrP   bufrS   r   r   r   r   test_metadata_dtype  s    




r   )r   r   )r   r   )r   r   rV   r   )r   r   r   r   r   )r   r   r   )r   r    r   )r   r   r   )r%   r&   )r'   r   )r(   r)   r   )r%   r&   r   r   )r*   r   r   r   )r+   r,   r   )r(   r)   )r-   r.   )r/   r)   )r1   r2   )r3   r&   r   r   )r   r   r   )r   r    )r6   r4   )r9   r8   r?   r>   r   r   )r=   r   r   )r!   )r!   )r#   r?   r>   r   r   )r   r   r   )r!   )r#   )r!   )r#   )r?   )r   )f__doc__rm   r   r   r	   r   r   ior   Znumpyr`   Znumpy.testingr   r   r   r   r   Z	numpy.libr   r   r   r   r   Zint8Zuint16Zint16Zuint32Zint32Zuint64Zint64Zfloat32Zfloat64Z	complex64Z
complex128r\   ZscalarsrY   ZscalarZendianr   Znewbyteorderr   Zastypebasicextendr   ZreshapeTZPdescrZPbufferTZNdescrZNbufferTr   rZ   r@   rT   rU   rW   rX   r[   r]   r_   rd   markZslowrx   r}   r   Zdt2Zdt3Zdt4Zdt5Zdt6Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZskipifZintpr   r   r   r   r   r   r   r   r   r   <module>  sL  	


*&&	&	"/
 



&