U
    M»{j?•  ã                   @   s(  d Z ddlZddlZddlZddlZddlmZ ddlZddl	m
Z
mZmZmZmZ ddlmZ ejejejejejejejejejejejejegZg ZeD ]€Z dD ]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Z,dddddddddgfdd gfd!d"d#d$gfddgZ-ddgd%dd&d%d'gddgd(dgfd)d*fd+d,ddgddggdfddgd-dd.d-d/gddgdd(gfd0d1fd2d3ddgddggdfgZ.ej(e,e "e+¡ #d4¡d�ej(e.e "e-¡ #d4¡d�ej(e,e "e+¡ #d5¡d�ej(e.e "e-¡ #d5¡d�ej/d(d6gd�gZ0G d7d8„ d8eƒZ1d9d:„ Z2d;d<„ Z3d=d>„ Z4d?d@„ Z5dAdB„ Z6dCdD„ Z7dEdF„ Z8dGdH„ Z9dIdJ„ Z:dKdL„ Z;ej"dMd*dN�Z<e "dOdPgdQdQgd(dRgdSœ¡Z=e "dTdUgdQe=gdVœ¡Z>e "dOdWdPgdQgd dVœ¡Z?e "dOdPgdQdQgd(dRgdXdYgdZœ¡Z@e "g g dd[œ¡ZAejB Cd\e<e=e>e?e@eAg¡d]d^„ ƒZDd_d`„ ZEdadb„ ZFdcdd„ ZGejB Cd\e "ej"dOejfdPejfdTejfgd*dN�de¡e "dfe "dOdPgdgdggddgddhœde¡difg¡e "djg¡e "dfe "e "e "dOdPgdgdggddgddhœ¡def¡dif¡fg¡e "dOe "e "e "e "dOeHfdPe "dOdPgdgdggddgddhœ¡fg¡def¡dif¡dkf¡fg¡g¡dldm„ ƒZIdndo„ ZJdpdq„ ZKdrds„ ZLdtdudvdwdxdygZMdzd{d|d}d~dd€gZNd�d‚„ ZOdƒd„„ ZPd…d†„ ZQd‡dˆ„ ZRd‰dŠ„ ZSd‹dŒ„ ZTd�dŽ„ ZUd�d�„ ZVd‘d’„ ZWejBjXe "ejY¡jZdk d“d”�ejBj[d•d–„ ƒƒZ\d—d˜„ Z]d™dš„ Z^ejB Cd›e "dOdPge_ej"dœd�džidŸ�gdVœ¡d*fej"eHd�džidŸ�d1fej"d eHd¡ffgd�džidŸ�d1fe "dOdPge_e "dTgej"eHi dŸ�gdVœ¡gdVœ¡d1fg¡d¢d£„ ƒZ`d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)Ú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Úsizer5   ©Ú	__class__© úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/numpy/lib/tests/test_format.pyr8   �  s    zBytesIOSRandomSize.read)N)Ú__name__Ú
__module__Ú__qualname__r8   Ú__classcell__r=   r=   r;   r>   r4   �  s   r4   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=   r>   Ú	roundtrip–  s
    rN   c                 C   s,   t ƒ }t || ¡ t| ¡ ƒ}t |¡}|S ©N)r   r   rF   r4   rG   rH   rI   r=   r=   r>   Úroundtrip_randsizež  s
    
rP   c                 C   s4   t ƒ }t || ¡ t | ¡ dd… ƒ}t |¡}|S )Nr   r   rE   rI   r=   r=   r>   Úroundtrip_truncated¦  s
    
rQ   c                 C   s   t | |kƒ d S rO   )r   )Zo1Úo2r=   r=   r>   Úassert_equal_¯  s    rS   c                  C   s$   t t D ]} t| ƒ}t| |ƒ qd S rO   )Úbasic_arraysÚrecord_arraysrN   r   ©rJ   rM   r=   r=   r>   Útest_roundtrip³  s    rW   c                  C   s.   t t D ] } | jtkrt| ƒ}t| |ƒ qd S rO   )rT   rU   r
   ÚobjectrP   r   rV   r=   r=   r>   Útest_roundtrip_randsize¹  s    
rY   c                  C   s$   t D ]} | jtkrttt| ƒ qd S rO   )rT   r
   rX   r   Ú
ValueErrorrQ   ©rJ   r=   r=   r>   Ú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_SIZErN   r   )Zlong_str_arrZlong_str_arr2r=   r=   r>   Útest_long_strÆ  s    ra   c           
   
   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©re   )Ú	enumeraterT   rU   r
   Z	hasobjectÚosÚpathÚjoinÚopenr   rF   ÚflagsÚf_contiguousÚc_contiguousÚopen_memmaprf   Úflushr8   rS   )
ÚtmpdirÚirJ   ZnfnZmfnÚfprg   ÚmaZnormal_bytesZmemmap_bytesr=   r=   r>   Útest_memmap_roundtripÍ  s,    ÿ ÿ
ry   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[   rJ   )	r]   r5   Zrandrl   rm   rn   Zsavez_compressedÚloadr   )ru   rJ   Únpz_fileÚnpzÚarr1r=   r=   r>   Útest_compressed_roundtripë  s    r   z
i1, i4, i1)ÚalignÚaÚbr   é   )ÚnamesÚformatsÚoffsetsr0   Ú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   r3   zaligned.npzr[   rJ   )	r]   ÚzerosÚrangerl   rm   rn   Úsavezr{   r   )ru   r‹   rJ   rv   r|   r}   r~   r=   r=   r>   Útest_load_padded_dtype  s    r�   c                  C   s:   d} t j t j t¡d| ¡}t |¡}t|t d¡ƒ d S )Nzwin64python2.npyÚdatar   )	rl   rm   rn   ÚdirnameÚ__file__r]   r{   r   r^   )Úfnamerm   r�   r=   r=   r>   Ú%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©rD   Úencodingz.npzr   r˜   Úpy2r   r   rC   F)rD   Úfix_importsrš   )rl   rm   rn   r‘   r’   r]   Úarrayr�   rX   r{   ÚendswithÚcloseÚ
startswithr   Ú
isinstancer_   r   Úencoder—   r   ÚUnicodeErrorÚ__getitem__ÚImportError)Údata_dirÚexpectedr“   rm   rš   Zdata_fr�   r=   r=   r>   Ú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	   rC   )rl   rm   rn   r‘   r’   r   rZ   r]   r{   r¤   Úsaver�   rX   )ru   r¦   rm   rK   r=   r=   r>   Útest_pickle_disallowD  s    
 ÿÿrª   )r   r   Úi1)r„   r…   r†   rŠ   )r   )r   r1   r   r2   c                 C   s8   t  | j¡}t|| ƒ t d| ¡}t|ƒ}t||ƒ d S )Nr   )r   Zdescr_to_dtypeÚdescrrS   r]   rŒ   rN   r   )r‹   Údt1r~   rM   r=   r=   r>   Útest_descr_to_dtypeS  s
    2
r®   c               	   C   sÖ   t ƒ } dd„ tdƒD ƒ}tjd|d�}tj| |dd� tjdd	��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 | ¡}t||ƒ tttj| |dƒ d S )Nc                 S   s   g | ]}d | d t f‘qS ©z%déd   ©Úfloat©Ú.0rv   r=   r=   r>   Ú
<listcomp>Ž  s     z$test_version_2_0.<locals>.<listcomp>éô  éè  r	   ©r   r   ©ÚversionT©ÚrecordÚalwaysrˆ   r   ©r(   r   )r   r�   r]   r^   r   rF   ÚwarningsÚcatch_warningsÚfilterwarningsÚUserWarningr   ÚcategoryÚseekÚreadlineÚlenÚARRAY_ALIGNrH   r   r   rZ   )rK   r‹   r‡   ÚwÚheaderÚnr=   r=   r>   Útest_version_2_0‹  s    



rË   c              	   C   s  dd„ t dƒD ƒ}tjd|d�}tj | d¡}tj | d¡}tttj	|d|j
|jd	d
� tj	|d|j
|jdd
�}||d< | ¡  tj	|dd�}t||ƒ tjdd��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�}t||ƒ d S )Nc                 S   s   g | ]}d | d t f‘qS r¯   r±   r³   r=   r=   r>   rµ   ¦  s     z+test_version_2_0_memmap.<locals>.<listcomp>r¶   r·   r	   zversion2_01.npyzversion2_02.npyrd   r¾   )re   r
   rf   rº   r¸   .ri   rj   Tr»   r½   rˆ   r   )r�   r]   r^   rl   rm   rn   r   rZ   r   rs   r
   rf   rt   r   r¿   rÀ   rÁ   rÂ   r   rÃ   )ru   r‹   r‡   Ztf1Ztf2rx   rÈ   r=   r=   r>   Útest_version_2_0_memmap¤  s6     ÿ ÿ
 ÿ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   rF   r   rZ   )rK   rJ   Zbad_versionsrº   r=   r=   r>   Ú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]   r^   r²   r   rF   rÄ   Z
read_magicr   ÚtellÚ	MAGIC_LEN)Ús1Ús2rJ   Zversion1Zversion2r=   r=   r>   Útest_read_magicï  s    



rÖ   c                  C   s$   t D ]} t| ƒ}tttj|ƒ qd S rO   )Úmalformed_magicr   r   rZ   r   rH   ©ÚmagicrK   r=   r=   r>   Útest_read_magic_bad_magic  s    rÚ   c                  C   s(   t t D ]} t| ƒ}tttj|ƒ qd S rO   )Úbad_version_magicr×   r   r   rZ   r   rH   rØ   r=   r=   r>   Ú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   r(   é   )r   rZ   r   rÙ   r=   r=   r=   r>   Útest_bad_magic_args  s    rÞ   c                  C   sF   t ƒ } dddœ}t | |¡ t ƒ } dddd dœ}tttj| |ƒ d S )Nr(   r   )r�   r‚   A   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrÝ   )r�   r‚   r0   )r   r   Úwrite_array_header_1_0r   rZ   ©Úsr‡   r=   r=   r>   Útest_large_header  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]   r^   r²   r   rF   rÄ   rÓ   Úread_array_header_1_0r   rÒ   rÇ   ©rá   rJ   rf   Úfortranr
   r=   r=   r>   Útest_read_array_header_1_0!  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]   r^   r²   r   rF   rÄ   rÓ   Zread_array_header_2_0r   rÒ   rÇ   rä   r=   r=   r>   Ú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| ƒ dddœ}t ƒ } t | |¡ tttj| ƒ dddddœ}t ƒ } t | |¡ tttj| ƒ d S )	Nó   1s    ©r(   r   r   )rf   r¬   Fr   )rf   rg   r¬   Zextrakey)r   r   rZ   r   rã   rß   rà   r=   r=   r>   Útest_bad_header;  s(    ÿýrê   c              	   C   sØ   t jdkst jdkrt d¡ tj | d¡}zdd l}| ddd|g¡ W n t	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 filerc   l        r3   rh   )ÚsysÚplatformÚpytestÚskiprl   rm   rn   Ú
subprocessÚ
check_callÚ	Exceptionro   rÄ   r]   rÎ   r©   r{   r   )ru   Ztf_nameÚsprK   r‡   ri   r=   r=   r>   Útest_large_file_supportV  s     



rö   ztest requires 64-bit system)Úreasonc              	   C   sž   zt jdt jd�}W n tk
r2   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 t|j|jkƒ d S )	N)i   @r   r	   zCould not create large fileZlarge_archiverc   r[   rh   rJ   )r]   ÚemptyÚuint8ÚMemoryErrorrð   rñ   rl   rm   rn   ro   rŽ   r{   r   rf   )ru   r�   r“   rK   Znew_ar=   r=   r>   Útest_large_archiveo  s    rû   c              	   C   s2   t j | d¡}t |¡ t |¡�}W 5 Q R X d S )Nznothing.npz)rl   rm   rn   r]   rŽ   r{   )ru   r“   Znpsr=   r=   r>   Ú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.npyrc   )r   r   r¹   rh   )r]   r�   rý   rl   rm   rn   ro   r   rF   rH   r   r   rÂ   )ru   rJ   r“   rK   rM   r=   r=   r>   Útest_unicode_field_names�  s&    üþû	

rþ   zdt, failZS3ZsomeÚstuff)ÚmetadataZsubarrayr   c              	   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ƒs�t‚||jƒržt‚d S )Nr   r	   r   )Ú_has_metadata)r]   r^   r   r   rÂ   r©   rÄ   r   rZ   r{   Znumpy.lib.formatr  r   r
   ÚAssertionError)r‹   ZfailrJ   ÚbufrM   r  r=   r=   r>   Útest_metadata_dtype¥  s    




r  )aÚ__doc__rî   rl   r¿   rð   Úior   Únumpyr]   Znumpy.testingr   r   r   r   r   Z	numpy.libr   rù   Zint8Zuint16Zint16Zuint32Zint32Zuint64Zint64Zfloat32Zfloat64Z	complex64Z
complex128rX   ZscalarsrT   ZscalarZendianr
   ZnewbyteorderrÎ   ZastypeÚbasicÚextendr�   ZreshapeÚTZPdescrZPbufferTZNdescrZNbufferTrŒ   rU   r4   rN   rP   rQ   rS   rW   rY   r\   ra   ry   r   r­   Zdt2Zdt3Zdt4Zdt5Zdt6ÚmarkZparametrizer�   r”   r¨   rª   rý   r®   rË   rÌ   rÏ   rÛ   r×   rÖ   rÚ   rÜ   rÞ   râ   ræ   rç   rê   rö   ZskipifZintprŠ   Zslowrû   rü   rþ   r²   r  r=   r=   r=   r>   Ú<module>   s¨    ó
ô
ýýü÷
þï&   ÿ&   ÿúû
	
ÿ ÿ
/þýüýûú


ýûø
ýþø
õòÿã1
ú	ù

ÿÿÿ
 ÿþú
