o
    Z2hϟ                     @   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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_q[g dZ0ddgddgddggdfddgddgddggdfgZ1dddddg dfddgfdd d!d"gfd#d$gZ2d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Z3ej-e1e'e0(d4d	ej-e3e'e2(d4d	ej-e1e'e0(d5d	ej-e3e'e2(d5d	ej4d(d6gd	gZ5G d7d8 d8eZ6d9d: Z7d;d< Z8d=d> Z9d?d@ Z:dAdB Z;dCdD Z<dEdF Z=dGdH Z>ej?j@edIdJej?jAdKdL ZBdMdN ZCej'dOd*dPZDe'dQdRgdSdSgd(dTgdUZEe'dVdWgdSeEgdXZFe'g dYdSgd dXZGe'dQdRgdSdSgd(dTgdZd[gd\ZHe'g g dd]ZIej?Jd^eDeEeFeGeHeIgd_d` ZKej?j@ejLdakdbdJej?jMedcdJddde ZNdfdg ZOdhdi ZPej?Jd^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'dQeQfdRe'dQdRgdldlgddgddmfgdjfdnfdpffggdqdr ZRdsdt ZSej?j@edIdJdudv ZTej?Jdwdxdgdydz ZUd{d| ZVd}d~ ZWg dZXg dZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbej?j@eddJej?j@e ddJej?jAedddd Zcdd Zddd Zedd Zfej?Jd^e'dQdRgegej'dddidgdXej'eQddidej'deQdffgddide'dQdRgege'dVgej'eQi dgdXgdXgej?j@eoRejhjidkddJdd Zjd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IS_64BIT)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)r8   r5                 @ooy              @OOFdd)r<   r:   <>)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   r7   )randomrandintsuperread)selfsizerE   	__class__ l/home/skpark/git/infrasmart_work/infrasmart/venv/lib/python3.10/site-packages/numpy/lib/tests/test_format.pyrH     s   zBytesIOSRandomSize.readN)__name__
__module____qualname__rH   __classcell__rM   rM   rK   rN   rD     s    rD   c                 C   s0   t  }t||  t | }tj|dd}|S )NTallow_pickler   r   write_arraygetvalue
read_arrayarrff2arr2rM   rM   rN   	roundtrip  s
   r_   c                 C   s,   t  }t||  t| }t|}|S rO   )r   r   rW   rD   rX   rY   rZ   rM   rM   rN   roundtrip_randsize  s
   
r`   c                 C   s4   t  }t||  t | dd }t|}|S )Nr   r   rV   rZ   rM   rM   rN   roundtrip_truncated  s
   
ra   c                 C   s   t | |k d S rO   )r   )o1o2rM   rM   rN   assert_equal_  s   rd   c                  C   s$   t t D ]} t| }t| | qd S rO   )basic_arraysrecord_arraysr_   r   r[   r^   rM   rM   rN   test_roundtrip  s   rh   c                  C   s.   t t D ]} | jtkrt| }t| | qd S rO   )re   rf   r   objectr`   r   rg   rM   rM   rN   test_roundtrip_randsize  s   

rj   c                  C   s$   t D ]} | jtkrttt|  qd S rO   )re   r   ri   r   
ValueErrorra   r[   rM   rM   rN   test_roundtrip_truncated  s
   
rm   c                  C   s4   t jdt ttjd fd} t| }t| | d S )Nr7   r   )nponesr   strr   BUFFER_SIZEr_   r   )long_str_arrlong_str_arr2rM   rM   rN   test_long_str  s   rt   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)rz   )	enumeratere   rf   r   	hasobjectospathjoinopenr   rW   flagsf_contiguousc_contiguousopen_memmapr{   flushrH   rd   )
tmpdirir[   nfnmfnfpr|   manormal_bytesmemmap_bytesrM   rM   rN   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.npzrl   r[   )	rn   rE   randr   r   r   savez_compressedloadr   )r   r[   npz_filenpzarr1rM   rM   rN   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   rC   zaligned.npzrl   r[   )	rn   zerosranger   r   r   savezr   r   )r   r   r[   r   r   r   r   rM   rM   rN   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UserWarningrn   r   r   ro   )fnamer   r   rM   rM   rN   %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rU   encodingz.npzr   r   py2r   r   rT   F)rU   fix_importsr   )r   r   r   r   r   rn   arrayr   ri   r   endswithclose
startswithr   
isinstancerp   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r   r   data_fr   rM   rM   rN   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   rT   )r   r   r   r   r   r   rk   rn   r   r   saver   ri   )r   r   r   r\   rM   rM   rN   test_pickle_disallowK  s   

r   )r   r   i1)r   r   r   r   )r!   )r   rA   r   rB   c                 C   s8   t | j}t||  td| }t|}t|| d S )Nr   )r   descr_to_dtypedescrrd   rn   r   r_   r   )r   dt1r   r^   rM   rM   rN   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   rM   rM   rN   
<listcomp>      z$test_version_2_0.<locals>.<listcomp>    r   r   r   versionTrecordalwaysr   r   @ max_header_sizer7   r   )r   r   rn   ro   r   rW   warningscatch_warningsfilterwarningsr   r   categoryseekreadlinelenARRAY_ALIGNrY   r   r   rk   )r\   r   r   wheadernrM   rM   rN   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   rM   rM   rN   r     r   z+test_version_2_0_memmap.<locals>.<listcomp>r   r   r   zversion2_01.npyzversion2_02.npyry   r   )rz   r   r{   r   r   .r~   r   )rz   r   Tr   r   r   r   )r   rn   ro   r   r   r   r   rk   r   r   r   r{   r   r   r   r   r   r   r   r   )r   r   r   tf1tf2r   r   rM   rM   rN   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.npyr7   i,'  r   r   .*format 2.0r   Header.*large)r    N  )r   r   T)r   rU     )r   r   r   rn   r   r   r   r   r   raisesrk   r   r   )r   r   r\   r[   resrM   rM   rN   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.npzr7   r   r   r   r   r   r   rl   r   r[   r   r   TrT   r   )r   r   r   rn   r   r   r   r   r   r   rk   r   r   )r   r\   r[   r   rM   rM   rN   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 )Nr7   r   r   r   ))r7   r7   )r   r   )r   r7   r   )   r  z we only support format version.*)r   rn   aranger   rW   r   rk   )r\   r[   bad_versionsr   rM   rM   rN   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   rn   ro   r   r   rW   r   
read_magicr   tell	MAGIC_LEN)s1s2r[   version1version2rM   rM   rN   test_read_magic  s   



r  c                  C   s$   t D ]} t| }tttj| qd S rO   )malformed_magicr   r   rk   r   rY   magicr\   rM   rM   rN   test_read_magic_bad_magic4  s   r  c                  C   s(   t t D ]} t| }tttj| qd S rO   )bad_version_magicr  r   r   rk   r   rY   r  rM   rM   rN   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   r7      )r   rk   r   r  rM   rM   rM   rN   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r{   r|   r      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr  r   )r   tupler   write_array_header_1_0r   rk   sr   rM   rM   rN   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   rn   ro   r   r   rW   r   r  read_array_header_1_0r   r
  r   r  r[   r{   fortranr   rM   rM   rN   test_read_array_header_1_0Q     r$  c                  C   r   )Nr  r   r   r   r   F)r   rn   ro   r   r   rW   r   r  read_array_header_2_0r   r
  r   r"  rM   rM   rN   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), }                    
r7   r   Fr   r   )r{   r|   r   extrakey)r   r   rk   r   r!  r  r  rM   rM   rN   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 filerx   l        rC   r}   )sysplatformr   skipr   r   r   
subprocess
check_call	Exceptionr   r   rn   r  r   r   r   )r   tf_namespr\   r   r~   rM   rM   rN   test_large_file_support  s&   



r9  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_archiverx   rl   r}   r[   )rn   emptyuint8MemoryErrorr   r3  r   r   r   r   r   r   r{   )r   r{   r   r   r\   new_arM   rM   rN   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   rn   r   r   )r   r   npsrM   rM   rN   test_empty_npz  s
   
"rB  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)r7   r   r)  rC  r)  intu   整形r   zunicode.npyrx   )r   r   r   r}   )rn   r   rD  r   r   r   r   r   rW   rY   r   r   r   )r   r[   r   r\   r^   rM   rM   rN   test_unicode_field_names  s(   
	

"rE  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      )TrH  rG  )T   rI  c                 S   s   g | ]}d | qS )r   rM   r   rM   rM   rN   r     s    z+test_header_growth_axis.<locals>.<listcomp>r    r  )
r   r   GROWTH_AXIS_MAX_DIGITSr   r  rn   r   rD  r   rX   )is_fortran_arraydtype_spaceexpected_header_lengthrJ   r   rM   rM   rN   test_header_growth_axis  s   rP  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 t |}ddlm	} t
|| ||j|jusCJ ||j|ju sMJ d S )Nr   r   r   )drop_metadata)rn   ro   r   r   r   r   r   r   numpy.lib._utils_implrW  r   r   )r   r[   bufr^   rW  rM   rM   rN   test_metadata_dtype  s   



rZ  )k__doc__r1  r   r   r   ior   numpyrn   numpy.testingr   r   r   r   r   r   r	   r
   numpy.testing._private.utilsr   	numpy.libr   r=  int8uint16int16uint32int32uint64int64float32float64	complex64
complex128ri   scalarsre   scalarendianr   newbyteorderr  astypebasicextendr   reshapeTPdescrPbufferTNdescrNbufferTr   rf   rD   r_   r`   ra   rd   rh   rj   rm   rt   markskipifslowr   r   r   dt2dt3dt4dt5dt6parametrizer   version_infoxfailr   r   r   rD  r   r   r   r  r  r  r  r  r  r  r  r  r  r$  r'  r+  r9  r@  rB  rE  rP  r   implementationr   rZ  rM   rM   rM   rN   <module>   s    (


&&
	

/





1





