o 6a]@sdZddlZddlZddlZddlZddlZddlZddlmZddl Z ddl m Z m Z mZmZmZddlmZe je je je je je je je je je je je jeg Z gZ!e D]@Z"dD];Z#e $e"%e#Z$e &d'e$Z(e!)e j*ge$de j*d e$de(e(+d e(+d j,e(+d ddd ddd fgq[qWgd Z-dd gddgddggdfddgddgddggdfgZ.dddddgdfddgfddd d!gfd"d#gZ/dd gd$dd%d$d&gddgd'd gfd(d)fd*d+ddgddggdfddgd,dd-d,d.gddgd d'gfd/d0fd1d2ddgddggdfgZ0e j*e.e $e-%d3de j*e0e $e/%d3de j*e.e $e-%d4de j*e0e $e/%d4de j1d'd5gdgZ2Gd6d7d7eZ3d8d9Z4d:d;Z5dd?Z7d@dAZ8dBdCZ9dDdEZ:dFdGZ;dHdIZe $dNdOgdPdPgd'dQgdRZ?e $dSdTgdPe?gdUZ@e $gdVdPgddUZAe $dNdOgdPdPgd'dQgdWdXgdYZBe $ggddZZCejDEd[e>e?e@eAeBeCgd\d]ZFd^d_ZGd`daZHdbdcZIejDEd[e $e j$dNe jfdOe jfdSe jfgd)dMdde $dee $dNdOgdfdfgddgddgdddhfge $dige $dee $e $e $dNdOgdfdfgddgddgddfdhffge $dNe $e $e $e $dNeJfdOe $dNdOgdfdfgddgddgfgddfdhfdjffggdkdlZKdmdnZLdodpZMdqdrZNgdsZOgdtZPdudvZQdwdxZRdydzZSd{d|ZTd}d~ZUddZVddZWddZXddZYejDjZe $e j[j\dkddejDj]ddZ^ddZ_ddZ`ejDEde $dNdOgeae j$dddidgdUd)fe j$eJddidd0fe j$deJdffgddidd0fe $dNdOgeae $dSge j$eJidgdUgdUd0fgddZbdS)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': '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': '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': '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': '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': '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" N)BytesIO)assert_assert_array_equal assert_raisesassert_raises_regex assert_warns)formatz<>idtype )2)xi4ryf8rrzu1g@g@g@g@ rInfo)valuec16)y2rInfo2)nameS2)r r!r)y3rr)z3u4rr$)z2b1)colorr&info)NameU8)Valuer!rr@nny@NNTcc)r4r1@ooy@OOFdd)r8r6<>)czcCs8t|j}t||td|}t|}t||dS)Nr)rdescr_to_dtypedescrr`rjrr[r)rdt1rrZrIrIrJtest_descr_to_dtypeUs 2  rcCst}ddtdD}tjd|d}tj||ddtjdd }td d t t||t |d j t uWdn1sBwY| d | }t t|tjd k| d t|}t||tttj||d dS)NcSg|] }d|dtfqSz%ddfloat.0rrIrIrJ z$test_version_2_0..r rrversionTrecordalwaysrrr3r)rrrjrkrrSwarningscatch_warningsfilterwarnings UserWarningrcategoryseekreadlinelen ARRAY_ALIGNrUrrrg)rXrrwheadernrIrIrJtest_version_2_0s      rc Cs(ddtdD}tjd|d}tj|d}tj|d}tttj |d|j |j d d tj |d|j |j d d }||d <| tj |d d}t ||tjdd,}tddttj |d|j |j dd }t|djtu||d <| Wdn1swYtj |d d}t ||dS)NcSrrrrrIrIrJrrz+test_version_2_0_memmap..rrr zversion2_01.npyzversion2_02.npyrtr)rur rvrr.ryrzTrrrr)rrjrkr}r~rrrgrrr rvrrrrrrrr)rrrtf1tf2rrrIrIrJtest_version_2_0_memmaps2    rc Cst}td}tj||ddt||tj||ddt||tj||ddt||gd}|D]}ttdtj|||dWdn1sRwYq8dS)Nr3rrr))r3r3)rr)rr3r)rz we only support format version.*)rrjarangerrSrrg)rXrW bad_versionsrrIrIrJtest_write_versions"    r)sNUMPYsNUMPYsNUMPYsNUMPYsNUMPYsNUMPY)sNUMPYsNUMPYsnumpysMATLBsNUMPYsNUMPYcCst}t}tjdtd}tj||ddtj||dd|d|dt|}t|}t|dkt|dkt| tj kt| tj kdS)Nrrr rrrr) rrjrkrrrSr read_magicrtell MAGIC_LEN)s1s2rWversion1version2rIrIrJtest_read_magics      rcCs$tD] }t|}tttj|qdSrK)malformed_magicrrrgrrUmagicrXrIrIrJtest_read_magic_bad_magicsrcCs(ttD] }t|}tttj|qdSrK)bad_version_magicrrrrgrrUrrIrIrJtest_read_version_1_0_bad_magic s rcCsDtttjddtttjddtttjddtttjdddS)Nrr3)rrgrrrIrIrIrJtest_bad_magic_argssrcCsFt}ddd}t||t}ddddd}tttj||dS)Nr3r)rrxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr)rrr<)rrwrite_array_header_1_0rrgsrrIrIrJtest_large_headers   rcCrt}tjdtd}tj||dd|tjt|\}}}t | tj dkt |||fddtfkdS)Nrr rrrF) rrjrkrrrSrrread_array_header_1_0rrrrrWrvfortranr rIrIrJtest_read_array_header_1_0# r cCr)Nrr rrrF) rrjrkrrrSrrread_array_header_2_0rrrr rIrIrJtest_read_array_header_2_00r rcCst}tttj|td}tttj|td}tttj|ddd}t}t||tttj|ddddd}t}t||tttj|dS) N1sr3rr)rvrFr)rvrwrextrakey)rrrgrrrrrIrIrJtest_bad_header=s(  rcCstjdks tjdkrtdtj|d}zddl}|ddd|gWnt y3td Ynwt |d }| d t d }t ||Wdn1sTwYt |d }| d t |}Wdn1sswYt||dS)Nwin32cygwinz)Unknown if Windows has sparse filesystems sparse_filertruncatez-s 5368709120zCould not create 5GB large filerslr?rx)sysplatformpytestskipr}r~r subprocess check_call Exceptionrrrjrrrr)rtf_namesprXrryrIrIrJtest_large_file_supportXs&        r!ztest requires 64-bit system)reasoncCsz tjdtjd}WntytdYnwtj|d}t |d}tj ||dWdn1s7wYt |d}t |d}Wdn1sSwYt |j |j kdS) N)i@rr zCould not create large file large_archiversrhrxrW)rjemptyuint8 MemoryErrorrrr}r~rrrrrrv)rrrrXnew_arIrIrJtest_large_archiveqs   r(cCsHtj|d}t|t| }WddS1swYdS)Nz nothing.npz)r}r~rrjrr)rrnpsrIrIrJtest_empty_npzs   "r*c Cstjgddtfdtfgd}tj|d}t|d}tj||ddWdn1s.wYt|d  }t |}Wdn1sHwYt ||t|d-}t t tj||ddWdn1sowYWddSWddS1swYdS) N)r3rrr+rintu整形r z unicode.npyrs)rrrrx) rjrr,r}r~rrrrSrUrrr)rrWrrXrZrIrIrJtest_unicode_field_namess(       "r-zdt, failS3somestuff)metadatasubarrayrcCstjd|d}t}ttt||Wdn1swY|d|rGttt |WddS1s@wYdSt |}ddl m }t ||||j s^J||j reJdS)Nr r r) _has_metadata)rjrkrrrrrrrgrnumpy.lib.formatr3rr )rfailrWbufrZr3rIrIrJtest_metadata_dtypes     "   r7)c__doc__rr}shutiltempfilerriornumpyrj numpy.testingrrrrr numpy.librr%int8uint16int16uint32int32uint64int64float32float64 complex64 complex128rescalarsrascalarendianr newbyteorderrastypebasicextendrreshapeTPdescrPbufferTNdescrNbufferTrrbr@r[r\r]r`rdrfrirprrrdt2dt3dt4dt5dt6mark parametrizerrrrr,rrrrrrrrrrrr rrr!skipifintprslowr(r*r-rr7rIrIrIrJsv       &&       /         1