o
    ðT·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mZmZmZ ddlmZ ddlmZ ejejejejejejejejejejej ej!e"gZ#g Z$e#D ]@Z%dD ];Z&e 'e%¡ (e&¡Z'e )d¡ *e'¡Z+e$ ,ej-g e'd	�ej-d
e'd	�e+e+ .d¡e+ .d¡j/e+ .d¡ddd…ddd…f g¡ q_q[g d¢Z0ddgddgddggdfddgddgddggdfgZ1dddddg d¢fddgfdd d!d"gfd#d$gZ2ddgd%dd&d%d'gddgd(dgfd)d*fd+d,ddgddggdfddgd-dd.d-d/gddgdd(gfd0d1fd2d3ddgddggdfgZ3ej-e1e 'e0¡ (d4¡d	�ej-e3e 'e2¡ (d4¡d	�ej-e1e 'e0¡ (d5¡d	�ej-e3e 'e2¡ (d5¡d	�ej4d(d6gd	�gZ5G d7d8„ d8eƒZ6d9d:„ Z7d;d<„ Z8d=d>„ Z9d?d@„ Z:dAdB„ Z;dCdD„ Z<dEdF„ Z=dGdH„ Z>ej?j@edIdJ�ej?jAdKdL„ ƒƒZBdMdN„ ZCej'dOd*dP�ZDe 'dQdRgdSdSgd(dTgdUœ¡ZEe 'dVdWgdSeEgdXœ¡ZFe 'g dY¢dSgd dXœ¡ZGe 'dQdRgdSdSgd(dTgdZd[gd\œ¡ZHe 'g g dd]œ¡ZIej? Jd^eDeEeFeGeHeIg¡d_d`„ ƒZKej?j@ejLdakdbdJ�ej?jMedcdJ�ddde„ ƒƒZNdfdg„ ZOdhdi„ ZPej? Jd^e 'ej'dQejfdRejfdVejfgd*dP�dj¡e 'dke 'dQdRgdldlgddgddmœdj¡dnfg¡e 'dog¡e 'dke 'e 'e 'dQdRgdldlgddgddmœ¡djf¡dnf¡fg¡e 'dQe 'e 'e 'e 'dQeQfdRe 'dQdRgdldlgddgddmœ¡fg¡djf¡dnf¡dpf¡fg¡g¡dqdr„ ƒZRdsdt„ ZSej?j@edIdJ�dudv„ ƒZTej? Jdwdxdg¡dydz„ ƒZUd{d|„ ZVd}d~„ ZWg d¢ZXg d€¢ZYd�d‚„ ZZdƒd„„ Z[d…d†„ Z\d‡dˆ„ Z]d‰dŠ„ Z^d‹dŒ„ Z_d�dŽ„ Z`d�d�„ Zad‘d’„ Zbej?j@ed“dJ�ej?j@e d”dJ�ej?jAed•d–�d—d˜„ ƒƒƒƒZcd™dš„ Zdd›dœ„ Zed�dž„ Zfej? Jd^e 'dQdRgegej'dŸd d¡id¢�gdXœ¡ej'eQd d¡id¢�ej'd£eQd¤ffgd d¡id¢�e 'dQdRgege 'dVgej'eQi d¢�gdXœ¡gdXœ¡g¡ej?j@e�oRejhjid¥kd¦dJ�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ÚIS_64BIT)Úrequires_memory)Úformatz<>iÜ  ©Údtypeé
   )é   é2   éÿÿÿÿé   )©ÚxÚi4©r   ©ÚyÚf8©r   r   ©ÚzÚu1é   g      @g      @é   é   g      @g      @é	   r   ÚInfo)ÚvalueÚc16)Úy2r   ÚInfo2)©ÚnameÚS2)r$   r%   r   )Úy3r   r   )Úz3Úu4r   r(   )Úz2Úb1)Úcolorr*   Úinfo)ÚNameÚU8)ÚValuer%   r   r   ù              @Únny              @é   ÚNNTÚcc)r8   r5   ù              @Úooy              @ÚOOFÚdd)r<   r:   ú<ú>)Úc©z<f8©é   r   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )ÚBytesIOSRandomSizeNc                    s    dd l }| d|¡}tƒ  |¡S )Nr   r7   )ÚrandomÚrandintÚsuperÚread)ÚselfÚsizerE   ©Ú	__class__© ú^/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/numpy/lib/tests/test_format.pyrH   ‘  s   zBytesIOSRandomSize.read©N)Ú__name__Ú
__module__Ú__qualname__rH   Ú__classcell__rM   rM   rK   rN   rD   �  s    rD   c                 C   s0   t ƒ }t || ¡ t | ¡ ƒ}tj|dd�}|S )NT©Úallow_pickle©r   r   Úwrite_arrayÚgetvalueÚ
read_array©ÚarrÚfÚf2Úarr2rM   rM   rN   Ú	roundtrip—  s
   r_   c                 C   s,   t ƒ }t || ¡ t| ¡ ƒ}t |¡}|S rO   )r   r   rW   rD   rX   rY   rZ   rM   rM   rN   Úroundtrip_randsizeŸ  s
   
r`   c                 C   s4   t ƒ }t || ¡ t | ¡ dd… ƒ}t |¡}|S )Nr   r   rV   rZ   rM   rM   rN   Úroundtrip_truncated§  s
   
ra   c                 C   s   t | |kƒ d S rO   )r   )Úo1Úo2rM   rM   rN   Úassert_equal_°  s   rd   c                  C   s$   t t D ]} t| ƒ}t| |ƒ qd S rO   )Úbasic_arraysÚrecord_arraysr_   r   ©r[   r^   rM   rM   rN   Útest_roundtrip´  s   þrh   c                  C   s.   t t D ]} | jtkrt| ƒ}t| |ƒ qd S rO   )re   rf   r   Úobjectr`   r   rg   rM   rM   rN   Útest_roundtrip_randsizeº  s   

€ýrj   c                  C   s$   t D ]} | jtkrttt| ƒ qd S rO   )re   r   ri   r   Ú
ValueErrorra   ©r[   rM   rM   rN   Útest_roundtrip_truncatedÁ  s
   
€þrm   c                  C   s4   t jdt  ttjd f¡d�} t| ƒ}t| |ƒ d S )Nr7   r   )ÚnpÚonesr   Ústrr   ÚBUFFER_SIZEr_   r   )Úlong_str_arrÚlong_str_arr2rM   rM   rN   Útest_long_strÇ  s   rt   zmemmap doesn't work correctly)Úreasonc           
   	   C   sD  t tt ƒD ]™\}}|jjrqtj | d|› d�¡}tj | d|› d�¡}t|dƒ�}t	 
||¡ W d   ƒ n1 s;w   Y  |jjoH|jj }t	j|d|j|j|d�}||d< | ¡  t|dƒ�}| ¡ }W d   ƒ n1 sqw   Y  t|dƒ�}| ¡ }	W d   ƒ n1 sŠw   Y  t||	ƒ t	j|d	d
�}| ¡  qd S )NÚnormalz.npyÚmemmapÚwbúw+)Úmoder   ÚshapeÚfortran_order.ÚrbÚr)rz   )Ú	enumeratere   rf   r   Ú	hasobjectÚosÚpathÚjoinÚopenr   rW   ÚflagsÚf_contiguousÚc_contiguousÚopen_memmapr{   ÚflushrH   rd   )
ÚtmpdirÚir[   ÚnfnÚmfnÚfpr|   ÚmaÚnormal_bytesÚmemmap_bytesrM   rM   rN   Útest_memmap_roundtripÎ  s2   ÿÿÿ
ÿ
ÿ

ær’   c                 C   sj   t j dd¡}tj | d¡}t j||d� t  |¡�}|d }W d   ƒ n1 s)w   Y  t||ƒ d S )NéÈ   zcompressed.npzrl   r[   )	rn   rE   Úrandr�   r‚   rƒ   Úsavez_compressedÚloadr   )rŠ   r[   Únpz_fileÚnpzÚarr1rM   rM   rN   Útest_compressed_roundtripî  s   
ÿrš   z
i1, i4, i1)ÚalignÚaÚbr   é   )ÚnamesÚformatsÚoffsetsr@   Úd)rŸ   r    )rœ   Ú r�   ÚaaÚbb)rŸ   r    r¡   Útitles)rŸ   r    ÚitemsizeÚdtc                 C   s‚   t  d|¡}tdƒD ]}|d ||< q
tj | d¡}t j||d� t  |¡�}|d }W d   ƒ n1 s5w   Y  t||ƒ d S )Nr   rC   zaligned.npzrl   r[   )	rn   ÚzerosÚranger�   r‚   rƒ   Úsavezr–   r   )rŠ   r¨   r[   r‹   r—   r˜   r™   rM   rM   rN   Útest_load_padded_dtype  s   
ÿr¬   )r   é   zsee gh-23988z!Emscripten NODEFS has a buggy dupc                  C   sh   d} t j t j t¡d| ¡}tjtdd�� t 	|¡}W d   ƒ n1 s%w   Y  t
|t d¡ƒ d S )Nzwin64python2.npyÚdatazReading.*this warning\.©Úmatchr   )r�   r‚   rƒ   ÚdirnameÚ__file__ÚpytestÚwarnsÚUserWarningrn   r–   r   ro   )Úfnamer‚   r®   rM   rM   rN   Ú%test_python2_python3_interoperability  s   ÿr·   c               	   C   s€  t j t j t¡d¡} tjd tddgtd�}dD ]¥}t j | |¡}dD ]T}tj	|d|d�}| 
d	¡r;|d
 }| ¡  n|}|dkri| d¡ritt|d tƒƒ t|d d… |d d… ƒ t|d  |¡|d ƒ q#tt|d tƒƒ t||ƒ q#| d¡r½| 
d	¡r©tj	|dd�}tt|jd
ƒ | ¡  tj	|dddd�}tt|jd
ƒ | ¡  qtttj	|dd� tttj	|dddd� qd S )Nr®   u   å„ªè‰¯s   ä¸�è‰¯r   )zpy2-np0-objarr.npyúpy2-objarr.npyúpy2-objarr.npzzpy3-objarr.npyzpy3-objarr.npz)ÚbytesÚlatin1T©rU   Úencodingz.npzr   r»   Úpy2r   r   rT   F)rU   Úfix_importsr½   )r�   r‚   rƒ   r±   r²   rn   Úarrayrª   ri   r–   ÚendswithÚcloseÚ
startswithr   Ú
isinstancerp   r   Úencoderº   r   ÚUnicodeErrorÚ__getitem__ÚImportError)Údata_dirÚexpectedr¶   r‚   r½   Údata_fr®   rM   rM   rN   Útest_pickle_python2_python3  sN   
ÿþ




ÿ

ÿ
þ€ßrÌ   c                 C   s¶   t j t j t¡d¡}t j |d¡}tttj|ddd� t j |d¡}tj|ddd��}tt|j	dƒ W d   ƒ n1 s=w   Y  t j | d¡}tttj
|tjd gtd	�dd
� d S )Nr®   r¸   Fr»   r¼   r¹   r   zpickle-disabled.npyr   rT   )r�   r‚   rƒ   r±   r²   r   rk   rn   r–   rÇ   ÚsaverÀ   ri   )rŠ   rÉ   r‚   r\   rM   rM   rN   Útest_pickle_disallowK  s   
ÿÿ
ÿrÎ   )r   r   Úi1)rŸ   r    r¡   r§   )r!   )r   rA   r   rB   c                 C   s8   t  | j¡}t|| ƒ t d| ¡}t|ƒ}t||ƒ d S )Nr   )r   Údescr_to_dtypeÚdescrrd   rn   r©   r_   r   )r¨   Údt1r™   r^   rM   rM   rN   Útest_descr_to_dtypeZ  s
   2
rÓ   c                  C   sî   t ƒ } dd„ tdƒD ƒ}tjd|d�}tj| |dd� tjdd	��}t d
dt	¡ t | |¡ t
|d jt	u ƒ W d   ƒ n1 sBw   Y  |  d¡ |  ¡ }t
t|ƒtj dkƒ |  d¡ tj| dd�}t||ƒ tttj| |dƒ d S )Nc                 S   ó   g | ]
}d | d t f‘qS ©z%déd   ©Úfloat©Ú.0r‹   rM   rM   rN   Ú
<listcomp>•  ó    z$test_version_2_0.<locals>.<listcomp>éô  éè  r   ©r   r   ©ÚversionT©ÚrecordÚalwaysr£   r   é@ ©Úmax_header_size©r7   r   )r   rª   rn   ro   r   rW   ÚwarningsÚcatch_warningsÚfilterwarningsrµ   r   ÚcategoryÚseekÚreadlineÚlenÚARRAY_ALIGNrY   r   r   rk   )r\   r¨   r¢   ÚwÚheaderÚnrM   rM   rN   Útest_version_2_0’  s    ý


rô   c              	   C   s,  dd„ t dƒD ƒ}tjd|d�}tj | d¡}tj | d¡}tttj	|d|j
|jd	d
� tj	|d|j
|jdd
�}||d< | ¡  tj	|ddd�}t||ƒ tjdd��,}t ddt¡ tj	|d|j
|jd d
�}t|d jtu ƒ ||d< | ¡  W d   ƒ n1 s‚w   Y  tj	|ddd�}t||ƒ d S )Nc                 S   rÔ   rÕ   r×   rÙ   rM   rM   rN   rÛ   ®  rÜ   z+test_version_2_0_memmap.<locals>.<listcomp>rÝ   rÞ   r   zversion2_01.npyzversion2_02.npyry   rè   )rz   r   r{   rá   rß   .r~   rå   )rz   rç   Trâ   rä   r£   r   )rª   rn   ro   r�   r‚   rƒ   r   rk   r   rˆ   r   r{   r‰   r   ré   rê   rë   rµ   r   rì   )rŠ   r¨   r¢   Útf1Útf2r�   rñ   rM   rM   rN   Útest_version_2_0_memmap«  s2   ÿÿ
ÿ
úr÷   Ú	mmap_moder~   c                 C   s  t j | d¡}tjddd d d�}tjtdd�� t ||¡ W d   ƒ n1 s*w   Y  tj	t
d	d�� tj||d
� W d   ƒ n1 sHw   Y  tj	t
d	d�� tj||dd� W d   ƒ n1 sgw   Y  tj||dd�}t||ƒ tj||dd�}t||ƒ d S )Nzlarge_header.npyr7   úi,é'  r‹   r   ú.*format 2.0r¯   úHeader.*large)rø   é N  )rø   rç   T)rø   rU   é ¿ )r�   r‚   rƒ   rn   rÀ   r³   r´   rµ   rÍ   Úraisesrk   r–   r   )rŠ   rø   r\   r[   ÚresrM   rM   rN   Útest_huge_headerÊ  s   ÿÿÿ
r  c                 C   s  t j | d¡}tjddd d d�}tjtdd�� tj||d	� W d   ƒ n1 s+w   Y  tj	t
d
d�� t |¡d  W d   ƒ n1 sIw   Y  tj	t
d
d�� tj|dd�d  W d   ƒ n1 siw   Y  tj|dd�d }t||ƒ tj|dd�d }t||ƒ d S )Nzlarge_header.npzr7   rù   rú   r‹   r   rû   r¯   rl   rü   r[   rý   ræ   TrT   rþ   )r�   r‚   rƒ   rn   rÀ   r³   r´   rµ   r«   rÿ   rk   r–   r   )rŠ   r\   r[   r   rM   rM   rN   Útest_huge_header_npzÞ  s   ÿÿÿ
r  c               	   C   s´   t ƒ } t d¡}tj| |dd� t | |¡ tj| |d d� t | |¡ tj| |dd� t | |¡ g d¢}|D ]}ttdƒ� tj| ||d� W d   ƒ n1 sRw   Y  q8d S )Nr7   rè   rà   rß   ))r7   r7   )r   r   )r   r7   r   )éÿ   r  z we only support format version.*)r   rn   Úaranger   rW   r   rk   )r\   r[   Úbad_versionsrá   rM   rM   rN   Útest_write_versionò  s"   
ÿþ€ÿr  )s   “NUMPYs   “NUMPY  s   “NUMPY s   “NUMPY s   “NUMPYs   “NUMPYÿÿ)s   ’NUMPY s    NUMPY s   “numpy s   “MATLB s   “NUMPYs   “NUMPYó    c                  C   s¢   t ƒ } t ƒ }tjdtd�}tj| |dd� tj||dd� |  d¡ | d¡ t | ¡}t |¡}t|dkƒ t|dkƒ t|  	¡ tj
kƒ t| 	¡ tj
kƒ d S )N©r   rž   r   rè   rà   rß   r   )r   rn   ro   rØ   r   rW   rí   Ú
read_magicr   ÚtellÚ	MAGIC_LEN)Ús1Ús2r[   Úversion1Úversion2rM   rM   rN   Útest_read_magic  s   



r  c                  C   s$   t D ]} t| ƒ}tttj|ƒ qd S rO   )Úmalformed_magicr   r   rk   r   rY   ©Úmagicr\   rM   rM   rN   Útest_read_magic_bad_magic4  s   þr  c                  C   s(   t t D ]} t| ƒ}tttj|ƒ qd S rO   )Úbad_version_magicr  r   r   rk   r   rY   r  rM   rM   rN   Útest_read_version_1_0_bad_magic:  s   þr  c                   C   sD   t ttjddƒ t ttjddƒ t ttjddƒ t ttjddƒ d S )Nr   r7   é   )r   rk   r   r  rM   rM   rM   rN   Útest_bad_magic_args@  s   r  c                  C   sL   t ƒ } tƒ dddœ}t | |¡ t ƒ } dd dfg|d< tttj| |ƒ d S )NFz<i8©r{   r|   rÑ   Á   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr  rÑ   )r   Útupler   Úwrite_array_header_1_0r   rk   ©Úsr¢   rM   rM   rN   Útest_large_headerG  s   r  c                  C   ór   t ƒ } tjdtd�}tj| |dd� |  tj¡ t | ¡\}}}t	|  
¡ tj dkƒ t	|||fddtfkƒ d S )Nr  r   rè   rà   r   F)r   rn   ro   rØ   r   rW   rí   r  Úread_array_header_1_0r   r
  rð   ©r  r[   r{   Úfortranr   rM   rM   rN   Útest_read_array_header_1_0Q  ó   r$  c                  C   r   )Nr  r   rß   rà   r   F)r   rn   ro   rØ   r   rW   rí   r  Úread_array_header_2_0r   r
  rð   r"  rM   rM   rN   Útest_read_array_header_2_0^  r%  r'  c                  C   sˆ   t ƒ } tttj| ƒ t dƒ} tttj| ƒ t dƒ} tttj| ƒ t dƒ} tttj| ƒ dddddœ}t ƒ } t | |¡ tttj| ƒ d S )	Nó   1s    s@   “NUMPY 6 {'descr': 'x', 'shape': (1, 2), }                    
©r7   r   Fr   r   )r{   r|   rÑ   Úextrakey)r   r   rk   r   r!  r  r  rM   rM   rN   Útest_bad_headerk  s$   ÿýr+  c                 C   sþ   t jdks
t jdkrt d¡ tj | d¡}zdd l}| ddd|g¡ W n t	y3   t d	¡ Y nw t
|d
ƒ�}| d¡ t d¡}t ||¡ W d   ƒ n1 sTw   Y  t
|dƒ�}| d¡ t |¡}W d   ƒ n1 ssw   Y  t||ƒ d S )NÚwin32Úcygwinz)Unknown if Windows has sparse filesystemsÚsparse_filer   Útruncatez-sÚ
5368709120zCould not create 5GB large filerx   l        rC   r}   )ÚsysÚplatformr³   Úskipr�   r‚   rƒ   Ú
subprocessÚ
check_callÚ	Exceptionr„   rí   rn   r  rÍ   r–   r   )rŠ   Útf_nameÚspr\   r¢   r~   rM   rM   rN   Útest_large_file_supportˆ  s&   
ÿ

ý
þr9  zflaky on PyPyztest requires 64-bit systeml        )Ú
free_bytesc                 C   sÈ   d}z
t j|t jd�}W n ty   t d¡ Y nw tj | d¡}t	|dƒ�}t j
||d� W d   ƒ n1 s9w   Y  ~t	|dƒ�}t  |¡d }W d   ƒ n1 sVw   Y  |j|ksbJ ‚d S )	N)i   @r   r   zCould not create large fileÚlarge_archiverx   rl   r}   r[   )rn   ÚemptyÚuint8ÚMemoryErrorr³   r3  r�   r‚   rƒ   r„   r«   r–   r{   )rŠ   r{   rœ   r¶   r\   Únew_arM   rM   rN   Útest_large_archive¡  s   ÿÿÿr@  c                 C   sH   t j | d¡}t |¡ t |¡�	}W d   ƒ d S 1 sw   Y  d S )Nznothing.npz)r�   r‚   rƒ   rn   r«   r–   )rŠ   r¶   ÚnpsrM   rM   rN   Útest_empty_npz»  s
   
"ÿrB  c              	   C   s  t jg d¢dtfdtfgd�}tj | d¡}t|dƒ�}tj||dd� W d   ƒ n1 s.w   Y  t|d	ƒ�}t 	|¡}W d   ƒ n1 sHw   Y  t
||ƒ t|dƒ�-}ttƒ� tj||d d� W d   ƒ n1 sow   Y  W d   ƒ d S W d   ƒ d S 1 s‡w   Y  d S )
N)©r7   r   r)  rC  r)  Úintu   æ•´å½¢r   zunicode.npyrx   )r   r   rà   r}   )rn   rÀ   rD  r�   r‚   rƒ   r„   r   rW   rY   r   r   rµ   )rŠ   r[   r¶   r\   r^   rM   rM   rN   Útest_unicode_field_namesÃ  s(   
þû	ÿÿ

ÿÿ"ÿrE  c                  C   s”   g d¢g d¢g d¢g d¢fD ]9\} }}dd„ t tjƒD ƒD ])}tƒ }t || r+d|fn|df| t d| tfg¡d	œ¡ t| 	¡ ƒ|ksFJ ‚qqd S )
N)Fé   é€   )Fé   éÀ   )TrH  rG  )Té   rI  c                 S   s   g | ]}d | ‘qS )r   rM   rÙ   rM   rM   rN   rÛ   Þ  s    z+test_header_growth_axis.<locals>.<listcomp>r   ú r  )
rª   r   ÚGROWTH_AXIS_MAX_DIGITSr   r  rn   r   rD  rï   rX   )Úis_fortran_arrayÚdtype_spaceÚexpected_header_lengthrJ   rŽ   rM   rM   rN   Útest_header_growth_axisÚ  s   ÿýøýrP  ÚS3ÚsomeÚstuff)ÚmetadataÚsubarrayr   )é   r   r    zPyPy bug in error formattingc                 C   sž   t jd| d�}tƒ }ttƒ� t  ||¡ W d   ƒ n1 sw   Y  | d¡ t  |¡}ddlm	} t
||ƒ ||jƒ|jusCJ ‚||jƒ|ju sMJ ‚d S )Nr   r   r   )Údrop_metadata)rn   ro   r   r   rµ   rÍ   rí   r–   Únumpy.lib._utils_implrW  r   r   )r¨   r[   Úbufr^   rW  rM   rM   rN   Útest_metadata_dtypeè  s   
ÿ


rZ  )kÚ__doc__r1  r�   ré   r³   Úior   Únumpyrn   Únumpy.testingr   r   r   r   r   r   r	   r
   Únumpy.testing._private.utilsr   Ú	numpy.libr   r=  Úint8Úuint16Úint16Úuint32Úint32Úuint64Úint64Úfloat32Úfloat64Ú	complex64Ú
complex128ri   Úscalarsre   ÚscalarÚendianr   Únewbyteorderr  ÚastypeÚbasicÚextendrÀ   ÚreshapeÚTÚPdescrÚPbufferTÚNdescrÚNbufferTr©   rf   rD   r_   r`   ra   rd   rh   rj   rm   rt   ÚmarkÚskipifÚslowr’   rš   rÒ   Údt2Údt3Údt4Údt5Údt6Úparametrizer¬   Úversion_infoÚxfailr·   rÌ   rÎ   rD  rÓ   rô   r÷   r  r  r  r  r  r  r  r  r  r  r$  r'  r+  r9  r@  rB  rE  rP  rØ   Úimplementationrá   rZ  rM   rM   rM   rN   Ú<module>   s„    (ó
ôýý
÷
þï&ÿ&ÿúû
	
ÿÿ
/þýüýûú


ýû
øýþø
õòÿã
1



ÿ
ÿú
ÿ