o
    0Zc˛                     @   sp  d 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mZ ddlmZ ddlm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"e!D ]@Z#dD ];Z$e%e#&e$Z%e'd(e%Z)e"*ej+g e%d	ej+d
e%d	e)e),de),dj-e),dddddddf g q[qWg dZ.ddgddgddggdfddgddgddggdfgZ/dddddg dfddgfdd d!d"gfd#d$gZ0ddgd%dd&d%d'gddgd(dgfd)d*fd+d,ddgddggdfddgd-dd.d-d/gddgdd(gfd0d1fd2d3ddgddggdfgZ1ej+e/e%e.&d4d	ej+e1e%e0&d4d	ej+e/e%e.&d5d	ej+e1e%e0&d5d	ej2d(d6gd	gZ3G d7d8 d8eZ4d9d: Z5d;d< Z6d=d> Z7d?d@ Z8dAdB Z9dCdD Z:dEdF Z;dGdH Z<ej=j>dIdJ Z?dKdL Z@ej%dMd*dNZAe%dOdPgdQdQgd(dRgdSZBe%dTdUgdQeBgdVZCe%g dWdQgd dVZDe%dOdPgdQdQgd(dRgdXdYgdZZEe%g g dd[ZFej=Gd\eAeBeCeDeEeFgd]d^ ZHd_d` ZIdadb ZJdcdd ZKej=Gd\e%ej%dOejfdPejfdTejfgd*dNdee%dfe%dOdPgdgdggddgddhdedifge%djge%dfe%e%e%dOdPgdgdggddgddhdefdiffge%dOe%e%e%e%dOeLfdPe%dOdPgdgdggddgddhfgdefdifdkffggdldm ZMdndo ZNdpdq ZOej=Gdrdsdgdtdu ZPdvdw ZQdxdy ZRg dzZSg d{ZTd|d} ZUd~d ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]ej=j^e%ej_j`dk ddej=j>edddd Zadd Zbdd Zcej=Gde%dOdPgedej%dddidgdVd*fej%eLddidd1fej%deLdffgddidd1fe%dOdPgede%dTgej%eLi dgdVgdVd1fgej=j^eo-ejejfdkdddd Zgd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IS_PYPY)requires_memory)formatz<>i  dtype
   )   2      )xi4r   yf8r   r   zu1   g      @g      @      g      @g      @	   r   Info)valuec16)y2r   Info2)nameS2)r"   r#   r   )y3r   r   )z3u4r   r&   )z2b1)colorr(   info)NameU8)Valuer#   r   r                 @nny              @   NNTcc)r6   r3                 @ooy              @OOFdd)r:   r8   <>)cz<f8   r   c                       s   e Zd Zd fdd	Z  ZS )BytesIOSRandomSizeNc                    s    dd l }|d|}t |S )Nr   r5   )randomrandintsuperread)selfsizerC   	__class__ Q/var/www/chikooza/env/lib/python3.10/site-packages/numpy/lib/tests/test_format.pyrF     s   zBytesIOSRandomSize.readN)__name__
__module____qualname__rF   __classcell__rK   rK   rI   rL   rB     s    rB   c                 C   s0   t  }t||  t | }tj|dd}|S )NTallow_pickler   r
   write_arraygetvalue
read_arrayarrff2arr2rK   rK   rL   	roundtrip  s
   r]   c                 C   s,   t  }t||  t| }t|}|S rM   )r   r
   rU   rB   rV   rW   rX   rK   rK   rL   roundtrip_randsize  s
   
r^   c                 C   s4   t  }t||  t | dd }t|}|S )Nr   r   rT   rX   rK   rK   rL   roundtrip_truncated  s
   
r_   c                 C   s   t | |k d S rM   )r   )o1o2rK   rK   rL   assert_equal_  s   rb   c                  C   s$   t t D ]} t| }t| | qd S rM   )basic_arraysrecord_arraysr]   r   rY   r\   rK   rK   rL   test_roundtrip  s   rf   c                  C   s.   t t D ]} | jtkrt| }t| | qd S rM   )rc   rd   r   objectr^   r   re   rK   rK   rL   test_roundtrip_randsize  s   

rh   c                  C   s$   t D ]} | jtkrttt|  qd S rM   )rc   r   rg   r   
ValueErrorr_   rY   rK   rK   rL   test_roundtrip_truncated  s
   
rk   c                  C   s4   t jdt ttjd fd} t| }t| | d S )Nr5   r   )nponesr   strr
   BUFFER_SIZEr]   r   )long_str_arrlong_str_arr2rK   rK   rL   test_long_str  s   rr   c           
   	   C   sD  t tt D ]\}}|jjrqtj| d| d}tj| d| d}t|d}t	
|| W d    n1 s;w   Y  |jjoH|jj }t	j|d|j|j|d}||d< |  t|d}| }W d    n1 sqw   Y  t|d}| }	W d    n1 sw   Y  t||	 t	j|d	d
}|  qd S )Nnormalz.npymemmapwbw+)moder   shapefortran_order.rbr)rw   )	enumeraterc   rd   r   	hasobjectospathjoinopenr
   rU   flagsf_contiguousc_contiguousopen_memmaprx   flushrF   rb   )
tmpdirirY   nfnmfnfpry   manormal_bytesmemmap_bytesrK   rK   rL   test_memmap_roundtrip  s2   



r   c                 C   sj   t jdd}tj| d}t j||d t |}|d }W d    n1 s)w   Y  t|| d S )N   zcompressed.npzrj   rY   )	rl   rC   randr~   r   r   savez_compressedloadr   )r   rY   npz_filenpzarr1rK   rK   rL   test_compressed_roundtrip  s   
r   z
i1, i4, i1)alignabr      )namesformatsoffsetsr>   d)r   r   )r    r   aabb)r   r   r   titles)r   r   itemsizedtc                 C   s   t d|}tdD ]}|d ||< q
tj| d}t j||d t |}|d }W d    n1 s5w   Y  t|| d S )Nr   rA   zaligned.npzrj   rY   )	rl   zerosranger~   r   r   savezr   r   )r   r   rY   r   r   r   r   rK   rK   rL   test_load_padded_dtype  s   
r   c                  C   s:   d} t jt jtd| }t|}t|td d S )Nzwin64python2.npydatar   )	r~   r   r   dirname__file__rl   r   r   rm   )fnamer   r   rK   rK   rL   %test_python2_python3_interoperability  s   
r   c               	   C   s  t jt jtd} tjd tddgtd}dD ]}t j| |}dD ]T}tj	|d|d}|
d	r;|d
 }|  n|}|dkri|dritt|d t t|d d |d d  t|d ||d  q#tt|d t t|| q#|dr|
d	rtj	|dd}tt|jd
 |  tj	|dddd}tt|jd
 |  qtttj	|dd tttj	|dddd qd S )Nr   u   優良s   不良r   )py2-objarr.npypy2-objarr.npzzpy3-objarr.npyzpy3-objarr.npz)byteslatin1TrS   encodingz.npzr   r   py2r   r   rR   F)rS   fix_importsr   )r~   r   r   r   r   rl   arrayr   rg   r   endswithclose
startswithr   
isinstancern   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r   r   data_fr   rK   rK   rL   test_pickle_python2_python3  sN   








r   c                 C   s   t jt jtd}t j|d}tttj|ddd t j|d}tj|ddd}tt|j	d W d    n1 s=w   Y  t j| d}tttj
|tjd gtd	dd
 d S )Nr   r   Fr   r   r   r   zpickle-disabled.npyr   rR   )r~   r   r   r   r   r   ri   rl   r   r   saver   rg   )r   r   r   rZ   rK   rK   rL   test_pickle_disallowF  s   

r   )r   r   i1)r   r   r   r   )r   )r   r?   r   r@   c                 C   s8   t | j}t||  td| }t|}t|| d S )Nr   )r
   descr_to_dtypedescrrb   rl   r   r]   r   )r   dt1r   r\   rK   rK   rL   test_descr_to_dtypeU  s
   2
r   c                  C   s   t  } dd tdD }tjd|d}tj| |dd tjdd	}td
dt	 t| | t
|d jt	u  W d    n1 sBw   Y  | d |  }t
t|tj dk | d tj| dd}t|| tttj| |d d S )Nc                 S      g | ]
}d | d t fqS z%dd   float.0r   rK   rK   rL   
<listcomp>      z$test_version_2_0.<locals>.<listcomp>    r   r   r   versionTrecordalwaysr   r   @ max_header_sizer5   r   )r   r   rl   rm   r
   rU   warningscatch_warningsfilterwarningsUserWarningr   categoryseekreadlinelenARRAY_ALIGNrW   r   r   ri   )rZ   r   r   wheadernrK   rK   rL   test_version_2_0  s    


r   c              	   C   s,  dd t dD }tjd|d}tj| d}tj| d}tttj	|d|j
|jd	d
 tj	|d|j
|jdd
}||d< |  tj	|ddd}t|| tjdd,}tddt tj	|d|j
|jd d
}t|d jtu  ||d< |  W d    n1 sw   Y  tj	|ddd}t|| d S )Nc                 S   r   r   r   r   rK   rK   rL   r     r   z+test_version_2_0_memmap.<locals>.<listcomp>r   r   r   zversion2_01.npyzversion2_02.npyrv   r   )rw   r   rx   r   r   .r{   r   )rw   r   Tr   r   r   r   )r   rl   rm   r~   r   r   r   ri   r
   r   r   rx   r   r   r   r   r   r   r   r   )r   r   r   tf1tf2r   r   rK   rK   rL   test_version_2_0_memmap  s2   

r   	mmap_moder{   c                 C   s  t j| d}tjddd d d}tjtdd t|| W d    n1 s*w   Y  tj	t
d	d tj||d
 W d    n1 sHw   Y  tj	t
d	d tj||dd W d    n1 sgw   Y  tj||dd}t|| tj||dd}t|| d S )Nzlarge_header.npyr5   i,'  r   r   .*format 2.0matchHeader.*large)r    N  )r   r   T)r   rS     )r~   r   r   rl   r   pytestwarnsr   r   raisesri   r   r   )r   r   rZ   rY   resrK   rK   rL   test_huge_header  s   
r   c                 C   s  t j| d}tjddd d d}tjtdd tj||d	 W d    n1 s+w   Y  tj	t
d
d t|d  W d    n1 sIw   Y  tj	t
d
d tj|ddd  W d    n1 siw   Y  tj|ddd }t|| tj|ddd }t|| d S )Nzlarge_header.npzr5   r   r   r   r   r   r   rj   r   rY   r   r   TrR   r   )r~   r   r   rl   r   r   r   r   r   r   ri   r   r   )r   rZ   rY   r   rK   rK   rL   test_huge_header_npz  s   
r   c               	   C   s   t  } td}tj| |dd t| | tj| |d d t| | tj| |dd t| | g d}|D ]}ttd tj| ||d W d    n1 sRw   Y  q8d S )Nr5   r   r   r   ))r5   r5   )r   r   )r   r5   r   )   r   z we only support format version.*)r   rl   aranger
   rU   r   ri   )rZ   rY   bad_versionsr   rK   rK   rL   test_write_version  s"   
r  )s   NUMPYs   NUMPY  s   NUMPY s   NUMPY s   NUMPYs   NUMPY)s   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 | d |d t| }t|}t|dk t|dk t| 	 tj
k t|	 tj
k d S )Nr   r   r   r   r   r   r   )r   rl   rm   r   r
   rU   r   
read_magicr   tell	MAGIC_LEN)s1s2rY   version1version2rK   rK   rL   test_read_magic  s   



r  c                  C   s$   t D ]} t| }tttj| qd S rM   )malformed_magicr   r   ri   r
   rW   magicrZ   rK   rK   rL   test_read_magic_bad_magic.  s   r  c                  C   s(   t t D ]} t| }tttj| qd S rM   )bad_version_magicr  r   r   ri   r
   rW   r  rK   rK   rL   test_read_version_1_0_bad_magic4  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   r5      )r   ri   r
   r  rK   rK   rK   rL   test_bad_magic_args:  s   r  c                  C   sF   t  } ddd}t| | t  } dddd d}tttj| | d S )Nr5   r   )r   r      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr  )r   r   r>   )r   r
   write_array_header_1_0r   ri   sr   rK   rK   rL   test_large_headerA  s   
r  c                  C   r   t  } tjdtd}tj| |dd | tj t| \}}}t	| 
 tj dk t	|||fddtfk d S )Nr  r   r   r   r   F)r   rl   rm   r   r
   rU   r   r  read_array_header_1_0r   r  r   r  rY   rx   fortranr   rK   rK   rL   test_read_array_header_1_0K     r  c                  C   r  )Nr  r   r   r   r   F)r   rl   rm   r   r
   rU   r   r  read_array_header_2_0r   r  r   r  rK   rK   rL   test_read_array_header_2_0X  r  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| | tttj|  ddddd}t  } t| | tttj|  d S )	N   1s    r5   r   r   )rx   r   Fr   )rx   ry   r   extrakey)r   r   ri   r
   r  r  r  rK   rK   rL   test_bad_headere  s(   r%  c                 C   s   t jdks
t jdkrtd tj| d}zdd l}|ddd|g W n t	y3   td	 Y nw t
|d
}|d td}t|| W d    n1 sTw   Y  t
|d}|d t|}W d    n1 ssw   Y  t|| d S )Nwin32cygwinz)Unknown if Windows has sparse filesystemssparse_filer   truncatez-s
5368709120zCould not create 5GB large fileru   l        rA   rz   )sysplatformr   skipr~   r   r   
subprocess
check_call	Exceptionr   r   rl   r   r   r   r   )r   tf_namesprZ   r   r{   rK   rK   rL   test_large_file_support  s&   



r3  ztest requires 64-bit system)reasonl        )
free_bytesc                 C   s   d}z
t j|t jd}W n ty   td Y nw tj| d}t	|d}t j
||d W d    n1 s9w   Y  ~t	|d}t |d }W d    n1 sVw   Y  |j|ksbJ d S )	N)i   @r   r   zCould not create large filelarge_archiveru   rj   rz   rY   )rl   emptyuint8MemoryErrorr   r-  r~   r   r   r   r   r   rx   )r   rx   r   r   rZ   new_arK   rK   rL   test_large_archive  s   r;  c                 C   sH   t j| d}t| t|	}W d    d S 1 sw   Y  d S )Nznothing.npz)r~   r   r   rl   r   r   )r   r   npsrK   rK   rL   test_empty_npz  s
   
"r=  c              	   C   s  t jg ddtfdtfgd}tj| d}t|d}tj||dd W d    n1 s.w   Y  t|d	}t	|}W d    n1 sHw   Y  t
|| t|d-}tt tj||d d W d    n1 sow   Y  W d    d S W d    d S 1 sw   Y  d S )
N)r5   r   r#  r>  r#  intu   整形r   zunicode.npyru   )r   r   r   rz   )rl   r   r?  r~   r   r   r   r
   rU   rW   r   r   r   )r   rY   r   rZ   r\   rK   rK   rL   test_unicode_field_names  s(   
	

"r@  zdt, failS3somestuff)metadatasubarrayr   )   r   r   zPyPy bug in error formattingc                 C   s   t jd| d}t }tt t || W d    n1 sw   Y  |d |rGtt t 	| W d    d S 1 s@w   Y  d S t 	|}ddl
m} t|| ||js^J ||jreJ d S )Nr   r   r   )_has_metadata)rl   rm   r   r   r   r   r   r   ri   r   numpy.lib.formatrG  r   r   )r   failrY   bufr\   rG  rK   rK   rL   test_metadata_dtype  s   


"

rK  )h__doc__r+  r~   r   r   ior   numpyrl   numpy.testingr   r   r   r   r   r   numpy.testing._private.utilsr	   	numpy.libr
   r8  int8uint16int16uint32int32uint64int64float32float64	complex64
complex128rg   scalarsrc   scalarendianr   newbyteorderr   astypebasicextendr   reshapeTPdescrPbufferTNdescrNbufferTr   rd   rB   r]   r^   r_   rb   rf   rh   rk   rr   markslowr   r   r   dt2dt3dt4dt5dt6parametrizer   r   r   r   r?  r   r   r   r   r   r  r  r  r  r  r  r  r  r  r!  r%  r3  skipifintpr   r;  r=  r@  r   implementationr   rK  rK   rK   rK   rL   <module>   s     


&&
	


/





1




