
    G/Ph                        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 ]Z% ej&        e$          '                    e%          Z& ej(        d          )                    e&          Z*e#+                     ej,        g e&	           ej,        d
e&	          e*e*-                    d          e*-                    d          j.        e*-                    d          ddddddf         g           Ќ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Z2 ej,        e0 ej&        e/          '                    d4          	           ej,        e2 ej&        e1          '                    d4          	           ej,        e0 ej&        e/          '                    d5          	           ej,        e2 ej&        e1          '                    d5          	           ej3        d(d6g	          gZ4 G d7 d8e          Z5d9 Z6d: Z7d; Z8d< Z9d= Z:d> Z;d? Z<d@ Z=ej>        ?                    edAB          ej>        j@        dC                         ZAdD ZB ej&        dEd*F          ZC ej&        dGdHgdIdIgd(dJgdK          ZD ej&        dLdMgdIeDgdN          ZE ej&        g dOdIgdz  dN          ZF ej&        dGdHgdIdIgd(dJgdPdQgdR          ZG ej&        g g ddS          ZHej>        I                    dTeCeDeEeFeGeHg          dU             ZJej>        ?                    ejK        dVk    dWB          ej>        L                    edXB          dY                         ZMdZ ZNd[ ZOej>        I                    dT ej&         ej&        dGej        fdHej        fdLej        fgd*F          d\           ej&        d] ej&        dGdHgd^d^gddgdd_d\          d`fg           ej&        dag           ej&        d] ej&         ej&         ej&        dGdHgd^d^gddgdd_          d\f          d`f          fg           ej&        dG ej&         ej&         ej&         ej&        dGePfdH ej&        dGdHgd^d^gddgdd_          fg          d\f          d`f          dbf          fg          g          dc             ZQdd ZRej>        ?                    edAB          de             ZSej>        I                    dfdgdg          dh             ZTdi ZUdj ZVg dkZWg dlZXdm ZYdn ZZdo Z[dp Z\dq Z]dr Z^ds Z_dt Z`du Zaej>        ?                    edvB          ej>        ?                     ej&        ejb                  jc        dk     dwB          ej>        j@         edxy          dz                                                 Zdd{ Zed| Zfd} Zgej>        I                    dT ej&        dGdHgeh ej&        d~ddi          gdN           ej&        ePddi           ej&        dePdffgddi           ej&        dGdHgeh ej&        dLg ej&        ePi           gdN          gdN          g          ej>        ?                    eoeji        jj        dk    dB          d                         ZkdS )aD   Test the .npy file format.

Set up:

    >>> import sys
    >>> from io import BytesIO
    >>> from numpy.lib import format
    >>>
    >>> scalars = [
    ...     np.uint8,
    ...     np.int8,
    ...     np.uint16,
    ...     np.int16,
    ...     np.uint32,
    ...     np.int32,
    ...     np.uint64,
    ...     np.int64,
    ...     np.float32,
    ...     np.float64,
    ...     np.complex64,
    ...     np.complex128,
    ...     object,
    ... ]
    >>>
    >>> basic_arrays = []
    >>>
    >>> for scalar in scalars:
    ...     for endian in '<>':
    ...         dtype = np.dtype(scalar).newbyteorder(endian)
    ...         basic = np.arange(15).astype(dtype)
    ...         basic_arrays.extend([
    ...             np.array([], dtype=dtype),
    ...             np.array(10, dtype=dtype),
    ...             basic,
    ...             basic.reshape((3,5)),
    ...             basic.reshape((3,5)).T,
    ...             basic.reshape((3,5))[::-1,::2],
    ...         ])
    ...
    >>>
    >>> Pdescr = [
    ...     ('x', 'i4', (2,)),
    ...     ('y', 'f8', (2, 2)),
    ...     ('z', 'u1')]
    >>>
    >>>
    >>> PbufferT = [
    ...     ([3,2], [[6.,4.],[6.,4.]], 8),
    ...     ([4,3], [[7.,5.],[7.,5.]], 9),
    ...     ]
    >>>
    >>>
    >>> Ndescr = [
    ...     ('x', 'i4', (2,)),
    ...     ('Info', [
    ...         ('value', 'c16'),
    ...         ('y2', 'f8'),
    ...         ('Info2', [
    ...             ('name', 'S2'),
    ...             ('value', 'c16', (2,)),
    ...             ('y3', 'f8', (2,)),
    ...             ('z3', 'u4', (2,))]),
    ...         ('name', 'S2'),
    ...         ('z2', 'b1')]),
    ...     ('color', 'S2'),
    ...     ('info', [
    ...         ('Name', 'U8'),
    ...         ('Value', 'c16')]),
    ...     ('y', 'f8', (2, 2)),
    ...     ('z', 'u1')]
    >>>
    >>>
    >>> NbufferT = [
    ...     ([3,2], (6j, 6., ('nn', [6j,4j], [6.,4.], [1,2]), 'NN', True), 'cc', ('NN', 6j), [[6.,4.],[6.,4.]], 8),
    ...     ([4,3], (7j, 7., ('oo', [7j,5j], [7.,5.], [2,1]), 'OO', False), 'dd', ('OO', 7j), [[7.,5.],[7.,5.]], 9),
    ...     ]
    >>>
    >>>
    >>> record_arrays = [
    ...     np.array(PbufferT, dtype=np.dtype(Pdescr).newbyteorder('<')),
    ...     np.array(NbufferT, dtype=np.dtype(Ndescr).newbyteorder('<')),
    ...     np.array(PbufferT, dtype=np.dtype(Pdescr).newbyteorder('>')),
    ...     np.array(NbufferT, dtype=np.dtype(Ndescr).newbyteorder('>')),
    ... ]

Test the magic string writing.

    >>> format.magic(1, 0)
    '\x93NUMPY\x01\x00'
    >>> format.magic(0, 0)
    '\x93NUMPY\x00\x00'
    >>> format.magic(255, 255)
    '\x93NUMPY\xff\xff'
    >>> format.magic(2, 5)
    '\x93NUMPY\x02\x05'

Test the magic string reading.

    >>> format.read_magic(BytesIO(format.magic(1, 0)))
    (1, 0)
    >>> format.read_magic(BytesIO(format.magic(0, 0)))
    (0, 0)
    >>> format.read_magic(BytesIO(format.magic(255, 255)))
    (255, 255)
    >>> format.read_magic(BytesIO(format.magic(2, 5)))
    (2, 5)

Test the header writing.

    >>> for arr in basic_arrays + record_arrays:
    ...     f = BytesIO()
    ...     format.write_array_header_1_0(f, arr)   # XXX: arr is not a dict, items gets called on it
    ...     print(repr(f.getvalue()))
    ...
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|u1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|u1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '|i1', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<u2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<u2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>u2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<i2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<i2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>i2', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>i2', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<u4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<u4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>u4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>u4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<i4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<i4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>i4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>i4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<u8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<u8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>u8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>u8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<i8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<i8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>i8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>i8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<f4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<f4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>f4', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>f4', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<f8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<f8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>f8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>f8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '<c8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '<c8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': '>c8', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': '>c8', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (0,)}             \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': ()}               \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (15,)}            \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (3, 5)}           \n"
    "F\x00{'descr': '<c16', 'fortran_order': True, 'shape': (5, 3)}            \n"
    "F\x00{'descr': '<c16', 'fortran_order': False, 'shape': (3, 3)}           \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (0,)}             \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': ()}               \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (15,)}            \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (3, 5)}           \n"
    "F\x00{'descr': '>c16', 'fortran_order': True, 'shape': (5, 3)}            \n"
    "F\x00{'descr': '>c16', 'fortran_order': False, 'shape': (3, 3)}           \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': 'O', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (0,)}              \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': ()}                \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (15,)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 5)}            \n"
    "F\x00{'descr': 'O', 'fortran_order': True, 'shape': (5, 3)}             \n"
    "F\x00{'descr': 'O', 'fortran_order': False, 'shape': (3, 3)}            \n"
    "v\x00{'descr': [('x', '<i4', (2,)), ('y', '<f8', (2, 2)), ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}         \n"
    "\x16\x02{'descr': [('x', '<i4', (2,)),\n           ('Info',\n            [('value', '<c16'),\n             ('y2', '<f8'),\n             ('Info2',\n              [('name', '|S2'),\n               ('value', '<c16', (2,)),\n               ('y3', '<f8', (2,)),\n               ('z3', '<u4', (2,))]),\n             ('name', '|S2'),\n             ('z2', '|b1')]),\n           ('color', '|S2'),\n           ('info', [('Name', '<U8'), ('Value', '<c16')]),\n           ('y', '<f8', (2, 2)),\n           ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}      \n"
    "v\x00{'descr': [('x', '>i4', (2,)), ('y', '>f8', (2, 2)), ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}         \n"
    "\x16\x02{'descr': [('x', '>i4', (2,)),\n           ('Info',\n            [('value', '>c16'),\n             ('y2', '>f8'),\n             ('Info2',\n              [('name', '|S2'),\n               ('value', '>c16', (2,)),\n               ('y3', '>f8', (2,)),\n               ('z3', '>u4', (2,))]),\n             ('name', '|S2'),\n             ('z2', '|b1')]),\n           ('color', '|S2'),\n           ('info', [('Name', '>U8'), ('Value', '>c16')]),\n           ('y', '>f8', (2, 2)),\n           ('z', '|u1')],\n 'fortran_order': False,\n 'shape': (2,)}      \n"
    N)BytesIO)assert_assert_array_equalassert_raisesassert_raises_regexassert_warnsIS_PYPYIS_WASM)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                         e Zd Zd fd	Z xZS )BytesIOSRandomSizeNc                 z    dd l }|                    d|          }t                                          |          S )Nr   r7   )randomrandintsuperread)selfsizerG   	__class__s      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/lib/tests/test_format.pyrJ   zBytesIOSRandomSize.read  s5    ~~a&&ww||D!!!    N)__name__
__module____qualname__rJ   __classcell__)rM   s   @rN   rE   rE     s=        " " " " " " " " " "rO   rE   c                     t                      }t          j        ||            t          |                                          }t          j        |d          }|S )NTallow_pickler   r   write_arraygetvalue
read_arrayarrff2arr2s       rN   	roundtripra     sM    		A
q#			BRd333DKrO   c                     t                      }t          j        ||            t          |                                          }t          j        |          }|S rP   )r   r   rY   rE   rZ   r[   r\   s       rN   roundtrip_randsizerc     sH    		A
q#	AJJLL	)	)BR  DKrO   c                     t                      }t          j        ||            t          |                                dd                   }t          j        |          }|S )Nr   r   rX   r\   s       rN   roundtrip_truncatedre     sQ    		A
q#	ad#	$	$BR  DKrO   c                 ,    t          | |k               d S rP   )r   )o1o2s     rN   assert_equal_ri     s    B"HrO   c                  h    t           t          z   D ]!} t          |           }t          | |           "d S rP   )basic_arraysrecord_arraysra   r   r]   r`   s     rN   test_roundtriprn     s>    m+ & &~~3%%%%& &rO   c                      t           t          z   D ]1} | j        t          k    rt	          |           }t          | |           2d S rP   )rk   rl   r   objectrc   r   rm   s     rN   test_roundtrip_randsizerq     sK    m+ * *9%c**DsD)))* *rO   c                  p    t           D ]-} | j        t          k    rt          t          t
          |            .d S rP   )rk   r   rp   r   
ValueErrorre   r]   s    rN   test_roundtrip_truncatedru     s@     @ @9*&93???@ @rO   c                      t          j        dt          j        t          t          j        dz   f                    } t          |           }t          | |           d S )Nr7   r   )nponesr   strr   BUFFER_SIZEra   r   )long_str_arrlong_str_arr2s     rN   test_long_strr}     sP    71BHc63E3I-J$K$KLLLLl++M|]33333rO   zmemmap doesn't work correctly)reasonc                    t          t          t          z             D ]\  }}|j        j        rt
          j                            | d| d          }t
          j                            | d| d          }t          |d          5 }t          j
        ||           d d d            n# 1 swxY w Y   |j        j        o|j        j         }t          j        |d|j        |j        |          }||d<   |                                 t          |d          5 }|                                }d d d            n# 1 swxY w Y   t          |d          5 }|                                }	d d d            n# 1 swxY w Y   t%          ||	           t          j        |d	
          }|                                 d S )Nnormalz.npymemmapwbw+)moder   shapefortran_order.rbr)r   )	enumeraterk   rl   r   	hasobjectospathjoinopenr   rY   flagsf_contiguousc_contiguousopen_memmapr   flushrJ   ri   )
tmpdirir]   nfnmfnfpr   manormal_bytesmemmap_bytess
             rN   test_memmap_roundtripr     s`    L=899  39 	gll6#3A#3#3#344gll6#3A#3#3#344#t__ 	(r3'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( I"A39+A'A 	$ci&)i}N N N3



 #t__ 	%7799L	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%#t__ 	%7799L	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%lL111 #...




5 s6   B**B.	1B.	D;;D?	D?	E77E;	>E;	c                 :   t           j                            dd          }t          j                            | d          }t          j        ||           t          j        |          5 }|d         }d d d            n# 1 swxY w Y   t          ||           d S )N   zcompressed.npzrt   r]   )	rw   rG   randr   r   r   savez_compressedloadr   )r   r]   npz_filenpzarr1s        rN   test_compressed_roundtripr     s    
)..c
"
"Cw||F$455Hc****			 c5z              sD!!!!!s   +	B  BB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                 X   t          j        d|          }t          d          D ]
}|dz   ||<   t          j                            | d          }t          j        ||           t          j        |          5 }|d         }d d d            n# 1 swxY w Y   t          ||           d S )Nr   rC   zaligned.npzrt   r]   )	rw   zerosranger   r   r   savezr   r   )r   r   r]   r   r   r   r   s          rN   test_load_padded_dtyper     s    
(1b//C1XX  QAw||FM22HHX3			 c5z              sD!!!!!s   :	BBB)r      zsee gh-23988z!Emscripten NODEFS has a buggy dupc                  b   d} t           j                            t           j                            t                    d|           }t          j        t          d          5  t          j	        |          }d d d            n# 1 swxY w Y   t          |t          j        d                     d S )Nzwin64python2.npydatazReading.*this warning\.matchr   )r   r   r   dirname__file__pytestwarnsUserWarningrw   r   r   rx   )fnamer   r   s      rN   %test_python2_python3_interoperabilityr     s     E7<<1165AAD	k)C	D	D	D  wt}}              tRWQZZ(((((s   !BB	Bc            	      V   t           j                            t           j                            t                    d          } t          j        d t          ddgt                    }dD ]>}t           j                            | |          }dD ]}t          j	        |d|          }|
                    d	          r|d
         }|                                 n|}|dk    r|                    d          rxt          t          |d         t                               t!          |d d         |d d                    t!          |d                             |          |d                    t          t          |d         t$                               t!          ||           |                    d          r|
                    d	          rt          j	        |d          }t'          t(          |j        d
           |                                 t          j	        |ddd          }t'          t,          |j        d
           |                                 t'          t(          t
          j	        |d           t'          t,          t
          j	        |ddd           @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rW   encodingz.npzr   r   py2r   r   rV   F)rW   fix_importsr   )r   r   r   r   r   rw   arrayr   rp   r   endswithclose
startswithr   
isinstancery   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r   r   data_fr   s          rN   test_pickle_python2_python3r     sr    w||BGOOH55v>>Hxun46$& & &H6 #1 #1w||He,,+ 	3 	3HWTxHHHF~~f%% c{8##(8(8(?(?#
47C00111"49hssm<<<"48??8#<#<hrlKKKK
47E22333"42222E"" 	1~~f%% 1wt$777lD,<cBBB

wt$E(02 2 2k4+;SAAA

lBGT+/1 1 1 1k27D+/U'/1 1 1 1C#1 #1rO   c           	         t           j                            t           j                            t                    d          }t           j                            |d          }t          t          t          j        |dd           t           j                            |d          }t          j        |dd          5 }t          t          |j	        d           d d d            n# 1 swxY w Y   t           j                            | d          }t          t          t          j
        |t          j        d gt          	          d
           d S )Nr   r   Fr   r   r   r   zpickle-disabled.npyr   rV   )r   r   r   r   r   r   rs   rw   r   r   saver   rp   )r   r   r   r^   s       rN   test_pickle_disallowr   K  sK   w||BGOOH55v>>H7<<"233D*bgt$x9 9 9 9 7<<"233D	EH	=	=	= 6j!-5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7<< 566D*bgtRXtfF-K-K-K$& & & & & &s   =C%%C),C))r   r   i1)r   r   r   r   )r!   )r   rA   r   rB   c                     t          j        | j                  }t          ||            t	          j        d|           }t          |          }t          ||           d S )Nr   )r   descr_to_dtypedescrri   rw   r   ra   r   )r   dt1r   r`   s       rN   test_descr_to_dtyper   Z  sW    d 

)
)C#r8Ar??DT??DtT"""""rO   c                     t                      } d t          d          D             }t          j        d|          }t	          j        | |d           t          j        d          5 }t          j        d	d
t                     t	          j        | |           t          |d         j        t          u            d d d            n# 1 swxY w Y   |                     d           |                                 }t          t          |          t          j        z  dk               |                     d           t	          j        | d          }t#          ||           t%          t&          t          j        | |d           d S )Nc                 ,    g | ]}d |z  dz  t           fS z%dd   float.0r   s     rN   
<listcomp>z$test_version_2_0.<locals>.<listcomp>  &    	8	8	8D1HU
#	8	8	8rO       r   r   r   versionTrecordalwaysr   r   @ max_header_sizer7   r   )r   r   rw   rx   r   rY   warningscatch_warningsfilterwarningsr   r   categoryseekreadlinelenARRAY_ALIGNr[   r   r   rs   )r^   r   r   wheaderns         rN   test_version_2_0r    s   		A	8	8U3ZZ	8	8	8B
BA
q!V,,,,		 	-	-	- ."k:::1a   !,---. . . . . . . . . . . . . . . FF1IIIZZ\\FCKK&,,1222FF1III!V444Aq! *f0!Q?????s   *ACCCc           	         d t          d          D             }t          j        d|          }t          j                            | d          }t          j                            | d          }t          t          t          j	        |d|j
        |j        d	           t          j	        |d|j
        |j        d
	          }||d<   |                                 t          j	        |dd          }t          ||           t          j        d          5 }t          j        ddt"                     t          j	        |d|j
        |j        d 	          }t%          |d         j        t"          u            ||d<   |                                 d d d            n# 1 swxY w Y   t          j	        |dd          }t          ||           d S )Nc                 ,    g | ]}d |z  dz  t           fS r   r   r   s     rN   r   z+test_version_2_0_memmap.<locals>.<listcomp>  r   rO   r   r   r   zversion2_01.npyzversion2_02.npyr   r   )r   r   r   r   r   .r   r   )r   r   Tr   r   r   r   )r   rw   rx   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   tf1tf2r   r  s          rN   test_version_2_0_memmapr
    s    
9	8U3ZZ	8	8	8B
BA
',,v1
2
2C
',,v1
2
2C *f0#D"#'6; ; ; ; 
	Cd!'"#'6
; 
; 
;BBsGHHJJJ		Cc6	B	B	BBr1		 	-	-	- "k:::$ag&'gt= = =!,---3



               
	Cc6	B	B	BBr1s   A9FF #F 	mmap_moder   c                    t           j                            | d          }t          j        dddz  dz             }t          j        t          d          5  t          j        ||           d d d            n# 1 swxY w Y   t          j	        t          d	          5  t          j        ||
           d d d            n# 1 swxY w Y   t          j	        t          d	          5  t          j        ||d           d d d            n# 1 swxY w Y   t          j        ||d          }t          ||           t          j        ||d          }t          ||           d S )Nzlarge_header.npyr7   i,'  r   r   .*format 2.0r   Header.*large)r   N  )r  r   T)r  rW     )r   r   r   rw   r   r   r   r   r   raisesrs   r   r   )r   r  r^   r]   ress        rN   test_huge_headerr    s   
V011A
(1DJsN
+
+
+C	k	8	8	8  
3               
z	9	9	9 ( (
Y''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
z	9	9	9 ? ?
Y>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '!yt
<
<
<CsC   
'!y&
A
A
ACsC     s6   A::A>A> CC
C)DDDc                    t           j                            | d          }t          j        dddz  dz             }t          j        t          d          5  t          j        ||	           d d d            n# 1 swxY w Y   t          j	        t          d
          5  t          j        |          d          d d d            n# 1 swxY w Y   t          j	        t          d
          5  t          j        |d          d          d d d            n# 1 swxY w Y   t          j        |d          d         }t          ||           t          j        |d          d         }t          ||           d S )Nzlarge_header.npzr7   r  r  r   r   r  r   rt   r  r]   r  r   TrV   r  )r   r   r   rw   r   r   r   r   r   r  rs   r   r   )r   r^   r]   r  s       rN   test_huge_header_npzr    s   
V011A
(1DJsN
+
+
+C	k	8	8	8  
               
z	9	9	9  


5               
z	9	9	9 1 1
5)))%001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 '!$
'
'
'
.CsC   
'!V
,
,
,U
3CsC     s6   A;;A?A?!CCC.DDDc                     t                      } t          j        d          }t          j        | |d           t          j        | |           t          j        | |d            t          j        | |           t          j        | |d           t          j        | |           g d}|D ]F}t          t          d          5  t          j        | ||           d d d            n# 1 swxY w Y   Gd S )Nr7   r   r   r   ))r7   r7   )r   r   )r   r7   r   )   r  z we only support format version.*)r   rw   aranger   rY   r   rs   )r^   r]   bad_versionsr   s       rN   test_write_versionr    sJ   		A
)A,,C
q#v....
q#
q#t,,,,
q#
q#v....
q#  L   8 8 !CE E 	8 	8q#w7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	88 8s   C((C,	/C,	)s   NUMPYs   NUMPY  s   NUMPY s   NUMPY s   NUMPYs   NUMPY)s   NUMPY s    NUMPY s   numpy s   MATLB s   NUMPYs   NUMPYrO   c                  |   t                      } t                      }t          j        dt                    }t	          j        | |d           t	          j        ||d           |                     d           |                    d           t	          j        |           }t	          j        |          }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   rw   rx   r   r   rY   r   
read_magicr   tell	MAGIC_LEN)s1s2r]   version1version2s        rN   test_read_magicr&    s    	B	B
'&
&
&
&C
r3////
r3////GGAJJJGGAJJJ $$H $$HHHBGGII))***BGGII))*****rO   c                  x    t           D ]1} t          |           }t          t          t          j        |           2d S rP   )malformed_magicr   r   rs   r   r[   magicr^   s     rN   test_read_magic_bad_magicr+  4  s>      8 8ENNj&"3Q77778 8rO   c                      t           t          z   D ]1} t          |           }t          t          t
          j        |           2d S rP   )bad_version_magicr(  r   r   rs   r   r[   r)  s     rN   test_read_version_1_0_bad_magicr.  :  sC    "_4 8 8ENNj&"3Q77778 8rO   c                     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   rs   r   r*   rO   rN   test_bad_magic_argsr2  @  s`    *flB222*flC333*flAr222*flAs33333rO   c                      t                      } t                      ddd}t          j        | |           t                      } ddz  dfg|d<   t	          t
          t          j        | |           d S )NFz<i8r   r   r      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr0  r   )r   tupler   write_array_header_1_0r   rs   sr   s     rN   test_large_headerr:  G  sl    		A''EEBBA
!!Q'''		A3;&'AgJ*f;QBBBBBrO   c                     t                      } t          j        dt                    }t	          j        | |d           |                     t          j                   t	          j        |           \  }}}t          | 
                                t          j        z  dk               t          |||fddt          fk               d S )Nr  r   r   r   r   F)r   rw   rx   r   r   rY   r   r!  read_array_header_1_0r   r   r  r9  r]   r   fortranr   s        rN   test_read_array_header_1_0r?  Q      		A
'&
&
&
&C
q#v....FF6"8;;E7EAFFHHv))Q.///UGU#u'==>>>>>rO   c                     t                      } t          j        dt                    }t	          j        | |d           |                     t          j                   t	          j        |           \  }}}t          | 
                                t          j        z  dk               t          |||fddt          fk               d S )Nr  r   r   r   r   F)r   rw   rx   r   r   rY   r   r!  read_array_header_2_0r   r   r  r=  s        rN   test_read_array_header_2_0rC  ^  r@  rO   c                     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          j        | |           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   rs   r   r<  r7  r8  s     rN   test_bad_headerrH  k  s    		A*f:A>>>A*f:A>>> 	A*f:A>>>
 		"	 	A *f:A>>>	 	A 			A
!!Q'''*f:A>>>>>rO   c                    t           j        dk    st           j        dk    rt          j        d           t          j                            | d          }	 dd l}|                    ddd|g           n$# t          $ r t          j        d	           Y nw xY wt          |d
          5 }|                    d           t          j        d          }t          j        ||           d d d            n# 1 swxY w Y   t          |d          5 }|                    d           t          j        |          }d d d            n# 1 swxY w Y   t!          ||           d S )Nwin32cygwinz)Unknown if Windows has sparse filesystemssparse_filer   truncatez-s
5368709120zCould not create 5GB large filer   l        rC   r   )sysplatformr   skipr   r   r   
subprocess
check_call	Exceptionr   r   rw   r  r   r   r   )r   tf_namespr^   r   r   s         rN   test_large_file_supportrW    s   3<8#;#;?@@@gll6=11G7 	 
z4w?@@@@ 7 7 75666667 
gt		 	zIaLL
1              
 
gt		 	zGAJJ               q!s6   A4 4BB(?C33C7:C7*EEEzflaky on PyPyztest requires 64-bit systeml        )
free_bytesc                    d}	 t          j        |t           j                  }n$# t          $ r t	          j        d           Y nw xY wt          j                            | d          }t          |d          5 }t          j
        ||           d d d            n# 1 swxY w Y   ~t          |d          5 }t          j        |          d         }d d d            n# 1 swxY w Y   |j        |k    sJ d S )	N)i   @r   r   zCould not create large filelarge_archiver   rt   r   r]   )rw   emptyuint8MemoryErrorr   rQ  r   r   r   r   r   r   r   )r   r   r   r   r^   new_as         rN   test_large_archiver_    sz    E3HU"(+++ 3 3 31222223 GLL11E	eT		 a
               	
	eT		 "a

5!" " " " " " " " " " " " " " " ;%s3    % AA9BB #B 8CC#&C#c                     t           j                            | d          }t          j        |           t          j        |          5 }	 d d d            d S # 1 swxY w Y   d S )Nznothing.npz)r   r   r   rw   r   r   )r   r   npss      rN   test_empty_npzrb    s    GLL//EHUOOO	 3                 s   	AAAc                    t          j        g ddt          fdt          fg          }t          j                            | d          }t          |d          5 }t          j        ||d           d d d            n# 1 swxY w Y   t          |d	          5 }t          j	        |          }d d d            n# 1 swxY w Y   t          ||           t          |d          5 }t          t                    5  t          j        ||d            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
N)r7   r   rF  rd  rF  intu   整形r   zunicode.npyr   )r   r   r   r   )rw   r   re  r   r   r   r   r   rY   r[   r   r   r   )r   r]   r   r^   r`   s        rN   test_unicode_field_namesrf    s>   
(    
	GM  C GLL//E	eT		 3a1c622223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	eT		 $a ##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $sD!!! 
eT		 5a+&& 	5 	5q#t4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5sZ   A==BBB99B= B=$D59DD5D!	!D5$D!	%D55D9<D9c                  b   g dg dg dg dfD ]\  } }}d t          t          j                  D             D ]u}t                      }t          j        || rd|fn|df| t          j        d|z  t          fg          d           t          |	                                          |k    sJ vd S )	N)F      )F      )Trj  ri  )T   rk  c                     g | ]}d |z  S )r   r1  r   s     rN   r   z+test_header_growth_axis.<locals>.<listcomp>  s    IIIqRUIIIrO   r    r4  )
r   r   GROWTH_AXIS_MAX_DIGITSr   r7  rw   r   re  r   rZ   )is_fortran_arraydtype_spaceexpected_header_lengthrL   r   s        rN   test_header_growth_axisrs    s    ***OOO___B @ @=+'= JIE&*G$H$HIII 	@ 	@DB)"&6E!TT1I!1COS#9":;;/ /    r{{}}%%)??????	@@ @rO   S3somestuff)metadatasubarrayr   )   r   r    zPyPy bug in error formattingc                    t          j        d|           }t                      }t          t                    5  t          j        ||           d d d            n# 1 swxY w Y   |                    d           t          j        |          }ddlm	} t          ||            ||j                  |j        usJ  ||j                  |j        u sJ d S )Nr   r   r   )drop_metadata)rw   rx   r   r   r   r   r   r   numpy.lib._utils_implr{  r   r   )r   r]   bufr`   r{  s        rN   test_metadata_dtyper~    s    '"B


C
))C	k	"	"  
S              HHQKKK 73<<D333333sD!!!=##394444=$$
222222s   AA"A)l__doc__rO  r   r   r   ior   numpyrw   numpy.testingr   r   r   r   r   r	   r
   numpy.testing._private.utilsr   	numpy.libr   r\  int8uint16int16uint32int32uint64int64float32float64	complex64
complex128rp   scalarsrk   scalarendianr   newbyteorderr  astypebasicextendr   reshapeTPdescrPbufferTNdescrNbufferTr   rl   rE   ra   rc   re   ri   rn   rq   ru   r}   markskipifslowr   r   r   dt2dt3dt4dt5dt6parametrizer   version_infoxfailr   r   r   re  r   r  r
  r  r  r  r-  r(  r&  r+  r.  r2  r:  r?  rC  rH  rW  intpr   r_  rb  rf  rs  r   implementationr   r~  r1  rO   rN   <module>r     sf  R Rf 


 				                              9 8 8 8 8 8      
 HGIHIHIHJJLM
   F    --f55	$&&u--BHRu%%%BHRu%%%MM(##MM(##%MM(##DDbD##A#I.
 	 	 	 	4
 
 
 Vr2hR!1%Vr2hR!1%( 	       	!
 		 	   #
. Vb"tb"XBx!Q8$E	:R2r(+Q0Vb"tb"XBx!Q8$F	:R2r(+Q0 BHXXRXf--::3??@@@BHXXRXf--::3??@@@BHXXRXf--::3??@@@BHXXRXf--::3??@@@BHQ12333" " " " " " " "        & & &* * *@ @ @4 4 4 G$CDD   ED<" " " bh|4(((bh#stq6# # $ $ bh#ss<<==bhTF1H==>>bh#stq6dD\; ; < < bh::;;S#sC=>>" " ?>" C$/GG7#FGG) ) HG HG),1 ,1 ,1^& & & BHXRXRW~RXRX  $% % % 	 
 BHsHBHs3i)-d)*1)* 
       BH     BHsHBHBHs3i!%d!"1!"$ $ % %  	 	 		
 	 	 	 

 
 
 BH	hbhBHBHc
hbhS	37+34Q%34(6 (6 7 7 8   	 	 	    
   	
  ;/  / /b# #c/ /b#@ @ @2 G$CDD  ED< sDk22! ! 32!&! ! !(8 8 86     + + +*8 8 88 8 84 4 4C C C
? 
? 
?
? 
? 
?? ? ?:  2 GO44HBHRW%%.28  : :I&&&    '& : : 54
 ,  5 5 5.@ @ @ BHSzxrx!7+8- 8- 8- 0. / / 0 0BHSFG,---BHzC;'(FG3DEEEBHSzxrx3%XRXcB5O5O5O4PQQRR/    	  	 	 GG 2 :i G-  / /3 3/ /	 	3 3 3rO   