U
    ?h™Ÿ  ã                   @   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 ]vZ%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²dddg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dddd g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.d0gddgdd)gfd1d2fd3d4ddgddggdfgZ2ej,e0e &e/¡ 'd5¡d	ej,e2e &e1¡ 'd5¡d	ej,e0e &e/¡ 'd6¡d	ej,e2e &e1¡ 'd6¡d	ej3d)d7gd	gZ4G d8d9„ d9eƒZ5d:d;„ Z6d<d=„ Z7d>d?„ Z8d@dA„ Z9dBdC„ Z:dDdE„ Z;dFdG„ Z<dHdI„ Z=ej>j?edJdKej>j@dLdM„ ƒƒZAdNdO„ ZBej&dPd+dQZCe &dRdSgdTdTgd)dUgdVœ¡ZDe &dWdXgdTeDgdYœ¡ZEe &dRdZdSgdTgd dYœ¡ZFe &dRdSgdTdTgd)dUgd[d\gd]œ¡ZGe &g g dd^œ¡ZHej> Id_eCeDeEeFeGeHg¡d`da„ ƒZJej>jKedbdKdcdd„ ƒZLdedf„ ZMdgdh„ ZNej> Id_e &ej&dRejfdSejfdWejfgd+dQdi¡e &dje &dRdSgdkdkgddgddlœdi¡dmfg¡e &dng¡e &dje &e &e &dRdSgdkdkgddgddlœ¡dif¡dmf¡fg¡e &dRe &e &e &e &dReOfdSe &dRdSgdkdkgddgddlœ¡fg¡dif¡dmf¡dof¡fg¡g¡dpdq„ ƒZPdrds„ ZQej>j?edJdKdtdu„ ƒZRej> Idvdwdg¡dxdy„ ƒZSdzd{„ ZTd|d}„ ZUd~dd€dd‚dƒgZVd„d…d†d‡dˆd‰dŠgZWd‹dŒ„ ZXddŽ„ ZYdd„ ZZd‘d’„ Z[d“d”„ Z\d•d–„ Z]d—d˜„ Z^d™dš„ Z_d›dœ„ Z`ej>j?eddKej>j?e &eja¡jbdk dždKej>j@edŸd d¡d¢„ ƒƒƒƒZcd£d¤„ Zdd¥d¦„ Zed§d¨„ Zfej> Id©e &dRdSgegej&dªd«d¬id­gdYœ¡d+fej&eOd«d¬id­d2fej&d®eOd¯ffgd«d¬id­d2fe &dRdSgege &dWgej&eOi d­gdYœ¡gdYœ¡d2fg¡ej>j?eoÀejhjid°kd±dKd²d³„ ƒƒZjdS )´a¹D   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      @é	   ZInfo)ÚvalueÚc16)Úy2r   ZInfo2)ÚnameÚS2)r   r    r   )Zy3r   r   )Zz3Zu4r   )Zz2Úb1)Úcolorr#   Úinfo)ÚNameZU8)ÚValuer    ù              @Únny              @é   ÚNNTÚcc)r,   r)   ù              @Z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   r+   )ÚrandomÚrandintÚsuperÚread)ÚselfÚsizer8   ©Ú	__class__© úM/var/www/html/venv/lib/python3.8/site-packages/numpy/lib/tests/test_format.pyr;   ‘  s    zBytesIOSRandomSize.read)N)Ú__name__Ú
__module__Ú__qualname__r;   Ú__classcell__r@   r@   r>   rA   r7     s   r7   c                 C   s0   t ƒ }t || ¡ t | ¡ ƒ}tj|dd}|S )NT©Úallow_pickle©r   r   Úwrite_arrayÚgetvalueÚ
read_array©ÚarrÚfÚf2Úarr2r@   r@   rA   Ú	roundtrip—  s
    rQ   c                 C   s,   t ƒ }t || ¡ t| ¡ ƒ}t |¡}|S ©N)r   r   rI   r7   rJ   rK   rL   r@   r@   rA   Úroundtrip_randsizeŸ  s
    
rS   c                 C   s4   t ƒ }t || ¡ t | ¡ dd… ƒ}t |¡}|S )Nr   r   rH   rL   r@   r@   rA   Úroundtrip_truncated§  s
    
rT   c                 C   s   t | |kƒ d S rR   )r   )Zo1Úo2r@   r@   rA   Úassert_equal_°  s    rV   c                  C   s$   t t D ]} t| ƒ}t| |ƒ qd S rR   )Úbasic_arraysÚrecord_arraysrQ   r   ©rM   rP   r@   r@   rA   Útest_roundtrip´  s    rZ   c                  C   s.   t t D ] } | jtkrt| ƒ}t| |ƒ qd S rR   )rW   rX   r   ÚobjectrS   r   rY   r@   r@   rA   Útest_roundtrip_randsizeº  s    
r\   c                  C   s$   t D ]} | jtkrttt| ƒ qd S rR   )rW   r   r[   r   Ú
ValueErrorrT   ©rM   r@   r@   rA   Útest_roundtrip_truncatedÁ  s    
r_   c                  C   s4   t jdt  ttjd f¡d} t| ƒ}t| |ƒ d S )Nr+   r   )ÚnpÚonesr   Ústrr   ÚBUFFER_SIZErQ   r   )Zlong_str_arrZlong_str_arr2r@   r@   rA   Útest_long_strÇ  s    rd   zmemmap doesn't work correctly)Úreasonc           
   
   C   s  t tt ƒD ]ö\}}|jjrqtj | d|› d¡}tj | d|› d¡}t|dƒ}t	 
||¡ W 5 Q R X |jjo||jj }t	j|d|j|j|d}||d< | ¡  t|dƒ}| ¡ }W 5 Q R X t|dƒ}| ¡ }	W 5 Q R X t||	ƒ t	j|d	d
}| ¡  qd S )NÚnormalz.npyZmemmapÚwbúw+)Úmoder   ÚshapeÚfortran_order.ÚrbÚr)ri   )Ú	enumeraterW   rX   r   Z	hasobjectÚosÚpathÚjoinÚopenr   rI   ÚflagsÚf_contiguousÚc_contiguousÚopen_memmaprj   Úflushr;   rV   )
ÚtmpdirÚirM   ZnfnZmfnÚfprk   ÚmaZnormal_bytesZmemmap_bytesr@   r@   rA   Útest_memmap_roundtripÎ  s,    ÿ ÿ
r|   c              	   C   sV   t j dd¡}tj | d¡}t j||d t  |¡}|d }W 5 Q R X t||ƒ d S )NéÈ   zcompressed.npzr^   rM   )	r`   r8   Zrandro   rp   rq   Zsavez_compressedÚloadr   )rx   rM   Únpz_fileÚnpzÚarr1r@   r@   rA   Útest_compressed_roundtripî  s    r‚   z
i1, i4, i1)ÚalignÚaÚbr   é   )ÚnamesÚformatsÚoffsetsr3   Úd)r‡   rˆ   Ú ZaaZbb)r‡   rˆ   r‰   Útitles)r‡   rˆ   ÚitemsizeÚdtc              	   C   sn   t  d|¡}tdƒD ]}|d ||< qtj | d¡}t j||d t  |¡}|d }W 5 Q R X t||ƒ d S )Nr   r6   zaligned.npzr^   rM   )	r`   ÚzerosÚrangero   rp   rq   Úsavezr~   r   )rx   rŽ   rM   ry   r   r€   r   r@   r@   rA   Útest_load_padded_dtype  s    r’   z!Emscripten NODEFS has a buggy dupc                  C   s:   d} t j t j t¡d| ¡}t |¡}t|t d¡ƒ d S )Nzwin64python2.npyÚdatar   )	ro   rp   rq   ÚdirnameÚ__file__r`   r~   r   ra   )Úfnamerp   r“   r@   r@   rA   Ú%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 ]L}t j | |¡}dD ]¨}tj	|d|d}| 
d	¡rx|d
 }| ¡  n|}|dkrÔ| d¡rÔtt|d tƒƒ t|d d… |d d… ƒ t|d  |¡|d ƒ qHtt|d tƒƒ t||ƒ qH| d¡r0| 
d	¡rVtj	|dd}tt|jd
ƒ | ¡  tj	|dddd}tt|jd
ƒ | ¡  q0tttj	|dd tttj	|dddd q0d S )Nr“   u   å„ªè‰¯s   ä¸è‰¯r   )úpy2-objarr.npyúpy2-objarr.npzzpy3-objarr.npyzpy3-objarr.npz)ÚbytesÚlatin1T©rG   Úencodingz.npzr   r›   Úpy2r   r   rF   F)rG   Úfix_importsr   )ro   rp   rq   r”   r•   r`   Úarrayr   r[   r~   ÚendswithÚcloseÚ
startswithr   Ú
isinstancerb   r   Úencoderš   r   ÚUnicodeErrorÚ__getitem__ÚImportError)Údata_dirÚexpectedr–   rp   r   Zdata_fr“   r@   r@   rA   Útest_pickle_python2_python3  sL    
ÿþ




ÿ

ÿ
 þ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 5 Q R X 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   rF   )ro   rp   rq   r”   r•   r   r]   r`   r~   r§   Úsaver    r[   )rx   r©   rp   rN   r@   r@   rA   Útest_pickle_disallowH  s    
 ÿÿr­   )r   r   Úi1)r‡   rˆ   r‰   r   )r   )r   r4   r   r5   c                 C   s8   t  | j¡}t|| ƒ t d| ¡}t|ƒ}t||ƒ d S )Nr   )r   Zdescr_to_dtypeÚdescrrV   r`   r   rQ   r   )rŽ   Údt1r   rP   r@   r@   rA   Útest_descr_to_dtypeW  s
    2
r±   c               	   C   sÚ   t ƒ } dd„ tdƒD ƒ}tjd|d}tj| |dd tjdd	2}t d
dt	¡ t | |¡ t
|d jt	kƒ W 5 Q R X |  d¡ |  ¡ }t
t|ƒtj dkƒ |  d¡ tj| dd}t||ƒ tttj| |dƒ d S )Nc                 S   s   g | ]}d | d t f‘qS ©z%déd   ©Úfloat©Ú.0ry   r@   r@   rA   Ú
<listcomp>’  s     z$test_version_2_0.<locals>.<listcomp>éô  éè  r   ©r   r   ©ÚversionT©ÚrecordÚalwaysr‹   r   é@ ©Úmax_header_size©r+   r   )r   r   r`   ra   r   rI   ÚwarningsÚcatch_warningsÚfilterwarningsÚUserWarningr   ÚcategoryÚseekÚreadlineÚlenÚARRAY_ALIGNrK   r   r   r]   )rN   rŽ   rŠ   ÚwÚheaderÚnr@   r@   rA   Ú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N}t ddt¡ tj	|d|j
|jd d
}t|d jtkƒ ||d< | ¡  W 5 Q R X tj	|ddd}t||ƒ d S )Nc                 S   s   g | ]}d | d t f‘qS r²   r´   r¶   r@   r@   rA   r¸   «  s     z+test_version_2_0_memmap.<locals>.<listcomp>r¹   rº   r   zversion2_01.npyzversion2_02.npyrh   rÄ   )ri   r   rj   r½   r»   .rm   rÁ   )ri   rÃ   Tr¾   rÀ   r‹   r   )r   r`   ra   ro   rp   rq   r   r]   r   rv   r   rj   rw   r   rÅ   rÆ   rÇ   rÈ   r   rÉ   )rx   rŽ   rŠ   Ztf1Ztf2r{   rÎ   r@   r@   rA   Útest_version_2_0_memmap¨  s6     ÿ ÿ
 ÿrÒ   Ú	mmap_moderm   c              	   C   sÔ   t j | d¡}tjddd d d}tjtdd t ||¡ W 5 Q R X tj	t
d	d tj||d
 W 5 Q R X tj	t
d	d tj||dd W 5 Q R X tj||dd}t||ƒ tj||dd}t||ƒ d S )Nzlarge_header.npyr+   úi,é'  ry   r   ú.*format 2.0©ÚmatchúHeader.*large)rÓ   é N  )rÓ   rÃ   T)rÓ   rG   é ¿ )ro   rp   rq   r`   r    ÚpytestÚwarnsrÈ   r¬   Úraisesr]   r~   r   )rx   rÓ   rN   rM   Úresr@   r@   rA   Ú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 5 Q R X tj	t
d
d t |¡d  W 5 Q R X tj	t
d
d tj|ddd  W 5 Q R X tj|ddd }t||ƒ tj|ddd }t||ƒ d S )Nzlarge_header.npzr+   rÔ   rÕ   ry   r   rÖ   r×   r^   rÙ   rM   rÚ   rÂ   TrF   rÛ   )ro   rp   rq   r`   r    rÜ   rÝ   rÈ   r‘   rÞ   r]   r~   r   )rx   rN   rM   rß   r@   r@   rA   Ú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 | |¡ ddddd	g}|D ]*}ttd
ƒ tj| ||d W 5 Q R X qvd S )Nr+   rÄ   r¼   r»   )r+   r+   )r   r   )r   r+   r   )éÿ   râ   z we only support format version.*)r   r`   Úaranger   rI   r   r]   )rN   rM   Zbad_versionsr½   r@   r@   rA   Ú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   r`   ra   rµ   r   rI   rÊ   Z
read_magicr   ÚtellÚ	MAGIC_LEN)Ús1Ús2rM   Zversion1Zversion2r@   r@   rA   Útest_read_magic  s    



rë   c                  C   s$   t D ]} t| ƒ}tttj|ƒ qd S rR   )Úmalformed_magicr   r   r]   r   rK   ©ÚmagicrN   r@   r@   rA   Útest_read_magic_bad_magic1  s    rï   c                  C   s(   t t D ]} t| ƒ}tttj|ƒ qd S rR   )Úbad_version_magicrì   r   r   r]   r   rK   rí   r@   r@   rA   Útest_read_version_1_0_bad_magic7  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   r+   é   )r   r]   r   rî   r@   r@   r@   rA   Ú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©rj   rk   r¯   A   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrò   r¯   )r   Útupler   Úwrite_array_header_1_0r   r]   ©ÚsrŠ   r@   r@   rA   Útest_large_headerD  s    rù   c                  C   sr   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   r`   ra   rµ   r   rI   rÊ   rè   Úread_array_header_1_0r   rç   rÍ   ©rø   rM   rj   Úfortranr   r@   r@   rA   Útest_read_array_header_1_0N  s    rý   c                  C   sr   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   r`   ra   rµ   r   rI   rÊ   rè   Zread_array_header_2_0r   rç   rÍ   rû   r@   r@   rA   Útest_read_array_header_2_0[  s    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), }                    
©r+   r   Fr   r   )rj   rk   r¯   Zextrakey)r   r   r]   r   rú   rö   r÷   r@   r@   rA   Útest_bad_headerh  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	k
rh   t d	¡ Y nX t
|d
ƒ&}| d¡ t d¡}t ||¡ W 5 Q R X t
|dƒ}| d¡ t |¡}W 5 Q R X t||ƒ d S )NÚwin32Úcygwinz)Unknown if Windows has sparse filesystemsZsparse_filer   Útruncatez-sZ
5368709120zCould not create 5GB large filerg   l        r6   rl   )ÚsysÚplatformrÜ   Úskipro   rp   rq   Ú
subprocessÚ
check_callÚ	Exceptionrr   rÊ   r`   rã   r¬   r~   r   )rx   Ztf_nameÚsprN   rŠ   rm   r@   r@   rA   Útest_large_file_support…  s     



r  zflaky on PyPyztest requires 64-bit systeml        )Z
free_bytesc              	   C   s¢   d}zt j|t jd}W n tk
r6   t d¡ Y nX tj | d¡}t	|dƒ}t j
||d W 5 Q R X ~t	|dƒ}t  |¡d }W 5 Q R X |j|ksžt‚d S )	N)i   @r   r   zCould not create large fileZlarge_archiverg   r^   rl   rM   )r`   ÚemptyÚuint8ÚMemoryErrorrÜ   r  ro   rp   rq   rr   r‘   r~   rj   ÚAssertionError)rx   rj   r„   r–   rN   Znew_ar@   r@   rA   Útest_large_archivež  s    r  c              	   C   s2   t j | d¡}t |¡ t |¡}W 5 Q R X d S )Nznothing.npz)ro   rp   rq   r`   r‘   r~   )rx   r–   Znpsr@   r@   rA   Útest_empty_npz¹  s    
r  c              
   C   s¾   t jddddgdtfdtfgd}tj | d¡}t|dƒ}tj||dd	 W 5 Q R X t|d
ƒ}t 	|¡}W 5 Q R X t
||ƒ t|dƒ*}ttƒ tj||d d	 W 5 Q R X W 5 Q R X d S )N)r+   r   r   Úintu   æ•´å½¢r   zunicode.npyrg   )r   r   r¼   rl   )r`   r    r  ro   rp   rq   rr   r   rI   rK   r   r   rÈ   )rx   rM   r–   rN   rP   r@   r@   rA   Útest_unicode_field_namesÁ  s&    üþû	

r  c                  C   sœ   dddgdddgdddgdddgfD ]r\} }}dd	„ t tjƒD ƒD ]R}tƒ }t || r^d
|fn|d
f| t d| tfg¡dœ¡ t| 	¡ ƒ|ksBt
‚qBq$d S )NFé   é€   é   éÀ   Té   c                 S   s   g | ]}d | ‘qS )r   r@   r¶   r@   r@   rA   r¸   Ü  s     z+test_header_growth_axis.<locals>.<listcomp>r   ú rô   )r   r   ZGROWTH_AXIS_MAX_DIGITSr   rö   r`   r   r  rÌ   rJ   r  )Zis_fortran_arrayZdtype_spaceZexpected_header_lengthr=   rz   r@   r@   rA   Útest_header_growth_axisØ  s       ÿýr  zdt, failZS3ZsomeÚstuff)ÚmetadataZsubarrayr   )é   r   r   zPyPy bug in error formattingc              	   C   s¢   t jd| d}tƒ }ttƒ t  ||¡ W 5 Q R X | d¡ |rbttƒ t  	|¡ W 5 Q R X n<t  	|¡}ddl
m} t||ƒ ||jƒst‚||jƒržt‚d S )Nr   r   r   )Ú_has_metadata)r`   ra   r   r   rÈ   r¬   rÊ   r   r]   r~   Znumpy.lib.formatr  r   r   r  )rŽ   ZfailrM   ÚbufrP   r  r@   r@   rA   Útest_metadata_dtypeæ  s    




r!  )kÚ__doc__r  ro   rÅ   rÜ   Úior   Únumpyr`   Znumpy.testingr   r   r   r   r   r   r	   Znumpy.testing._private.utilsr
   Z	numpy.libr   r  Zint8Zuint16Zint16Zuint32Zint32Zuint64Zint64Zfloat32Zfloat64Z	complex64Z
complex128r[   ZscalarsrW   ZscalarZendianr   Znewbyteorderrã   ZastypeÚbasicÚextendr    ZreshapeÚTZPdescrZPbufferTZNdescrZNbufferTr   rX   r7   rQ   rS   rT   rV   rZ   r\   r_   rd   ÚmarkZskipifZslowr|   r‚   r°   Zdt2Zdt3Zdt4Zdt5Zdt6Zparametrizer’   Zxfailr—   r«   r­   r  r±   rÑ   rÒ   rà   rá   rä   rð   rì   rë   rï   rñ   ró   rù   rý   rþ   r  r  Zintpr   r  r  r  r  rµ   Úimplementationr½   r!  r@   r@   r@   rA   Ú<module>   sÄ    $ó
ô
ýýü÷
þï&   ÿ&   ÿúû
	
ÿ ÿ

/þýüýûú


ýûø
ýþø
õòÿã1


ú	ù

ÿÿÿ
 ÿþú
ÿ