o
    Dfa                     @   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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]qYg 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Z0dddddg dfddgfdd d!d"gfd#d$gZ1d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Z2ej,e0e&e/'d4d	ej,e2e&e1'd4d	ej,e0e&e/'d5d	ej,e2e&e1'd5d	ej3d(d6gd	gZ4G d7d8 d8eZ5d9d: Z6d;d< Z7d=d> Z8d?d@ Z9dAdB Z:dCdD Z;dEdF Z<dGdH Z=ej>j?edIdJej>j@dKdL ZAdMdN ZBej&dOd*dPZCe&dQdRgdSdSgd(dTgdUZDe&dVdWgdSeDgdXZEe&g dYdSgd dXZFe&dQdRgdSdSgd(dTgdZd[gd\ZGe&g g dd]ZHej>Id^eCeDeEeFeGeHgd_d` ZJej>j?ejKdakdbdJej>jLedcdJddde ZMdfdg ZNdhdi ZOej>Id^e&ej&dQejfdRejfdVejfgd*dPdje&dke&dQdRgdldlgddgddmdjdnfge&doge&dke&e&e&dQdRgdldlgddgddmdjfdnffge&dQe&e&e&e&dQePfdRe&dQdRgdldlgddgddmfgdjfdnfdpffggdqdr ZQdsdt ZRej>j?edIdJdudv ZSej>Idwdxdgdydz ZTd{d| ZUd}d~ ZVg dZWg dZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zaej>j?eddJej>j?e&ejbjcdk ddJej>j@edddd Zddd Zedd Zfdd Zgej>Ide&dQdRgehej&dddidgdXd*fej&ePddidd1fej&dePdffgddidd1fe&dQdRgehe&dVgej&ePi dgdXgdXd1fgej>j?eo^ejijjdkddJdd Zkd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IS_WASM)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)r7   r4                 @ooy              @OOFdd)r;   r9   <>)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   r6   )randomrandintsuperread)selfsizerD   	__class__ T/home/ubuntu/webapp/venv/lib/python3.10/site-packages/numpy/lib/tests/test_format.pyrG     s   zBytesIOSRandomSize.readN)__name__
__module____qualname__rG   __classcell__rL   rL   rJ   rM   rC     s    rC   c                 C   s0   t  }t||  t | }tj|dd}|S )NTallow_pickler   r   write_arraygetvalue
read_arrayarrff2arr2rL   rL   rM   	roundtrip  s
   r^   c                 C   s,   t  }t||  t| }t|}|S rN   )r   r   rV   rC   rW   rX   rY   rL   rL   rM   roundtrip_randsize  s
   
r_   c                 C   s4   t  }t||  t | dd }t|}|S )Nr   r   rU   rY   rL   rL   rM   roundtrip_truncated  s
   
r`   c                 C   s   t | |k d S rN   )r   )o1o2rL   rL   rM   assert_equal_  s   rc   c                  C   s$   t t D ]} t| }t| | qd S rN   )basic_arraysrecord_arraysr^   r   rZ   r]   rL   rL   rM   test_roundtrip  s   rg   c                  C   s.   t t D ]} | jtkrt| }t| | qd S rN   )rd   re   r   objectr_   r   rf   rL   rL   rM   test_roundtrip_randsize  s   

ri   c                  C   s$   t D ]} | jtkrttt|  qd S rN   )rd   r   rh   r   
ValueErrorr`   rZ   rL   rL   rM   test_roundtrip_truncated  s
   
rl   c                  C   s4   t jdt ttjd fd} t| }t| | d S )Nr6   r   )nponesr   strr   BUFFER_SIZEr^   r   )long_str_arrlong_str_arr2rL   rL   rM   test_long_str  s   rs   zmemmap doesn't work correctly)reasonc           
   	   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)ry   )	enumeraterd   re   r   	hasobjectospathjoinopenr   rV   flagsf_contiguousc_contiguousopen_memmaprz   flushrG   rc   )
tmpdirirZ   nfnmfnfpr{   manormal_bytesmemmap_bytesrL   rL   rM   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.npzrk   rZ   )	rm   rD   randr   r   r   savez_compressedloadr   )r   rZ   npz_filenpzarr1rL   rL   rM   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   rB   zaligned.npzrk   rZ   )	rm   zerosranger   r   r   savezr   r   )r   r   rZ   r   r   r   r   rL   rL   rM   test_load_padded_dtype  s   
r   )r      zsee gh-23988z!Emscripten NODEFS has a buggy dupc                  C   sh   d} t jt jtd| }tjtdd t	|}W d    n1 s%w   Y  t
|td d S )Nzwin64python2.npydatazReading.*this warning\.matchr   )r   r   r   dirname__file__pytestwarnsUserWarningrm   r   r   rn   )fnamer   r   rL   rL   rM   %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   )zpy2-np0-objarr.npypy2-objarr.npypy2-objarr.npzzpy3-objarr.npyzpy3-objarr.npz)byteslatin1TrT   encodingz.npzr   r   py2r   r   rS   F)rT   fix_importsr   )r   r   r   r   r   rm   arrayr   rh   r   endswithclose
startswithr   
isinstancero   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r   r   data_fr   rL   rL   rM   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   rS   )r   r   r   r   r   r   rj   rm   r   r   saver   rh   )r   r   r   r[   rL   rL   rM   test_pickle_disallowK  s   

r   )r   r   i1)r   r   r   r   )r    )r   r@   r   rA   c                 C   s8   t | j}t||  td| }t|}t|| d S )Nr   )r   descr_to_dtypedescrrc   rm   r   r^   r   )r   dt1r   r]   rL   rL   rM   test_descr_to_dtypeZ  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   rL   rL   rM   
<listcomp>      z$test_version_2_0.<locals>.<listcomp>    r   r   r   versionTrecordalwaysr   r   @ max_header_sizer6   r   )r   r   rm   rn   r   rV   warningscatch_warningsfilterwarningsr   r   categoryseekreadlinelenARRAY_ALIGNrX   r   r   rj   )r[   r   r   wheadernrL   rL   rM   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   rL   rL   rM   r     r   z+test_version_2_0_memmap.<locals>.<listcomp>r   r   r   zversion2_01.npyzversion2_02.npyrx   r   )ry   r   rz   r   r   .r}   r   )ry   r   Tr   r   r   r   )r   rm   rn   r   r   r   r   rj   r   r   r   rz   r   r   r   r   r   r   r   r   )r   r   r   tf1tf2r   r   rL   rL   rM   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.npyr6   i,'  r   r   .*format 2.0r   Header.*large)r    N  )r   r   T)r   rT     )r   r   r   rm   r   r   r   r   r   raisesrj   r   r   )r   r   r[   rZ   resrL   rL   rM   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.npzr6   r   r   r   r   r   r   rk   r   rZ   r   r   TrS   r   )r   r   r   rm   r   r   r   r   r   r   rj   r   r   )r   r[   rZ   r   rL   rL   rM   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 )Nr6   r   r   r   ))r6   r6   )r   r   )r   r6   r   )   r  z we only support format version.*)r   rm   aranger   rV   r   rj   )r[   rZ   bad_versionsr   rL   rL   rM   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   rm   rn   r   r   rV   r   
read_magicr   tell	MAGIC_LEN)s1s2rZ   version1version2rL   rL   rM   test_read_magic  s   



r  c                  C   s$   t D ]} t| }tttj| qd S rN   )malformed_magicr   r   rj   r   rX   magicr[   rL   rL   rM   test_read_magic_bad_magic4  s   r  c                  C   s(   t t D ]} t| }tttj| qd S rN   )bad_version_magicr  r   r   rj   r   rX   r  rL   rL   rM   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   r6      )r   rj   r   r  rL   rL   rL   rM   test_bad_magic_args@  s   r  c                  C   sL   t  } t ddd}t| | t  } dd dfg|d< tttj| | d S )NFz<i8rz   r{   r      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr  r   )r   tupler   write_array_header_1_0r   rj   sr   rL   rL   rM   test_large_headerG  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   rm   rn   r   r   rV   r   r
  read_array_header_1_0r   r	  r   r  rZ   rz   fortranr   rL   rL   rM   test_read_array_header_1_0Q     r#  c                  C   r  )Nr  r   r   r   r   F)r   rm   rn   r   r   rV   r   r
  read_array_header_2_0r   r	  r   r!  rL   rL   rM   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|  t d} tttj|  ddddd}t  } t| | tttj|  d S )	N   1s    s@   NUMPY 6 {'descr': 'x', 'shape': (1, 2), }                    
r6   r   Fr   r   )rz   r{   r   extrakey)r   r   rj   r   r   r  r  rL   rL   rM   test_bad_headerk  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 filerw   l        rB   r|   )sysplatformr   skipr   r   r   
subprocess
check_call	Exceptionr   r   rm   r  r   r   r   )r   tf_namespr[   r   r}   rL   rL   rM   test_large_file_support  s&   



r8  zflaky on PyPyztest requires 64-bit systeml        )
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_archiverw   rk   r|   rZ   )rm   emptyuint8MemoryErrorr   r2  r   r   r   r   r   r   rz   )r   rz   r   r   r[   new_arL   rL   rM   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   rm   r   r   )r   r   npsrL   rL   rM   test_empty_npz  s
   
"rA  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)r6   r   r(  rB  r(  intu   整形r   zunicode.npyrw   )r   r   r   r|   )rm   r   rC  r   r   r   r   r   rV   rX   r   r   r   )r   rZ   r   r[   r]   rL   rL   rM   test_unicode_field_names  s(   
	

"rD  c                  C   s   g dg dg dg dfD ]9\} }}dd t tjD D ])}t }t|| r+d|fn|df| td| tfgd	 t|	 |ksFJ qqd S )
N)F      )F      )TrG  rF  )T   rH  c                 S   s   g | ]}d | qS )r   rL   r   rL   rL   rM   r     s    z+test_header_growth_axis.<locals>.<listcomp>r    r  )
r   r   GROWTH_AXIS_MAX_DIGITSr   r  rm   r   rC  r   rW   )is_fortran_arraydtype_spaceexpected_header_lengthrI   r   rL   rL   rM   test_header_growth_axis  s   rO  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|jusaJ ||j|ju skJ d S )Nr   r   r   )drop_metadata)rm   rn   r   r   r   r   r   r   rj   r   numpy.lib._utils_implrV  r   r   )r   failrZ   bufr]   rV  rL   rL   rM   test_metadata_dtype  s   


"

rZ  )l__doc__r0  r   r   r   ior   numpyrm   numpy.testingr   r   r   r   r   r   r	   numpy.testing._private.utilsr
   	numpy.libr   r<  int8uint16int16uint32int32uint64int64float32float64	complex64
complex128rh   scalarsrd   scalarendianr   newbyteorderr  astypebasicextendr   reshapeTPdescrPbufferTNdescrNbufferTr   re   rC   r^   r_   r`   rc   rg   ri   rl   rs   markskipifslowr   r   r   dt2dt3dt4dt5dt6parametrizer   version_infoxfailr   r   r   rC  r   r   r   r   r  r  r  r  r  r  r  r  r  r#  r&  r*  r8  intpr   r?  rA  rD  rO  r   implementationr   rZ  rL   rL   rL   rM   <module>   s    $


&&
	

/





1





