a
    Lªfa   ã                   @   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²g d¢Z/ddgddgddggdfddgddgddggdfgZ0dddddg d¢fddgfdd d!d"gfd#d$gZ1ddgd%dd&d%d'gddgd(dgfd)d*fd+d,ddgddggdfddgd-dd.d-d/gddgdd(gfd0d1fd2d3ddgddggdfgZ2ej,e0e &e/¡ 'd4¡d	ej,e2e &e1¡ 'd4¡d	ej,e0e &e/¡ 'd5¡d	ej,e2e &e1¡ 'd5¡d	ej3d(d6gd	gZ4G d7d8„ d8eƒZ5d9d:„ Z6d;d<„ Z7d=d>„ Z8d?d@„ Z9dAdB„ Z:dCdD„ Z;dEdF„ Z<dGdH„ Z=ej>j?edIdJej>j@dKdL„ ƒƒZAdMdN„ ZBej&dOd*dPZCe &dQdRgdSdSgd(dTgdUœ¡ZDe &dVdWgdSeDgdXœ¡ZEe &g dY¢dSgd dXœ¡ZFe &dQdRgdSdSgd(dTgdZd[gd\œ¡ZGe &g g dd]œ¡ZHej> Id^eCeDeEeFeGeHg¡d_d`„ ƒZJej>j?ejKdakdbdJej>jLedcdJddde„ ƒƒZMdfdg„ ZNdhdi„ ZOej> Id^e &ej&dQejfdRejfdVejfgd*dPdj¡e &dke &dQdRgdldlgddgddmœdj¡dnfg¡e &dog¡e &dke &e &e &dQdRgdldlgddgddmœ¡djf¡dnf¡fg¡e &dQe &e &e &e &dQePfdRe &dQdRgdldlgddgddmœ¡fg¡djf¡dnf¡dpf¡fg¡g¡dqdr„ ƒZQdsdt„ ZRej>j?edIdJdudv„ ƒZSej> Idwdxdg¡dydz„ ƒZTd{d|„ ZUd}d~„ ZVg d¢ZWg d€¢ZXdd‚„ ZYdƒd„„ ZZd…d†„ Z[d‡dˆ„ Z\d‰dŠ„ Z]d‹dŒ„ Z^ddŽ„ Z_dd„ Z`d‘d’„ Zaej>j?ed“dJej>j?e &ejb¡jcdk d”dJej>j@ed•d–d—d˜„ ƒƒƒƒZdd™dš„ Zed›dœ„ Zfddž„ Zgej> IdŸe &dQdRgehej&d d¡d¢id£gdXœ¡d*fej&ePd¡d¢id£d1fej&d¤ePd¥ffgd¡d¢id£d1fe &dQdRgehe &dVgej&ePi d£gdXœ¡gdXœ¡d1fg¡ej>j?eo¼ejijjd¦kd§dJd¨d©„ ƒƒZkd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      @é	   r   ZInfo)ÚvalueÚc16)Úy2r   ZInfo2)©ÚnameÚS2)r"   r#   r   )Zy3r   r   )Zz3Zu4r   r%   )Zz2Úb1)Úcolorr'   Úinfo)ÚNameZU8)ÚValuer#   r   r   ù              @Únny              @é   ÚNNTÚcc)r0   r-   ù              @Zooy              @ÚOOFÚdd)r3   r2   ú<ú>)Ú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Úsizer<   ©Ú	__class__© úT/var/www/ai-form-bot/venv/lib/python3.9/site-packages/numpy/lib/tests/test_format.pyr?   ‘  s    zBytesIOSRandomSize.read)N)Ú__name__Ú
__module__Ú__qualname__r?   Ú__classcell__rD   rD   rB   rE   r;     s   r;   c                 C   s0   t ƒ }t || ¡ t | ¡ ƒ}tj|dd}|S )NT©Úallow_pickle©r   r   Úwrite_arrayÚgetvalueÚ
read_array©ÚarrÚfÚf2Úarr2rD   rD   rE   Ú	roundtrip—  s
    rU   c                 C   s,   t ƒ }t || ¡ t| ¡ ƒ}t |¡}|S ©N)r   r   rM   r;   rN   rO   rP   rD   rD   rE   Úroundtrip_randsizeŸ  s
    
rW   c                 C   s4   t ƒ }t || ¡ t | ¡ dd… ƒ}t |¡}|S )Nr   r   rL   rP   rD   rD   rE   Úroundtrip_truncated§  s
    
rX   c                 C   s   t | |kƒ d S rV   )r   )Zo1Úo2rD   rD   rE   Úassert_equal_°  s    rZ   c                  C   s$   t t D ]} t| ƒ}t| |ƒ qd S rV   )Úbasic_arraysÚrecord_arraysrU   r   ©rQ   rT   rD   rD   rE   Útest_roundtrip´  s    r^   c                  C   s.   t t D ] } | jtkrt| ƒ}t| |ƒ qd S rV   )r[   r\   r   ÚobjectrW   r   r]   rD   rD   rE   Útest_roundtrip_randsizeº  s    
r`   c                  C   s$   t D ]} | jtkrttt| ƒ qd S rV   )r[   r   r_   r   Ú
ValueErrorrX   ©rQ   rD   rD   rE   Útest_roundtrip_truncatedÁ  s    
rc   c                  C   s4   t jdt  ttjd f¡d} t| ƒ}t| |ƒ d S )Nr/   r   )ÚnpÚonesr   Ústrr   ÚBUFFER_SIZErU   r   )Zlong_str_arrZlong_str_arr2rD   rD   rE   Útest_long_strÇ  s    rh   zmemmap doesn't work correctly)Úreasonc           
   	   C   sH  t tt ƒD ]4\}}|jjr qtj | d|› d¡}tj | d|› d¡}t|dƒ}t	 
||¡ W d   ƒ n1 sx0    Y  |jjo’|jj }t	j|d|j|j|d}||d< | ¡  t|dƒ}| ¡ }W d   ƒ n1 sä0    Y  t|dƒ}| ¡ }	W d   ƒ n1 s0    Y  t||	ƒ t	j|d	d
}| ¡  qd S )NÚnormalz.npyZmemmapÚwbúw+)Úmoder   ÚshapeÚfortran_order.ÚrbÚr)rm   )Ú	enumerater[   r\   r   Z	hasobjectÚosÚpathÚjoinÚopenr   rM   ÚflagsÚf_contiguousÚc_contiguousÚopen_memmaprn   Úflushr?   rZ   )
ÚtmpdirÚirQ   ZnfnZmfnÚfpro   ÚmaZnormal_bytesZmemmap_bytesrD   rD   rE   Útest_memmap_roundtripÎ  s*    *ÿÿ&(
r€   c                 C   sj   t j dd¡}tj | d¡}t j||d t  |¡}|d }W d   ƒ n1 sR0    Y  t||ƒ d S )NéÈ   zcompressed.npzrb   rQ   )	rd   r<   Zrandrs   rt   ru   Zsavez_compressedÚloadr   )r|   rQ   Únpz_fileÚnpzÚarr1rD   rD   rE   Útest_compressed_roundtripî  s    &r†   z
i1, i4, i1)ÚalignÚaÚbr   é   )ÚnamesÚformatsÚoffsetsr7   Úd)r‹   rŒ   )rˆ   Ú r‰   ZaaZ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 sj0    Y  t||ƒ d S )Nr   r:   zaligned.npzrb   rQ   )	rd   ÚzerosÚrangers   rt   ru   Úsavezr‚   r   )r|   r’   rQ   r}   rƒ   r„   r…   rD   rD   rE   Ú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 sJ0    Y  t
|t d¡ƒ d S )Nzwin64python2.npyÚdatazReading.*this warning\.©Úmatchr   )rs   rt   ru   ÚdirnameÚ__file__ÚpytestÚwarnsÚUserWarningrd   r‚   r   re   )Úfnamert   r˜   rD   rD   rE   Ú%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   )zpy2-np0-objarr.npyúpy2-objarr.npyúpy2-objarr.npzzpy3-objarr.npyzpy3-objarr.npz)ÚbytesÚlatin1T©rK   Úencodingz.npzr   r¥   Úpy2r   r   rJ   F)rK   Úfix_importsr§   )rs   rt   ru   r›   rœ   rd   Úarrayr”   r_   r‚   ÚendswithÚcloseÚ
startswithr   Ú
isinstancerf   r   Úencoder¤   r   ÚUnicodeErrorÚ__getitem__ÚImportError)Údata_dirÚexpectedr    rt   r§   Zdata_fr˜   rD   rD   rE   Útest_pickle_python2_python3  sJ    
ÿþ




ÿ

ÿ
þ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 sz0    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   rJ   )rs   rt   ru   r›   rœ   r   ra   rd   r‚   r±   Úsaverª   r_   )r|   r³   rt   rR   rD   rD   rE   Útest_pickle_disallowK  s    
ÿ,ÿr·   )r   r   Úi1)r‹   rŒ   r   r‘   )r    )r   r8   r   r9   c                 C   s8   t  | j¡}t|| ƒ t d| ¡}t|ƒ}t||ƒ d S )Nr   )r   Zdescr_to_dtypeÚdescrrZ   rd   r“   rU   r   )r’   Údt1r…   rT   rD   rD   rE   Ú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 s„0    Y  |  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©Ú.0r}   rD   rD   rE   Ú
<listcomp>•  ó    z$test_version_2_0.<locals>.<listcomp>éô  éè  r   ©r   r   ©ÚversionT©ÚrecordÚalwaysr   r   é@ ©Úmax_header_size©r/   r   )r   r”   rd   re   r   rM   ÚwarningsÚcatch_warningsÚfilterwarningsrŸ   r   ÚcategoryÚseekÚreadlineÚlenÚARRAY_ALIGNrO   r   r   ra   )rR   r’   rŽ   ÚwÚheaderÚnrD   rD   rE   Útest_version_2_0’  s    0


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X}t ddt¡ tj	|d|j
|jd d
}t|d jtu ƒ ||d< | ¡  W d   ƒ n1 s0    Y  tj	|ddd}t||ƒ d S )Nc                 S   s   g | ]}d | d t f‘qS r¼   r¾   rÀ   rD   rD   rE   rÂ   ®  rÃ   z+test_version_2_0_memmap.<locals>.<listcomp>rÄ   rÅ   r   zversion2_01.npyzversion2_02.npyrl   rÏ   )rm   r   rn   rÈ   rÆ   .rq   rÌ   )rm   rÎ   TrÉ   rË   r   r   )r”   rd   re   rs   rt   ru   r   ra   r   rz   r   rn   r{   r   rÐ   rÑ   rÒ   rŸ   r   rÓ   )r|   r’   rŽ   Ztf1Ztf2r   rØ   rD   rD   rE   Útest_version_2_0_memmap«  s0    ÿÿ
ÿ(rÜ   Ú	mmap_moderq   c                 C   s  t j | d¡}tjddd d d}tjtdd t ||¡ W d   ƒ n1 sT0    Y  tj	t
d	d tj||d
 W d   ƒ n1 s0    Y  tj	t
d	d  tj||dd W d   ƒ n1 sÎ0    Y  tj||dd}t||ƒ tj||dd}t||ƒ d S )Nzlarge_header.npyr/   úi,é'  r}   r   ú.*format 2.0r™   úHeader.*large)rÝ   é N  )rÝ   rÎ   T)rÝ   rK   é ¿ )rs   rt   ru   rd   rª   r   rž   rŸ   r¶   Úraisesra   r‚   r   )r|   rÝ   rR   rQ   ÚresrD   rD   rE   Ú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 sV0    Y  tj	t
d
d t |¡d  W d   ƒ n1 s’0    Y  tj	t
d
d" tj|ddd  W d   ƒ n1 sÒ0    Y  tj|ddd }t||ƒ tj|ddd }t||ƒ d S )Nzlarge_header.npzr/   rÞ   rß   r}   r   rà   r™   rb   rá   rQ   râ   rÍ   TrJ   rã   )rs   rt   ru   rd   rª   r   rž   rŸ   r•   rä   ra   r‚   r   )r|   rR   rQ   rå   rD   rD   rE   Útest_huge_header_npzÞ  s    ,,0
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   ƒ qp1 s¤0    Y  qpd S )Nr/   rÏ   rÇ   rÆ   ))r/   r/   )r   r   )r   r/   r   )éÿ   rè   z we only support format version.*)r   rd   Úaranger   rM   r   ra   )rR   rQ   Zbad_versionsrÈ   rD   rD   rE   Ú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   “NUMPYrÃ   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   rd   re   r¿   r   rM   rÔ   Z
read_magicr   ÚtellÚ	MAGIC_LEN)Ús1Ús2rQ   Zversion1Zversion2rD   rD   rE   Útest_read_magic  s    



rð   c                  C   s$   t D ]} t| ƒ}tttj|ƒ qd S rV   )Úmalformed_magicr   r   ra   r   rO   ©ÚmagicrR   rD   rD   rE   Útest_read_magic_bad_magic4  s    rô   c                  C   s(   t t D ]} t| ƒ}tttj|ƒ qd S rV   )Úbad_version_magicrñ   r   r   ra   r   rO   rò   rD   rD   rE   Ú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   ra   r   ró   rD   rD   rD   rE   Ú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©rn   ro   r¹   A   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr÷   r¹   )r   Útupler   Úwrite_array_header_1_0r   ra   ©ÚsrŽ   rD   rD   rE   Útest_large_headerG  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   rd   re   r¿   r   rM   rÔ   rí   Úread_array_header_1_0r   rì   r×   ©rý   rQ   rn   Úfortranr   rD   rD   rE   Útest_read_array_header_1_0Q  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   rd   re   r¿   r   rM   rÔ   rí   Zread_array_header_2_0r   rì   r×   r   rD   rD   rE   Ú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   )rn   ro   r¹   Zextrakey)r   r   ra   r   rÿ   rû   rü   rD   rD   rE   Ú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	yf   t d	¡ Y n0 t
|d
ƒ0}| d¡ t d¡}t ||¡ W d   ƒ n1 s¨0    Y  t
|dƒ$}| d¡ t |¡}W d   ƒ n1 sæ0    Y  t||ƒ d S )NÚwin32Úcygwinz)Unknown if Windows has sparse filesystemsZsparse_filer   Útruncatez-sZ
5368709120zCould not create 5GB large filerk   l        r:   rp   )ÚsysÚplatformr   Úskiprs   rt   ru   Ú
subprocessÚ
check_callÚ	Exceptionrv   rÔ   rd   ré   r¶   r‚   r   )r|   Ztf_nameÚsprR   rŽ   rq   rD   rD   rE   Ú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y4   t d¡ Y n0 tj | d¡}t	|dƒ}t j
||d W d   ƒ n1 sr0    Y  ~t	|dƒ}t  |¡d }W d   ƒ n1 s¬0    Y  |j|ksÄJ ‚d S )	N)i   @r   r   zCould not create large fileZlarge_archiverk   rb   rp   rQ   )rd   ÚemptyÚuint8ÚMemoryErrorr   r  rs   rt   ru   rv   r•   r‚   rn   )r|   rn   rˆ   r    rR   Znew_arD   rD   rE   Útest_large_archive¡  s    ,,r  c                 C   sF   t j | d¡}t |¡ t |¡}W d   ƒ n1 s80    Y  d S )Nznothing.npz)rs   rt   ru   rd   r•   r‚   )r|   r    ZnpsrD   rD   rE   Útest_empty_npz¼  s    
r  c              	   C   s
  t jg d¢dtfdtfgd}tj | d¡}t|dƒ }tj||dd W d   ƒ n1 s\0    Y  t|d	ƒ}t 	|¡}W d   ƒ n1 s0    Y  t
||ƒ t|dƒH}ttƒ  tj||d d W d   ƒ n1 sÞ0    Y  W d   ƒ n1 sü0    Y  d S )
N)©r/   r   r  r  r  Úintu   æ•´å½¢r   zunicode.npyrk   )r   r   rÇ   rp   )rd   rª   r  rs   rt   ru   rv   r   rM   rO   r   r   rŸ   )r|   rQ   r    rR   rT   rD   rD   rE   Útest_unicode_field_namesÄ  s    
þû	.(

r  c                  C   s”   g d¢g d¢g d¢g d¢fD ]r\} }}dd„ t tjƒD ƒD ]R}tƒ }t || rVd|fn|df| t d| tfg¡d	œ¡ t| 	¡ ƒ|ks:J ‚q:qd S )
N)Fé   é€   )Fé   éÀ   )Tr  r  )Té   r  c                 S   s   g | ]}d | ‘qS )r   rD   rÀ   rD   rD   rE   rÂ   ß  rÃ   z+test_header_growth_axis.<locals>.<listcomp>r   ú rù   )
r”   r   ZGROWTH_AXIS_MAX_DIGITSr   rû   rd   r   r  rÖ   rN   )Zis_fortran_arrayZdtype_spaceZexpected_header_lengthrA   r~   rD   rD   rE   Ú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 d   ƒ n1 s>0    Y  | d¡ |rŠttƒ t  	|¡ W d   ƒ qÒ1 s~0    Y  nHt  	|¡}ddl
m} t||ƒ ||jƒ|jus¾J ‚||jƒ|ju sÒJ ‚d S )Nr   r   r   )Údrop_metadata)rd   re   r   r   rŸ   r¶   rÔ   r   ra   r‚   Znumpy.lib._utils_implr$  r   r   )r’   ZfailrQ   ÚbufrT   r$  rD   rD   rE   Útest_metadata_dtypeé  s    
*

*

r&  )lÚ__doc__r
  rs   rÐ   r   Úior   Únumpyrd   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scalarsr[   ZscalarZendianr   Znewbyteorderré   ZastypeÚbasicÚextendrª   ZreshapeÚTZPdescrZPbufferTZNdescrZNbufferTr“   r\   r;   rU   rW   rX   rZ   r^   r`   rc   rh   ÚmarkZskipifZslowr€   r†   rº   Zdt2Zdt3Zdt4Zdt5Zdt6Zparametrizer–   Úversion_infoZ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&  rD   rD   rD   rE   Ú<module>   sŒ    $ó
ô
ý
÷
þï&ÿ&ÿúû
	
ÿÿ
/þýüýûú


ýûø
ýþø
õòÿã1




ÿÿÿ
ÿþú
ÿ