;igdZddlZddlZddlZddlZddlZdZ ddlZe eds&ddl Zej j e_ ej j e_ dZn #dZdZYnxYwd dZGddeZeZGd d eZdS) a MetaArray.py - Class encapsulating ndarray with meta data Copyright 2010 Luke Campagnola Distributed under MIT/X11 license. See license.txt for more information. MetaArray is an array class based on numpy.ndarray that allows storage of per-axis meta data such as axis values, names, units, column names, etc. It also enables several new methods for slicing and indexing the array based on this meta data. More info at http://www.scipy.org/Cookbook/MetaArray NTGroupFcVi}gd}|||d<|||d<|||d<|g|d<|D]}t|tkrt|tkr|g}i}tdt |D]}|||||<|d||S)zNConvenience function for generating axis descriptions when defining MetaArrays)nameunitstitleNrvaluesrcolsr)typelisttuplerangelenappend) rr rrax cNameOrderccolis QC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/metaarray/MetaArray.pyaxisr%s B+++J 6  8  7  6  # #AAww$477e#3#3CC1SVV__ * *%&qTJqM"" vJ  c " " " " IceZdZdZdZdZdS)sliceGeneratorz7Just a compact way to generate tuples of slice objects.c|SNselfargs r __getitem__zsliceGenerator.__getitem__< rc|Srrrs r __getslice__zsliceGenerator.__getslice__>r!rN)__name__ __module__ __qualname____doc__r r#rrrrr:s8AArrcZeZdZdZdZdZeegZe dZ e gdZ dIdZ dZdJd Zd Zed Zed Zed ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dJdZ"dZ#dZ$dZ%dZ&d Z'd!Z(dJd"Z)d#Z*d$Z+d%Z,dKd'Z-d(Z.d)Z/dJd*Z0d+Z1d,Z2d-Z3d.Z4d/Z5d0Z6d1Z7d2Z8d3Z9d4Z:d5Z;dJd6ZdJd9Z?d:Z@d;ZAe d<ZBdLd=ZCdMd>ZDdNd?ZEd@ZFe dLdAZGe dLdBZHdCZIdDZJdEZKdFZLdNdGZMdJdHZNdS)O MetaArrayaN-dimensional array with meta data such as axis titles, units, and column names. May be initialized with a file name, a tuple representing the dimensions of the array, or any arguments that could be passed on to numpy.array() The info argument sets the metadata for the entire array. It is composed of a list of axis descriptions where each axis may have a name, title, units, and a list of column descriptions. An additional dict at the end of the axis list may specify parameters that apply to values in the entire array. For example: A 2D array of altitude values for a topographical map might look like info=[ {'name': 'lat', 'title': 'Lattitude'}, {'name': 'lon', 'title': 'Longitude'}, {'title': 'Altitude', 'units': 'm'} ] In this case, every value in the array represents the altitude in feet at the lat, lon position represented by the array index. All of the following return the value at lat=10, lon=5: array[10, 5] array['lon':5, 'lat':10] array['lat':10][5] Now suppose we want to combine this data with another array of equal dimensions that represents the average rainfall for each location. We could easily store these as two separate arrays or combine them into a 3D array with this description: info=[ {'name': 'vals', 'cols': [ {'name': 'altitude', 'units': 'm'}, {'name': 'rainfall', 'units': 'cm/year'} ]}, {'name': 'lat', 'title': 'Lattitude'}, {'name': 'lon', 'title': 'Longitude'} ] We can now access the altitude values with array[0] or array['altitude'], and the rainfall values with array[1] or array['rainfall']. All of the following return the rainfall value at lat=10, lon=5: array[1, 10, 5] array['lon':5, 'lat':10, 'val': 'rainfall'] array['rainfall', 'lon':5, 'lat':10] Notice that in the second example, there is no need for an extra (4th) axis description since the actual values are described (name and units) in the column info for the first axis. 2NcNtfdtjDS)Nc38K|]}t|VdSr) isinstance).0tvars r z'MetaArray.isNameType..~s-CC!:c1%%CCCCCCr)anyr) nameTypes)r0s`r isNameTypezMetaArray.isNameType|s)CCCCy/BCCCCCCr)__eq____ne____le____lt____ge____gt__Fc tt|tjdtdd|_|Ed|_|j|fi||ddr|jtd|zn||_ t|dr;| d r&|j |_ | |_nMt|trt!j|| |_nt!j||| |_|dS) Nz}MetaArray is deprecated and will be removed in 0.14. Available though https://pypi.org/project/MetaArray/ as its own package.) stacklevelF readAllDataTzFile read failed: %s implementsr)dtype)rAcopy)object__init__warningswarnDeprecationWarning_isHDF_datareadFileget Exception_infohasattrr?asarrayr-r npemptyarray checkInfo)rdatainforAfilerBkwargss rrDzMetaArray.__init__s=  W 1      DJ DM$ ) )& ) ) )zz-.. ?4:3E 6 =>>>DJl++ D 0L0L D!Z !\\^^ D%(( DXd%888 Xd%dCCC  rc 4|j}|1|jdSdt|jdzD|_dS t |}n#t dxYwt ||jdzkr2|ig|jdzt |z zn*t ||jdzkrt dtt |D]}t||ts||i||<nt d||jkrd||vr t||dtur*tj ||d||d<n6t||dtj urt d||djdks(||djd|j|krLt d |t||djt|j|ffz||jkrd ||vrt||d ts$t ||d ||d <t ||d |j|kr9t d |t ||d |j|fz||_dS) Ncg|]}iSrr)r.rs r z'MetaArray.checkInfo..s???Qb???rz*Info must be a list of axis specificationsz5Info parameter must be list of length ndim+1 or less.z'Axis specification must be Dict or Nonerz0Axis values must be specified as list or ndarrayrzJValues array for axis %d has incorrect shape. (given %s, but should be %s)r zSLength of column list for axis %d does not match data. (given %d, but should be %d))rMrIr ndimr rLrextendr-dictr rPrRndarrayshapestr)rrUrs rrSzMetaArray.checkInfosz <z!??% A *>*>???  NDzz N LMMM4yy49Q;&& RD$)A+c$ii"789999TTYq[(( WXXX3t99%% R R!$q'400SAw"$Q'(QRRRty==Xa%8%8DGH-..$66,.HT!WX5F,G,GQ))d1gh/00 BB'(Z[[[Awx(-22d1gh6G6Ma6PTXT^_`Ta6a6a'(t)*CQ0A0G,H,H#tzZ[}N^J_J_(`)abbbty==VtAw%6%6%d1gfot<<@*.tAwv*?*?Q476?++tz!}<<'(})*CQ,@,@$*Q-(P)QRRRDJJJs A Ac|dgS|dkS)Nr)r)rrs rr?zMetaArray.implementss <= ;& &rcL||}|j|}t||jkr t jd|Dr|Sg}|jd}tdt|D]e}t||ttfvs t||tj r0|||||v||||}d}d} |D]} | dkr^d|vrg|d<|d|| d|| vr|| d|d<d|| vr|| d} f| dkr || }u| |vr || || <|| || <d|vr9| | | |d<7| 't!|dzt!| z|d<`||d<g||t#||S) NcRg|]$}t|ttjf %Sr)r-slicerPr_)r.inds rrZz)MetaArray.__getitem__..s,PPPC:cE2:+>???PPPrrr rrz: rU)_interpretIndexesrIrr\rPallrMrBr r rer r-r_r _axisSlicerar)) rrfnIndarU extraInfornewInforcolNameks rr zMetaArray.__getitem__sL%%c** Jt  t99 ! !vPP4PPPQQ JrN'')) q#d))$$ 5 5ADG}} --DGRZ1P1P- DOOAtAw778888//!T!W55 22AF{{!2202If-!&)00<<<"gaj0018G1DIg.!WQZ//&-aj&8Gf&qzI--+21:IaL'.qz ! **|".07If-".03D D0@3w<<0OIf--04If- I&&&&rc*t|jSr)rr`rs rr\zMetaArray.ndims4:rc|jjSr)rIr`rss rr`zMetaArray.shape zrc|jjSr)rIrArss rrAzMetaArray.dtyperurc*t|jSr)rrIrss r__len__zMetaArray.__len__s4:rc:|t|Sr)r re)rargss rr#zMetaArray.__getslice__ st ---rct||} ||j|<dS#t|||xYwr)rirIprint)rrfvalrls r __setitem__zMetaArray.__setitem__sJ%%c** "DJt     $c " " " s #7c\||jvrt|j|St|r) wrapMethodsgetattrrIAttributeError)rattrs r __getattr__zMetaArray.__getattr__s0 4# # #4:t,, , && &rc.|d|S)Nr5_binoprbs rr5zMetaArray.__eq__{{8Q'''rc.|d|S)Nr6rrs rr6zMetaArray.__ne__rrc.|d|S)N__sub__rrs rrzMetaArray.__sub__"{{9a(((rc.|d|S)N__add__rrs rrzMetaArray.__add__%rrc.|d|S)N__mul__rrs rrzMetaArray.__mul__(rrc.|d|S)N__div__rrs rrzMetaArray.__div__+rrc.|d|S)N __truediv__rrs rrzMetaArray.__truediv__.s{{=!,,,rcTt|tr|}|}t|||}|j|jkr t d|jd|jdt||S)NzVBinary operators with MetaArray must return an array of the same shape (this shape is z, result shape was )rh)r-r)rOrr`rLinfoCopy)roprrmrs rrzMetaArray._binop1s a # #  A LLNN GArNN1   7ag  )QRQXQXQXZ[ZaZaZabcc c1111rct|jtjr|jStj|jSr)r-rIrPr_rRrss rrOzMetaArray.asarray:s2 dj"* - - (: 8DJ'' 'rc|||S||Sr)rOastype)rrAs r __array__zMetaArray.__array__@s1 =<<>> !<<>>((// /rc||}d|j|vr|j|dStdt||fz)z%Return the list of values for an axisrz,Array axis %s (%d) has no associated values.)_interpretAxisrMrLrarrrs r axisValueszMetaArray.axisValuesGsW   & & tz"~ % %:b>(+ +JcRViiY[_\]] ]rc,||S)zSynonym for axisValues())rrrs rxvalszMetaArray.xvalsOst$$$rcJ||}d|j|vS)NrrrMrs r axisHasValueszMetaArray.axisHasValuesSs&   & &4:b>))rcJ||}d|j|vS)Nr rrs raxisHasColumnszMetaArray.axisHasColumnsWs&   & &B''rc^|j||}d|vr|dSdS)zReturn the units for axisrNrMrrs r axisUnitszMetaArray.axisUnits[s6 Z++D11 2 b==g;  =rc|j||}d|vr|dD]}|d|krdSdS)Nr rTFr)rrrrrs r hasColumnzMetaArray.hasColumnasX Z++D11 2 R<<Z  V9##44$urc.|bi}t|jD]I}d|j|vrd|j|dD}ng}||||<J|S||}d|j|dDS)zxReturn a list of column names for axis. If axis is not specified, then return a dict of {axisName: (column names), ...}.Nr cg|] }|d Srrr.rs rrZz)MetaArray.listColumns..osEEE!AfIEEErcg|] }|d Srrrs rrZz)MetaArray.listColumns..vs@@@!AfI@@@r)r r\rMaxisNamer)rrretrr s r listColumnszMetaArray.listColumnsis <C49%% - -TZ]**EEtz!}V/DEEEDDD(,DMM!$$%%J&&t,,D@@tz$'7'?@@@ @rcj|j||}|d|dS)Nr rr)rrrrs r columnNamezMetaArray.columnNamexs/ Z++D11 2&z#v&&rcD|j|d|S)Nr)rMrK)rns rrzMetaArray.axisName|sz!}  +++rc(|j||}d|vrP|dD]}|d|kr |dcStdt|dt|tdt|z)z#Return the units for column in axisr rrzAxis z has no column named z!Axis %s has no column definitions)rMrrLra)rrcolumnrrs r columnUnitszMetaArray.columnUnitss Z++D11 2 R<<Z & &V9&&W:%%%')D 3v;;;WXX X?#d))KLL LrrcR||}|}t|tkr)tdg|z}||n6t |t rt||f}ntd|t|S)zReturn this object with all records sorted along axis using key as the index to the values to compare. Does not yet modify meta info.Nzaxis must be type (int, str)) argsortr intrerr-ra TypeErrorr )rrkeykeyListorderrfs rrowsortzMetaArray.rowsortss)!! ::  ;;-$C JJu     c " " <u%%'CC:;; ;E#JJrcrt|j}||}||xxdz cc<tt ||j|j}tdg|jz}tdd||<||t |<d||<||t |<|S)zPReturn this object with val appended along axis. Does not yet combine meta info.r[)rUrANrg) r r`rr)r rMrArer\)rr}rsrrfs rrzMetaArray.appends   ""4(( $1  eAhhTZtz B B BT{{mDI%$rNND %** D %** rc||}ttj||||jS)z[Return the concatenation along axis of this object and val. Does not yet combine meta info.rh)rr)rP concatenaterM)rr}rs rr]zMetaArray.extends:""4((c488tzJJJJrc|tj|jStj|j||S)z8Return a deep copy of the axis meta info for this object)rBdeepcopyrMrrs rrzMetaArray.infoCopys> <=,, ,=D,?,?,E,E!FGG Grcvt|j|SNrh)r)rIrBrrss rrBzMetaArray.copys)**AAAArct|tsVt|tr>t|dkr+t|dtrt|}n|f}t dg|jz}d}t dt|D],}|||||\}}}|||<|rd}-t|S)NrTF)r-r r rrer\r _interpretIndex)rrfrlnumOkrrindexisNameds rrizMetaArray._interpretIndexess#u%% #t$$ SA*SVU:S:SCjjfd }TY&qS""  A%)%9%9#a&!U%K%K "T5'DJ T{{rcht|ttfr||S|Sr)r-rar _getAxisrs rrzMetaArray._interpretAxiss/ dS%L ) ) ==&& &Krc~t|turstd|dfSt|r*std|dfSt|t urst|js t|jr/ |j}t|jr||j}nt|jtst|j trdj |vr|j||j k}nc|j ||jk}n=||jk||j kz}|}nt|jtst|j tr*|j |j}nt |j|j }nt|jturg}|jD]y}t|tur||.t|r*|||r|j}n|j}||dfS|dfSt|turfd|D}|dfSstd|dfS)Nz7string and integer indexes may not follow named indexesFrTcJg|]}|d S)r[)r)r.rrposrs rrZz-MetaArray._interpretIndex..s0KKK!t++AsE::1=KKKr)r rrLr)r4 _getIndexrestartstoprr-floatsteprMrr r) rrfrrrrmaskrindLists ` `` rrzMetaArray._interpretIndexs1 99   [ YZZZe$ $    $ $E % [ YZZZS1159 9 #YY%  ##CI..5 ))2F2Fsx2P2P5 )**3955''11(% NN4::EE!511#%Z%5P5P#%W_cgcmnrcsWsWsx'#zz$//#(:)#zz$//38; $ 4 0 0CH <DAQAQTWT\A\] EE #..%*SXs2K2K%x' # %ch 9 9#(^^t++E X""77c>>!LLOOOO&11!44"!LLa)@)@AAAA%(HE! HEeT**S%(( #YY$  KKKKKKsKKKG%( ( [ YZZZe$ $rctdt|jD]#}|j|}d|vr|d|kr|cS$td|d|j)NrrzNo axis named z . info=)r rrMrL)rrrrs rrzMetaArray._getAxis#slq#dj//**  A:a=D~~$v,$"6"6i$$$ KLLLrc|j|}|Vd|vrRtdt|dD].}d|d|vr|d|d|kr|cS/td|||jfz)Nr rrz)Axis %d has no column named %s. info=%s)rMr rrL)rrrrrs rrzMetaArray._getIndex*s Z  >fll1c"V*oo..  RZ]**r&z!}V/D/L/LHHHDdTXT^G__```rc@tj|j|Sr)rBrrM)rrs r _axisCopyzMetaArray._axisCopy2s}TZ]+++rczd|j|vsd|j|vr||}d|vrNtj|d|}t |tjrt |}||d<d|vr#tj|d||d<n |j|}|S)Nr r)rMrrPrRr-r_r )rrr rsls rrkzMetaArray._axisSlice5s TZ] " "h$*Q-&?&?""B||Xbj))$/b"*--"bB6 2~~!x8 55d;8 AB rc @d}g}d}tt|jdz D]}|j|}d}d|vr|dt|dzz }n|d|zz }d|vr|dt|dzz }||t||krt|}tt |jt|jdz D]}|j|}||}|d d |t|z d ztt|j|z z|j|fzz }d |vrp|j|dkrZ|d d}|d |zz }|j|dkr-|d d}|d|||z |j|dz z fzz }n |dz }n|dz }d|vr|dz }g} tt|dD]Z} |d| } t| d| } d| vr| d| dzz } | | [|dd | zdzz }||dzz }|t|jdz }|S)Nrr[rz"%s"z%drz (%s)z%s[%d] : rz values: [%grgz ... %g] (step %g)]z values: []r z columns: [z,  ) r rrMrarminr\r`rKjoin) rrtitlesmaxlrraxsv0v1colstrsrrcss r prettyInfozMetaArray.prettyInfoGs s4:q()) AABC||vBvJ//tax"}}wR[!1!111 MM#   3xx$3xxs49c$*oo&9::;;  AAB)C :s3xx!(;c#djQRmBTBT>U>U(U!VX\XbcdXe ff fC2~~:a=1$$HaB?b11Cz!}q((\"-3rBG ST XYHY;Z6[[[s >)C|||#s2f://''AV*Q-CSWWVQ//00B#~~gG 44NN2&&&&sTYYw///#55 tOAA SB  rc|tjd|S)Nz1 ----------------------------------------------- )viewrPr___repr__rrss rrzMetaArray.__repr__usELPIIVXV`LaLaLjLjLlLlLlLlnrn}n}nnnA Arc*|Sr)rrss r__str__zMetaArray.__str__xs}}rct|j|}| ||g|Ri|S|}||}||t ||g|Ri||Sr)rrIrrpopr))rfnrrzkargsrUs raxisCollapsingFnzMetaArray.axisCollapsingFn{s TZ $ $ <2d+T+++U++ +==??D&&t,,D HHTNNNRR5t555u55DAAA Arc&|jd|g|Ri|S)Nmeanrrrrzrs rrzMetaArray.means'$t$VTBDBBBEBBBrc&|jd|g|Ri|S)Nrrrs rrz MetaArray.min'$t$UDA4AAA5AAArc&|jd|g|Ri|S)Nmaxrrs rrz MetaArray.maxrrc t|dkrt|ddr |d}n|}fd|D}|ttt|tjz}fd|D}|ttt|jz} jr;ttj j  ||Stj ||S#t|xYw)Nr[r__iter__c:g|]}|Sr)r)r.rrs rrZz'MetaArray.transpose..s'999R$$R((999rc*g|]}j|Sr)rM)r.rrs rrZz'MetaArray.transpose..s111! 1 111rrh) rrNr r rMr\rHr)rPrRrI transposer|)rrzr infoOrderrUs` rr zMetaArray.transposes+ t99>>gd1gz::>GEEE99995999T%E C OO"D"DEEE 1111y111U3u::ty99::: { I $*!5!5!?!?!F!FTRRRR !5!5e!= 500MB). rbsHDF  Trr>r`r r@versionr[z _readData%sz:This MetaArray library does not support array version '%s'FN)openreadclose _readHDF5rHseekr) _readMetarKrPrQrIrarNrLr) rfilenamerWfdmagicmetaver rFuncNamerFuncs rrJzMetaArray.readFiles(D ! ! $RGGAJJE,,, x226222"   **2..zz-66M!#$w-tF|!L!L!LDJ$$y/CCC)CHH4 y)44h#$`cf$fgggi00b$))&)))# ) $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sDD99D=D=cd} |}|dkrn||z }3t|}|S)zRead meta array from the top of a file. Read lines until a blank line is reached. This function should ideally work for ALL versions of MetaArray. r)readlinestripeval)rrliners rrzMetaArray._readMetasS  ;;==&&((Drzz DLD   4jj rc d}|dD]O}d|vrItj||d|d|d<||dz}|d=|d=P|d|_|ddsdS|r%tj||d d |d  }n;tj||d }|d |_||_dS) Nr[rU values_len values_typer@rr>Tr rr`rAmoder`)rP frombufferrrMrKmemmapr`rI)rrrmmapkwds frameSizersubarrs r _readData1zMetaArray._readData1s v, & &Br!!!}RWWR 5E-F-FbQ^N_```8 R -- |$}%&\ xx t,,  F  )YrfCtG}UUUFF]27799DLAAAF=FL rc Ld}d}tt|dD]}}|d|} d| vri| ddkr|td|}4tj|| d| d| d<|| dz}| d=| d=~|d|_|d d sdS||d d kr8|rtd tj |} nU|r%tj ||d d|d} n.tj||d } |d| _ n|rtd|d|} g} g} t|d} d| |<tj | }d} |}|dkrn|dkrnt|}|d d kr.tj ||d}n5tj||d|d }|j||dzkrtd|zt| }|d||<||_ |||}|jd}nt%d|j|z }|j|j |}n#t)|j ||j|z }t|dd}t+||||<||kr:| |t/|n| |||dz }d|vr| |dtj| |} t| dkrtj| | d| d<| d=| d=|d|_| |_dS)Nr[rUr&dynamicz?MetaArray has more than one dynamic axis! (this is not allowed)r'r@rr>Tr rCz1memmap not supported for arrays with dtype=objectr(r`r)zSmemmap not supported for non-contiguous arrays. Use rewriteContiguous() to convert.rrrr numFramesz.Wrong frame size in MetaArray file! (frame %d)xVals)r)r rrLrPr+rrMrKpickleloadsr,r`r prodr!r#sizerrrrrerr rBr]rrRrI)rrrr-subsetr.dynAxisr/rrr0r5frames frameShaperr$infrTr`dSlicedStartdStop newSubsets r _readData2zMetaArray._readData2sH s4<(()) * *AfaBr!!l#y00*'(ijjjGG#%=L9I1J1JRTUbRc#d#d#dBxLL!11I<(=)&\ xx t,,  F ?F|x''Y#$WXXXbggii00JYrfCtT[}]]]FF]27799DLIIIF=FLL w uvvvfg&BEFd7m,,J"#Jw  ++IA. /;;==Dt||2::4jj<8++!<E (;(;<>LLW...]. /^^F999F5zz1}}!xR 5FGGG8 < =!&\  rc d|vr ||d}|dur|durtdts? |dksJ|dksJ||dS#td|zxYw|tj|j}|dk}|durd}nd}t j||}|jd } | d }n#YnxYw|tj kr:td t|d ttj d t|d} | |_|s|s|d|_||_dS|ddd|_|dS)NrTz:Incompatible arguments: readAllData=True and writable=TrueFzKThe file '%s' is HDF5-formatted, but the HDF5 library (h5py) was not found.geͽAr+r(r)utf-8z6Warning: This file was written with MetaArray version z, but you are using version z. (Will attempt to read anyway)rUrT)rL HAVE_HDF5_readHDF5Remoteosstatst_sizeh5pyFileattrsdecoder)rr|ra readHDF5MetarMrI _openFiler) rfileNamer>writablerr9r*frrs rrzMetaArray._readHDF5Ps e   3.K $  8t#3#3XYY Y z z"e++++$$X... z mpx xyyy  78$$,D%(33d33 3hii irctj|d}|jdtjkrt d|z|d=||d|j|dS)zdUsed to re-write meta info to the given file. This feature is only available for HDF5 files.rEr)OThe file %s was created with a different version of MetaArray. Will not modify.rUN) rLrMrNr)rrL writeHDF5MetarMr)rrRrTs r writeMetazMetaArray.writeMetasq Ih % % 7; 9#4 4 4mpxxyy y fI 1fdj111  rc "|j}t|tr|\}}nd}|dd}|||d<|dd}|>||}d|jD}d||<t||d<nNd|jD}t |jD]}d |j|vrd||<t||d<|D]} | |vr || || <|d d rddd }d } |bt|j} ||} d| | <tj |rd} t| |d <nd|d <| rtj|d} | jdt jkrt%d|z| d}t|j}|| xx|j| z cc<|t|t)dgt+|jz}t)|j|  d|| <|t.j|t|<dg}||dg| dt5| }|D]}||vrs||}|j| |}t|j}|dxx|jdz cc<|||||jd d<yt7d|z| dStj|d} t j| jd<| jdd|t.ji|t|dtr d|d<d |vr|d =|j| d|jfi|| dS)NT) compressionchunkscompression_opts appendAxisc.g|]}td|Sirr.xs rrZz'MetaArray.writeHDF5.. 555Q#fa..555rr[r|c.g|]}td|Srrrs rrZz'MetaArray.writeHDF5..rrr mappableF)r|r{maxshaperEr)rwrTr appendKeysrUrzPCannot append to axis info key "%s"; this key is not present in the target file.w)rT)defaultCompressionr-r rKrr`r r\rMr rIpathexistsrLrMrNr)rrLresizererrrPr_r]rarrcreate_datasetrx)rrRrtcompcoptsdsOptsappAxisrrrqrmaxShaperrTrTr`raxKeysaxInforvv2s rrszMetaArray.writeHDF5sM& dE " " KD%%E     ).F% &((<..  ))'22G55$*555BBwK$RyyF8   65$*555B49%%  TZ]**BqE$RyyF8  $ $ADyy Gq  88J & & #F   DJ''H$$W--BHRLw~~h'' !&xF:  !%F:  +  (D))Aw{#y'888 qt| |}}}V9D$$E "IIIB 'III KKe % % %++TZ0BDJrN?D11BrF"ii 33DrOZF MM$((<44 5 5 5vYs2ww'F ~ ~&==s AB,B MME!HHH +HHHHHUOOO')Arx{lmm$$#$vy|$|}}} GGIIIII (C((A#,#4AGK A  J J$))BJ*?*? J6 J J J &*E22 +#'x ''z* D q&$* ? ? ? ? ? GGIIIIIrc ,t|tjr'd|jddz|d<|j|fd|i|dSt|t st|t r||}t|t r d|jd<n d|jd<tt|D]%}|j |t|||fi|&dSt|trK||}d|jd<|D]\}}|j |||fi|dSt|tsIt|t s4t|tjst|tjr ||j|<dS t'||j|<dS#t)d tt+|d t|d xYw) Nrr[rrTr rir r^z!Can not store meta data of type 'z' in HDF5. (key is 'z'))r-rPr_r`rr r create_grouprNr rrxrar^itemsrrintegerfloatingreprr|r ) rrlrrTrgrrrqrs rrxzMetaArray.writeHDF5MetaHsO dBJ ' ' !(4:abb>!9F:  D  : :4 :6 : : : : : d # # z$'>'> ""4((B$%% 1)/&&)0&3t99%% B B""2s1vvtAwAA&AAAA B B d # # ""4((B%+BH\ "  7 71""2q!66v6666 7 7 c " " ju&=&= DRTR\A]A] aklprtr}a~a~ #DJt    #':: 4    WZ[_`d[e[eWfWfWfWfhklphqhqhqhqrssss :GAHc|jt|j|tjd}g}|qt|r||}|d|}d|d<d|vr)t|dj|d<|d}|d=nd}|dD]k}d|vre||d t|d|d<t|dj|d<|d=l|s=tj | ptj|jd k}||rPt!|d }|t|d z|D]}||nt!|d }|jt$kr2|t(j } n1t-j|t(j} |Yt| |j|d } |t1|| d<|dt| zdz|| |dS)zWrite an old-style .ma file)r`r rUrNrUr3r&rr'rgrwbz ab)rr4r5r)r`rarArr)rr4rrtostringrrIrrrJrKrrurCrrPr_r6dumpsr r) rrRr~newFileraxstrsrdynXValsrdataStr frameInfos rrrzMetaArray.writeMads 3tz??4==??^g^opp  !##J// =!00<< fj)B(B| 2~~$'8 (:$;$;=!h<xLLv, ! !B2~~ bl3355666#&vbz??< $'8 (:$;$;=!xL [7>>(333Z278;L;L;TXY;YG   h%%B HHSYY' ( ( (    h%%B :  ii ++4466GGl499RZ#8#899G  !"7||J9OPPI#%)(^^ '" HHT#i..(- . . .   rc|jdkrtd|t|d}d}d|jdvrPdd |jddDd z}|||n||z }t d|jd D]K}dd |dd|fDd z}|||F||z }L||dS|S) zGWrite 2D array to CSV file or return the string if no filename is givenr<z CSV Export is only for 2D arraysNrrr r,cg|] }|d Srrrs rrZz&MetaArray.writeCsv..sCCC!F)CCCrrr[cg|]}d|zS)z%grrs rrZz&MetaArray.writeCsv..s999q$(999r) r\rLrrMrrur r`r)rrRrVrrrows rwriteCsvzMetaArray.writeCsvs% 9q==>?? ?  #&&D TZ] " "CCTZ]6-BCCCDDtKA# 1 qDJqM**  C99DCL999::TAA# 1 q   JJLLLLLJr)NNNNFr)r)F)FN)NF)Or$r%r&r'rrrar r3 staticmethodr4setrrDrSr?r propertyr\r`rArxr#r~rr5r6rrrrrrrOrrrrrrrrrrrrrr]rrBrirrrrrrkrrrrrrrr rJrr1rCrrHrgrPruryrsrxrrrrrrr)r)Cs%**XGe IDD\D #RRRSSK6%%%N''''-'-'-'^X  X   X ...''' (((((())))))))))))---222((( 0000^^^%%%***(((  A A A A''',,, M M M        KKKHHHHBBB& N%N%N%`MMMaaa,,,$,,,\AAABBBBCCCCBBBBBBBB*"$"$"$H  \ *aaaaF****X***&qqq\q,D,D,D\,D\ j j j   cccJ85555nrr))NNNN)r'rBrIr6rEnumpyrPrqrLrNh5py.highlevel highlevelrrkrGrrCrSLICERr)rrrrs9     KKK 74 ! !.^) ~- IIHIII*V   nnnnnnnnnns 8AA