o
    g?                     @   s  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 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 qSqOg 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Z-d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d/d0fd1d2ddgddggdfgZ.ej(e,e"e+#d3dej(e.e"e-#d3dej(e,e"e+#d4dej(e.e"e-#d4dej/d'd5gdgZ0G d6d7 d7eZ1d8d9 Z2d:d; Z3d<d= Z4d>d? Z5d@dA Z6dBdC Z7dDdE Z8dFdG Z9dHdI Z:dJdK Z;ej"dLd)dMZ<e"dNdOgdPdPgd'dQgdRZ=e"dSdTgdPe=gdUZ>e"g dVdPgd dUZ?e"dNdOgdPdPgd'dQgdWdXgdYZ@e"g g ddZZAejBCd[e<e=e>e?e@eAgd\d] ZDd^d_ ZEd`da ZFdbdc ZGejBCd[e"ej"dNejfdOejfdSejfgd)dMdde"dee"dNdOgdfdfgddgddgdddhfge"dige"dee"e"e"dNdOgdfdfgddgddgddfdhffge"dNe"e"e"e"dNeHfdOe"dNdOgdfdfgddgddgfgddfdhfdjffggdkdl ZIdmdn ZJdodp ZKdqdr ZLg dsZMg dtZNdudv ZOdwdx ZPdydz ZQd{d| ZRd}d~ ZSdd ZTdd ZUdd ZVdd ZWejBjXe"ejYjZdk ddejBj[dd Z\dd Z]dd Z^ejBCde"dNdOge_ej"dddidgdUd)fej"eHddidd0fej"deHdffgddidd0fe"dNdOge_e"dSgej"eHi dgdUgdUd0fgdd Z`d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)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)r4   r1                 @ooy              @OOFdd)r8   r6   <>)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   r3   )randomrandintsuperread)selfsizerA   	__class__ Y/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/numpy/lib/tests/test_format.pyrD     s   zBytesIOSRandomSize.readN)__name__
__module____qualname__rD   __classcell__rI   rI   rG   rJ   r@     s    r@   c                 C   s0   t  }t||  t | }tj|dd}|S )NTallow_pickler   r   write_arraygetvalue
read_arrayarrff2arr2rI   rI   rJ   	roundtrip  s
   r[   c                 C   s,   t  }t||  t| }t|}|S rK   )r   r   rS   r@   rT   rU   rV   rI   rI   rJ   roundtrip_randsize  s
   
r\   c                 C   s4   t  }t||  t | dd }t|}|S )Nr   r   rR   rV   rI   rI   rJ   roundtrip_truncated  s
   
r]   c                 C   s   t | |k d S rK   )r   )o1o2rI   rI   rJ   assert_equal_  s   r`   c                  C   s$   t t D ]} t| }t| | qd S rK   )basic_arraysrecord_arraysr[   r   rW   rZ   rI   rI   rJ   test_roundtrip  s   rd   c                  C   s.   t t D ]} | jtkrt| }t| | qd S rK   )ra   rb   r
   objectr\   r   rc   rI   rI   rJ   test_roundtrip_randsize  s   

rf   c                  C   s$   t D ]} | jtkrttt|  qd S rK   )ra   r
   re   r   
ValueErrorr]   rW   rI   rI   rJ   test_roundtrip_truncated  s
   
ri   c                  C   s4   t jdt ttjd fd} t| }t| | d S )Nr3   r	   )nponesr
   strr   BUFFER_SIZEr[   r   )long_str_arrlong_str_arr2rI   rI   rJ   test_long_str  s   rp   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ru   )	enumeratera   rb   r
   	hasobjectospathjoinopenr   rS   flagsf_contiguousc_contiguousopen_memmaprv   flushrD   r`   )
tmpdirirW   nfnmfnfprw   manormal_bytesmemmap_bytesrI   rI   rJ   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.npzrh   rW   )	rj   rA   randr}   r~   r   savez_compressedloadr   )r   rW   npz_filenpzarr1rI   rI   rJ   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   r?   zaligned.npzrh   rW   )	rj   zerosranger}   r~   r   savezr   r   )r   r   rW   r   r   r   r   rI   rI   rJ   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__rj   r   r   rk   )fnamer~   r   rI   rI   rJ   %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rQ   encodingz.npzr   r   py2r   r   rP   F)rQ   fix_importsr   )r}   r~   r   r   r   rj   arrayr   re   r   endswithclose
startswithr   
isinstancerl   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r~   r   data_fr   rI   rI   rJ   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	   rP   )r}   r~   r   r   r   r   rg   rj   r   r   saver   re   )r   r   r~   rX   rI   rI   rJ   test_pickle_disallowD  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descrr`   rj   r   r[   r   )r   dt1r   rZ   rI   rI   rJ   test_descr_to_dtypeS  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| }t|| tttj| |d d S )Nc                 S      g | ]
}d | d t fqS z%dd   float.0r   rI   rI   rJ   
<listcomp>      z$test_version_2_0.<locals>.<listcomp>    r	   r   r   versionTrecordalwaysr   r   r3   r   )r   r   rj   rk   r   rS   warningscatch_warningsfilterwarningsUserWarningr   categoryseekreadlinelenARRAY_ALIGNrU   r   r   rg   )rX   r   r   wheadernrI   rI   rJ   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}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}t|| d S )Nc                 S   r   r   r   r   rI   rI   rJ   r     r   z+test_version_2_0_memmap.<locals>.<listcomp>r   r   r	   zversion2_01.npyzversion2_02.npyrt   r   )ru   r
   rv   r   r   .ry   rz   Tr   r   r   r   )r   rj   rk   r}   r~   r   r   rg   r   r   r
   rv   r   r   r   r   r   r   r   r   )r   r   r   tf1tf2r   r   rI   rI   rJ   test_version_2_0_memmap  s2   

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 )Nr3   r   r   r   ))r3   r3   )r   r   )r   r3   r   )   r   z we only support format version.*)r   rj   aranger   rS   r   rg   )rX   rW   bad_versionsr   rI   rI   rJ   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   rj   rk   r   r   rS   r   
read_magicr   tell	MAGIC_LEN)s1s2rW   version1version2rI   rI   rJ   test_read_magic  s   



r   c                  C   s$   t D ]} t| }tttj| qd S rK   )malformed_magicr   r   rg   r   rU   magicrX   rI   rI   rJ   test_read_magic_bad_magic  s   r   c                  C   s(   t t D ]} t| }tttj| qd S rK   )bad_version_magicr   r   r   rg   r   rU   r   rI   rI   rJ   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   r3      )r   rg   r   r   rI   rI   rI   rJ   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 )Nr3   r   )r   r      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   )r   r   r<   )r   r   write_array_header_1_0r   rg   sr   rI   rI   rJ   test_large_header  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   rj   rk   r   r   rS   r   r   read_array_header_1_0r   r   r   r  rW   rv   fortranr
   rI   rI   rJ   test_read_array_header_1_0!     r  c                  C   r  )Nr   r	   r   r   r   F)r   rj   rk   r   r   rS   r   r   read_array_header_2_0r   r   r   r	  rI   rI   rJ   test_read_array_header_2_0.  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    r3   r   r   )rv   r   Fr   )rv   rw   r   extrakey)r   r   rg   r   r  r  r  rI   rI   rJ   test_bad_header;  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 filers   l        r?   rx   )sysplatformpytestskipr}   r~   r   
subprocess
check_call	Exceptionr   r   rj   r   r   r   r   )r   tf_namesprX   r   ry   rI   rI   rJ   test_large_file_supportV  s&   



r!  ztest requires 64-bit system)reasonc                 C   s   z
t jdt jd}W n ty   td Y nw tj| d}t	|d}t j
||d W d    n1 s7w   Y  t	|d}t |d }W d    n1 sSw   Y  t|j|jk d S )	N)i   @r   r	   zCould not create large filelarge_archivers   rh   rx   rW   )rj   emptyuint8MemoryErrorr  r  r}   r~   r   r   r   r   r   rv   )r   r   r   rX   new_arI   rI   rJ   test_large_archiveo  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   rj   r   r   )r   r   npsrI   rI   rJ   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)r3   r   r  r+  r  intu   整形r	   zunicode.npyrs   )r   r   r   rx   )rj   r   r,  r}   r~   r   r   r   rS   rU   r   r   r   )r   rW   r   rX   rZ   rI   rI   rJ   test_unicode_field_names  s(   
	

"r-  zdt, failS3somestuff)metadatasubarrayr   c                 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)rj   rk   r   r   r   r   r   r   rg   r   numpy.lib.formatr3  r   r
   )r   failrW   bufrZ   r3  rI   rI   rJ   test_metadata_dtype  s   


"

r7  )a__doc__r  r}   r   r  ior   numpyrj   numpy.testingr   r   r   r   r   	numpy.libr   r%  int8uint16int16uint32int32uint64int64float32float64	complex64
complex128re   scalarsra   scalarendianr
   newbyteorderr   astypebasicextendr   reshapeTPdescrPbufferTNdescrNbufferTr   rb   r@   r[   r\   r]   r`   rd   rf   ri   rp   r   r   r   dt2dt3dt4dt5dt6markparametrizer   r   r   r   r,  r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  skipifintpr   slowr(  r*  r-  r   r7  rI   rI   rI   rJ   <module>   sr    


&&
	

/





1



