
    ehϟ                        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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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Z3 ej-        e1 ej'        e0          (                    d4          	           ej-        e3 ej'        e2          (                    d4          	           ej-        e1 ej'        e0          (                    d5          	           ej-        e3 ej'        e2          (                    d5          	           ej4        d(d6g	          gZ5 G d7 d8e          Z6d9 Z7d: Z8d; Z9d< Z:d= Z;d> Z<d? Z=d@ Z>ej?        @                    edAB          ej?        jA        dC                         ZBdD ZC ej'        dEd*F          ZD ej'        dGdHgdIdIgd(dJgdK          ZE ej'        dLdMgdIeEgdN          ZF ej'        g dOdIgdz  dN          ZG ej'        dGdHgdIdIgd(dJgdPdQgdR          ZH ej'        g g ddS          ZIej?        J                    dTeDeEeFeGeHeIg          dU             ZKej?        @                    ejL        dVk    dWB          ej?        M                    edXB          dY                         ZNdZ ZOd[ ZPej?        J                    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'        dGeQfdH ej'        dGdHgd^d^gddgdd_          fg          d\f          d`f          dbf          fg          g          dc             ZRdd ZSej?        @                    edAB          de             ZTej?        J                    dfdgdg          dh             ZUdi ZVdj ZWg dkZXg dlZYdm ZZdn Z[do Z\dp Z]dq Z^dr Z_ds Z`dt Zadu Zbej?        @                    edvB          ej?        @                    e dwB          ej?        jA         edxy          dz                                                 Zcd{ Zdd| Zed} Zfej?        J                    dT ej'        dGdHgeg ej'        d~ddi          gdN           ej'        eQddi           ej'        deQdffgddi           ej'        dGdHgeg ej'        dLg ej'        eQi           gdN          gdN          g          ej?        @                    eoejh        ji        dk    dB          d                         Zjd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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)r9   r6                 @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   r8   )randomrandintsuperread)selfsizerH   	__class__s      X/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/numpy/lib/tests/test_format.pyrK   zBytesIOSRandomSize.read  s5    ~~a&&ww||D!!!    N)__name__
__module____qualname__rK   __classcell__)rN   s   @rO   rF   rF     s=        " " " " " " " " " "rP   rF   c                     t                      }t          j        ||            t          |                                          }t          j        |d          }|S )NTallow_pickler   r   write_arraygetvalue
read_arrayarrff2arr2s       rO   	roundtriprb     sM    		A
q#			BRd333DKrP   c                     t                      }t          j        ||            t          |                                          }t          j        |          }|S rQ   )r   r   rZ   rF   r[   r\   r]   s       rO   roundtrip_randsizerd     sH    		A
q#	AJJLL	)	)BR  DKrP   c                     t                      }t          j        ||            t          |                                dd                   }t          j        |          }|S )Nr   r   rY   r]   s       rO   roundtrip_truncatedrf     sQ    		A
q#	ad#	$	$BR  DKrP   c                 ,    t          | |k               d S rQ   )r   )o1o2s     rO   assert_equal_rj     s    B"HrP   c                  h    t           t          z   D ]!} t          |           }t          | |           "d S rQ   )basic_arraysrecord_arraysrb   r   r^   ra   s     rO   test_roundtripro     s>    m+ & &~~3%%%%& &rP   c                      t           t          z   D ]1} | j        t          k    rt	          |           }t          | |           2d S rQ   )rl   rm   r   objectrd   r   rn   s     rO   test_roundtrip_randsizerr     sK    m+ * *9%c**DsD)))* *rP   c                  p    t           D ]-} | j        t          k    rt          t          t
          |            .d S rQ   )rl   r   rq   r   
ValueErrorrf   r^   s    rO   test_roundtrip_truncatedrv     s@     @ @9*&93???@ @rP   c                      t          j        dt          j        t          t          j        dz   f                    } t          |           }t          | |           d S )Nr8   r   )nponesr   strr   BUFFER_SIZErb   r   )long_str_arrlong_str_arr2s     rO   test_long_strr~     sP    71BHc63E3I-J$K$KLLLLl++M|]33333rP   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   )	enumeraterl   rm   r   	hasobjectospathjoinopenr   rZ   flagsf_contiguousc_contiguousopen_memmapr   flushrK   rj   )
tmpdirir^   nfnmfnfpr   manormal_bytesmemmap_bytess
             rO   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.npzru   r^   )	rx   rH   randr   r   r   savez_compressedloadr   )r   r^   npz_filenpzarr1s        rO   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offsetsrA   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    rD   zaligned.npzru   r^   )	rx   zerosranger   r   r   savezr   r   )r   r   r^   r   r   r   r   s          rO   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UserWarningrx   r   r   ry   )fnamer   r   s      rO   %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rX   encodingz.npzr   r   py2r    r   rW   F)rX   fix_importsr   )r   r   r   r   r   rx   arrayr   rq   r   endswithclose
startswithr   
isinstancerz   r   encoder   r   UnicodeError__getitem__ImportError)data_direxpectedr   r   r   data_fr   s          rO   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 #1rP   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   rW   )r   r   r   r   r   r   rt   rx   r   r   saver   rq   )r   r   r   r_   s       rO   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   rB   r   rC   c                     t          j        | j                  }t          ||            t	          j        d|           }t          |          }t          ||           d S )Nr    )r   descr_to_dtypedescrrj   rx   r   rb   r   )r   dt1r   ra   s       rO   test_descr_to_dtyper   Z  sW    d 

)
)C#r8Ar??DT??DtT"""""rP   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     rO   
<listcomp>z$test_version_2_0.<locals>.<listcomp>  &    	8	8	8D1HU
#	8	8	8rP       r   r   r   versionTrecordalwaysr   r   @ max_header_sizer8   r   )r   r   rx   ry   r   rZ   warningscatch_warningsfilterwarningsr   r   categoryseekreadlinelenARRAY_ALIGNr\   r   r   rt   )r_   r   r   wheaderns         rO   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     rO   r   z+test_version_2_0_memmap.<locals>.<listcomp>  r   rP   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   rx   ry   r   r   r   r   rt   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   tf1tf2r   r  s          rO   test_version_2_0_memmapr    s    
9	8U3ZZ	8	8	8B
BA
',,v0
1
1C
',,v0
1
1C *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.npyr8   i,'  r   r   .*format 2.0r   Header.*large)r   N  )r  r   T)r  rX     )r   r   r   rx   r   r   r   r   r   raisesrt   r   r   )r   r  r_   r^   ress        rO   test_huge_headerr    s   
V/00A
(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.npzr8   r  r  r   r   r  r   ru   r  r^   r  r   TrW   r  )r   r   r   rx   r   r   r   r   r   r  rt   r   r   )r   r_   r^   r  s       rO   test_huge_header_npzr    s   
V/00A
(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 )Nr8   r   r   r   ))r8   r8   )r   r   )r   r8   r   )   r  z we only support format version.*)r   rx   aranger   rZ   r   rt   )r_   r^   bad_versionsr   s       rO   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   NUMPYrP   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   rx   ry   r   r   rZ   r   
read_magicr   tell	MAGIC_LEN)s1s2r^   version1version2s        rO   test_read_magicr'    s    	B	B
'&
&
&
&C
r3////
r3////GGAJJJGGAJJJ $$H $$HHHBGGII))***BGGII))*****rP   c                  x    t           D ]1} t          |           }t          t          t          j        |           2d S rQ   )malformed_magicr   r   rt   r   r\   magicr_   s     rO   test_read_magic_bad_magicr,  4  s>      8 8ENNj&"3Q77778 8rP   c                      t           t          z   D ]1} t          |           }t          t          t
          j        |           2d S rQ   )bad_version_magicr)  r   r   rt   r   r\   r*  s     rO   test_read_version_1_0_bad_magicr/  :  sC    "_4 8 8ENNj&"3Q77778 8rP   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   r8      )r   rt   r   r+   rP   rO   test_bad_magic_argsr3  @  s`    *flB222*flC333*flAr222*flAs33333rP   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      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr1  r   )r   tupler   write_array_header_1_0r   rt   sr   s     rO   test_large_headerr;  G  sl    		A''EEBBA
!!Q'''		A3;&'AgJ*f;QBBBBBrP   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   rx   ry   r   r   rZ   r   r"  read_array_header_1_0r   r!  r  r:  r^   r   fortranr   s        rO   test_read_array_header_1_0r@  Q      		A
'&
&
&
&C
q#v....FF6"8;;E7EAFFHHv))Q.///UGU#u'==>>>>>rP   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   rx   ry   r   r   rZ   r   r"  read_array_header_2_0r   r!  r  r>  s        rO   test_read_array_header_2_0rD  ^  rA  rP   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), }                    
r8   r   Fr   r   )r   r   r   extrakey)r   r   rt   r   r=  r8  r9  s     rO   test_bad_headerrI  k  s    		A*f:A>>>A*f:A>>> 	A*f:A>>>
 		"	 	A *f:A>>>	 	A 			A
!!Q'''*f:A>>>>>rP   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        rD   r   )sysplatformr   skipr   r   r   
subprocess
check_call	Exceptionr   r   rx   r  r   r   r   )r   tf_namespr_   r   r   s         rO   test_large_file_supportrX    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   ru   r   r^   )rx   emptyuint8MemoryErrorr   rR  r   r   r   r   r   r   r   )r   r   r   r   r_   new_as         rO   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   rx   r   r   )r   r   npss      rO   test_empty_npzrc    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)r8   r    rG  re  rG  intu   整形r   zunicode.npyr   )r    r   r   r   )rx   r   rf  r   r   r   r   r   rZ   r\   r   r   r   )r   r^   r   r_   ra   s        rO   test_unicode_field_namesrg    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      )Trk  rj  )T   rl  c                     g | ]}d |z  S )r   r2  r   s     rO   r   z+test_header_growth_axis.<locals>.<listcomp>  s    IIIqRUIIIrP   r    r5  )
r   r   GROWTH_AXIS_MAX_DIGITSr   r8  rx   r   rf  r  r[   )is_fortran_arraydtype_spaceexpected_header_lengthrM   r   s        rO   test_header_growth_axisrt    s    ***OOO___B @ @=+'= JIE&*G$H$HIII 	@ 	@DB)"&6E!TT1I!1COS#9":;;/ /    r{{}}%%)??????	@@ @rP   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)rx   ry   r   r   r   r   r   r   numpy.lib._utils_implr|  r   r   )r   r^   bufra   r|  s        rO   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)k__doc__rP  r   r   r   ior   numpyrx   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
complex128rq   scalarsrl   scalarendianr   newbyteorderr  astypebasicextendr   reshapeTPdescrPbufferTNdescrNbufferTr   rm   rF   rb   rd   rf   rj   ro   rr   rv   r~   markskipifslowr   r   r   dt2dt3dt4dt5dt6parametrizer   version_infoxfailr   r   r   rf  r   r  r  r  r  r  r.  r)  r'  r,  r/  r3  r;  r@  rD  rI  rX  r`  rc  rg  rt  r   implementationr   r  r2  rP   rO   <module>r     sU  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L)FGGI&&&    '&  HG 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 3rP   