a :jg÷Ÿã@sÂdZddlZddlZddlZddlZddlmZddlZddl m Z m Z m Z m Z mZmZmZddlmZddlmZejejejejejejejejejejejej e!g Z"gZ#e"D]€Z$dD]vZ%e &e$¡ 'e%¡Z&e (d¡ )e&¡Z*e# +ej,ge&d ej,d e&d e*e* -d ¡e* -d ¡j.e* -d ¡ddd …ddd …fg¡qºq²gd¢Z/dd gddgddggdfddgddgddggdfgZ0dddddgd¢fddgfdd d!d"gfd#d$gZ1dd gd%dd&d%d'gddgd(d gfd)d*fd+d,ddgddggdfddgd-dd.d-d/gddgd d(gfd0d1fd2d3ddgddggdfgZ2ej,e0e &e/¡ 'd4¡d ej,e2e &e1¡ 'd4¡d ej,e0e &e/¡ 'd5¡d ej,e2e &e1¡ 'd5¡d ej3d(d6gd gZ4Gd7d8„d8eƒZ5d9d:„Z6d;d<„Z7d=d>„Z8d?d@„Z9dAdB„Z:dCdD„Z;dEdF„Zj?edIdJej>j@dKdL„ƒƒZAdMdN„ZBej&dOd*dPZCe &dQdRgdSdSgd(dTgdUœ¡ZDe &dVdWgdSeDgdXœ¡ZEe &gdY¢dSgddXœ¡ZFe &dQdRgdSdSgd(dTgdZd[gd\œ¡ZGe &ggdd]œ¡ZHej> Id^eCeDeEeFeGeHg¡d_d`„ƒZJej>j?ejKdakdbdJej>jLedcdJddde„ƒƒZMdfdg„ZNdhdi„ZOej> Id^e &ej&dQejfdRejfdVejfgd*dPdj¡e &dke &dQdRgdldlgddgddmœdj¡dnfg¡e &dog¡e &dke &e &e &dQdRgdldlgddgddmœ¡djf¡dnf¡fg¡e &dQe &e &e &e &dQePfdRe &dQdRgdldlgddgddmœ¡fg¡djf¡dnf¡dpf¡fg¡g¡dqdr„ƒZQdsdt„ZRej>j?edIdJdudv„ƒZSej> Idwdxdg¡dydz„ƒZTd{d|„ZUd}d~„ZVgd¢ZWgd€¢ZXdd‚„ZYdƒd„„ZZd…d†„Z[d‡dˆ„Z\d‰dŠ„Z]d‹dŒ„Z^ddŽ„Z_dd„Z`d‘d’„Zaej>j?ed“dJej>j?e &ejb¡jcdkd”dJej>j@ed•d–d—d˜„ƒƒƒƒZdd™dš„Zed›dœ„Zfddž„Zgej> Id^e &dQdRgehej&dŸd d¡id¢gdXœ¡ej&ePd d¡id¢ej&d£ePd¤ffgd d¡id¢e &dQdRgehe &dVgej&ePid¢gdXœ¡gdXœ¡g¡ej>j?eo¬ejijjd¥kd¦dJd§d¨„ƒƒZkdS)©a¹D Test the .npy file format. Set up: >>> import sys >>> from io import BytesIO >>> from numpy.lib import format >>> >>> scalars = [ ... np.uint8, ... np.int8, ... np.uint16, ... np.int16, ... np.uint32, ... np.int32, ... np.uint64, ... np.int64, ... np.float32, ... np.float64, ... np.complex64, ... np.complex128, ... object, ... ] >>> >>> basic_arrays = [] >>> >>> for scalar in scalars: ... for endian in '<>': ... dtype = np.dtype(scalar).newbyteorder(endian) ... basic = np.arange(15).astype(dtype) ... basic_arrays.extend([ ... np.array([], dtype=dtype), ... np.array(10, dtype=dtype), ... basic, ... basic.reshape((3,5)), ... basic.reshape((3,5)).T, ... basic.reshape((3,5))[::-1,::2], ... ]) ... >>> >>> Pdescr = [ ... ('x', 'i4', (2,)), ... ('y', 'f8', (2, 2)), ... ('z', 'u1')] >>> >>> >>> PbufferT = [ ... ([3,2], [[6.,4.],[6.,4.]], 8), ... ([4,3], [[7.,5.],[7.,5.]], 9), ... ] >>> >>> >>> Ndescr = [ ... ('x', 'i4', (2,)), ... ('Info', [ ... ('value', 'c16'), ... ('y2', 'f8'), ... ('Info2', [ ... ('name', 'S2'), ... ('value', 'c16', (2,)), ... ('y3', 'f8', (2,)), ... ('z3', 'u4', (2,))]), ... ('name', 'S2'), ... ('z2', 'b1')]), ... ('color', 'S2'), ... ('info', [ ... ('Name', 'U8'), ... ('Value', 'c16')]), ... ('y', 'f8', (2, 2)), ... ('z', 'u1')] >>> >>> >>> NbufferT = [ ... ([3,2], (6j, 6., ('nn', [6j,4j], [6.,4.], [1,2]), 'NN', True), 'cc', ('NN', 6j), [[6.,4.],[6.,4.]], 8), ... ([4,3], (7j, 7., ('oo', [7j,5j], [7.,5.], [2,1]), 'OO', False), 'dd', ('OO', 7j), [[7.,5.],[7.,5.]], 9), ... ] >>> >>> >>> record_arrays = [ ... np.array(PbufferT, dtype=np.dtype(Pdescr).newbyteorder('<')), ... np.array(NbufferT, dtype=np.dtype(Ndescr).newbyteorder('<')), ... np.array(PbufferT, dtype=np.dtype(Pdescr).newbyteorder('>')), ... np.array(NbufferT, dtype=np.dtype(Ndescr).newbyteorder('>')), ... ] Test the magic string writing. >>> format.magic(1, 0) '\x93NUMPY\x01\x00' >>> format.magic(0, 0) '\x93NUMPY\x00\x00' >>> format.magic(255, 255) '\x93NUMPY\xff\xff' >>> format.magic(2, 5) '\x93NUMPY\x02\x05' Test the magic string reading. >>> format.read_magic(BytesIO(format.magic(1, 0))) (1, 0) >>> format.read_magic(BytesIO(format.magic(0, 0))) (0, 0) >>> format.read_magic(BytesIO(format.magic(255, 255))) (255, 255) >>> format.read_magic(BytesIO(format.magic(2, 5))) (2, 5) Test the header writing. >>> for arr in basic_arrays + record_arrays: ... f = BytesIO() ... format.write_array_header_1_0(f, arr) # XXX: arr is not a dict, items gets called on it ... print(repr(f.getvalue())) ... "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (0,)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': ()} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (15,)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 5)} \n" "F\x00{'descr': '|u1', 'fortran_order': True, 'shape': (5, 3)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 3)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (0,)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': ()} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (15,)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 5)} \n" "F\x00{'descr': '|u1', 'fortran_order': True, 'shape': (5, 3)} \n" "F\x00{'descr': '|u1', 'fortran_order': False, 'shape': (3, 3)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (0,)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': ()} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (15,)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 5)} \n" "F\x00{'descr': '|i1', 'fortran_order': True, 'shape': (5, 3)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 3)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (0,)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': ()} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (15,)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 5)} \n" "F\x00{'descr': '|i1', 'fortran_order': True, 'shape': (5, 3)} \n" "F\x00{'descr': '|i1', 'fortran_order': False, 'shape': (3, 3)} \n" "F\x00{'descr': 'u2', 'fortran_order': False, 'shape': (0,)} \n" "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': ()} \n" "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (15,)} \n" "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (3, 5)} \n" "F\x00{'descr': '>u2', 'fortran_order': True, 'shape': (5, 3)} \n" "F\x00{'descr': '>u2', 'fortran_order': False, 'shape': (3, 3)} \n" "F\x00{'descr': '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_raisesÚassert_raises_regexÚ assert_warnsÚIS_PYPYÚIS_WASM)Úrequires_memory)Úformatz<>iÜ©Údtypeé )éé2éÿÿÿÿé)©ÚxÚi4©r©ÚyÚf8©rr©ÚzÚu1ég@g@éég@g@é rZInfo)ÚvalueÚc16)Úy2rZInfo2)©ÚnameÚS2)r"r#r)Zy3rr)Zz3Zu4rr%)Zz2Úb1)Úcolorr'Úinfo)ÚNameZU8)ÚValuer#rrù@Únny@éÚNNTÚcc)r0r-ù@Zooy@ÚOOFÚdd)r3r2ú<ú>)Úc©z•óz$test_version_2_0..éôéèr ©rr©ÚversionT©ÚrecordÚalwaysrré@ ©Úmax_header_size©r/r)rr”rdrer rMÚwarningsÚcatch_warningsÚfilterwarningsrŸrÚcategoryÚseekÚreadlineÚlenÚ ARRAY_ALIGNrOrrra)rRr’rŽÚwÚheaderÚnrDrDrEÚtest_version_2_0’s 0   rÛc Cs.dd„tdƒDƒ}tjd|d}tj |d¡}tj |d¡}tttj |d|j |j d d tj |d|j |j d d }||d <|  ¡tj |d dd}t ||ƒtjddX}t ddt¡tj |d|j |j dd }t|djtuƒ||d <|  ¡Wdƒn1s0Ytj |d dd}t ||ƒdS)NcSsg|]}d|dtf‘qSr¼r¾rÀrDrDrEr®rÃz+test_version_2_0_memmap..rÄrÅr zversion2_01.npyzversion2_02.npyrlrÏ)rmr rnrÈrÆ.rqrÌ)rmrÎTrÉrËrr)r”rdrersrtrurrar rzr rnr{rrÐrÑrÒrŸrrÓ)r|r’rŽZtf1Ztf2rrØrDrDrEÚtest_version_2_0_memmap«s0ÿ ÿ  ÿ(rÜÚ mmap_moderqcCstj |d¡}tjddddd}tjtddt ||¡Wdƒn1sT0Ytj t d dtj ||d Wdƒn1s0Ytj t d d tj ||d d Wdƒn1sÎ0Ytj ||d d}t ||ƒtj ||dd }t ||ƒdS)Nzlarge_header.npyr/úi,é'r}r ú .*format 2.0r™ú Header.*large)rÝé N)rÝrÎT)rÝrKé ¿) rsrtrurdrªrržrŸr¶Úraisesrar‚r)r|rÝrRrQÚresrDrDrEÚtest_huge_headerÊs*,. ræcCstj |d¡}tjddddd}tjtddtj||d Wdƒn1sV0Ytj t d dt  |¡d Wdƒn1s’0Ytj t d d"tj |d d d Wdƒn1sÒ0Ytj |ddd }t ||ƒtj |dd d }t ||ƒdS)Nzlarge_header.npzr/rÞrßr}r ràr™rbrárQrârÍTrJrã) rsrtrurdrªrržrŸr•rärar‚r)r|rRrQrårDrDrEÚtest_huge_header_npzÞs,,0 rçc Cs´tƒ}t d¡}tj||ddt ||¡tj||ddt ||¡tj||ddt ||¡gd¢}|D]>}ttdƒ tj|||dWdƒqp1s¤0YqpdS)Nr/rÏrÇrÆ))r/r/)rr)rr/r)éÿrèz we only support format version.*)rrdÚaranger rMrra)rRrQZ bad_versionsrÈrDrDrEÚtest_write_versionòs    ÿrê)s“NUMPYs“NUMPYs“NUMPYs“NUMPYs“NUMPYs“NUMPYÿÿ)s’NUMPYsNUMPYs“numpys“MATLBs“NUMPYs“NUMPYrÃcCs¢tƒ}tƒ}tjdtd}tj||ddtj||dd| d¡| d¡t |¡}t |¡}t|dkƒt|dkƒt|  ¡tj kƒt|  ¡tj kƒdS)N©rrŠr rÏrÇrÆr) rrdrer¿r rMrÔZ read_magicrÚtellÚ MAGIC_LEN)Ús1Ús2rQZversion1Zversion2rDrDrEÚtest_read_magics      rðcCs$tD]}t|ƒ}tttj|ƒqdSrV)Úmalformed_magicrrrar rO©ÚmagicrRrDrDrEÚtest_read_magic_bad_magic4srôcCs(ttD]}t|ƒ}tttj|ƒqdSrV)Úbad_version_magicrñrrrar rOròrDrDrEÚtest_read_version_1_0_bad_magic:s röcCsDtttjddƒtttjddƒtttjddƒtttjddƒdS)Nrr/é)rrar rórDrDrDrEÚtest_bad_magic_args@srøcCsLtƒ}tƒdddœ}t ||¡tƒ}dddfg|d<tttj||ƒdS)NFz.rú rù) r”r ZGROWTH_AXIS_MAX_DIGITSrrûrdr rrÖrN)Zis_fortran_arrayZ dtype_spaceZexpected_header_lengthrAr~rDrDrEÚtest_header_growth_axisÛsÿýr ZS3ZsomeÚstuff)ÚmetadataZsubarrayr)érrzPyPy bug in error formattingcCsžtjd|d}tƒ}ttƒt ||¡Wdƒn1s>0Y| d¡t |¡}ddlm }t ||ƒ||j ƒ|j us†J‚||j ƒ|j usšJ‚dS)Nrr r)Ú drop_metadata) rdrerrrŸr¶rÔr‚Znumpy.lib._utils_implr$rr )r’rQÚbufrTr$rDrDrEÚtest_metadata_dtypeés *    r&)lÚ__doc__r rsrÐrÚiorÚnumpyrdZ numpy.testingrrrrrrr Znumpy.testing._private.utilsr Z numpy.libr rZint8Zuint16Zint16Zuint32Zint32Zuint64Zint64Zfloat32Zfloat64Z complex64Z complex128r_Zscalarsr[ZscalarZendianr Z newbyteorderréZastypeÚbasicÚextendrªZreshapeÚTZPdescrZPbufferTZNdescrZNbufferTr“r\r;rUrWrXrZr^r`rcrhÚmarkZskipifZslowr€r†rºZdt2Zdt3Zdt4Zdt5Zdt6Z parametrizer–Ú version_infoZxfailr¡rµr·rr»rÛrÜrærçrêrõrñrðrôrörørþrrrrZintpr‘rrrr r¿ÚimplementationrÈr&rDrDrDrEÚs„ $  ó   ô ý ÷ þï&ÿ&ÿú û    ÿ ÿ  /þýüýûú   ýûø  ýþø õ òÿã1       ÿÿ  ÿú ÿ