ó É9Zc @`s7dZddlmZmZmZddlZddlZddlZddl j Z ddlm Z m Z ddl m Z ddlmZddlmZddlmZejdd krÑdd lmZnej jjZd d d dddddddddg Zd„Zd„Zd„Zd„Zed„Zddd„Z!d„Z"d„Z#de$d„Z%e$ed „Z&dd!„Z'd"eeed#„Z(e$ed$„Z)d%„Z*d&„Z+dd"e$ed'„Z,dd(„Z-de$eed)„Z.de$ed*„Z/d+d,d-de$ed.„Z0d+d,d-dd/„Z1dS(0sÆ Collection of utilities to manipulate structured arrays. Most of these functions were initially implemented by John Hunter for matplotlib. They have been rewritten and extended for convenience. i(tdivisiontabsolute_importtprint_functionN(tndarraytrecarray(t MaskedArray(t MaskedRecords(t_is_string_like(t basestringi(tzipt append_fieldst drop_fieldstfind_duplicatestget_fieldstructuretjoin_byt merge_arraystrec_append_fieldstrec_drop_fieldstrec_jointrecursive_fill_fieldst rename_fieldst stack_arrayscC`sz|j}xj|jD]_}y||}Wntk r=qnX|jjr^t|||ƒq|||t|ƒ*qW|S(sl Fills fields from output with fields from input, with support for nested structures. Parameters ---------- input : ndarray Input array. output : ndarray Output array. Notes ----- * `output` should be at least the same size as `input` Examples -------- >>> from numpy.lib import recfunctions as rfn >>> a = np.array([(1, 10.), (2, 20.)], dtype=[('A', int), ('B', float)]) >>> b = np.zeros((3,), dtype=a.dtype) >>> rfn.recursive_fill_fields(a, b) array([(1, 10.0), (2, 20.0), (0, 0.0)], dtype=[('A', '>> from numpy.lib import recfunctions as rfn >>> rfn.get_names(np.empty((1,), dtype=int)) is None True >>> rfn.get_names(np.empty((1,), dtype=[('A',int), ('B', float)])) ('A', 'B') >>> adtype = np.dtype([('a', int), ('b', [('ba', int), ('bb', int)])]) >>> rfn.get_names(adtype) ('a', ('b', ('ba', 'bb'))) N(Rtappendttuplet get_namestNone(tadtypet listnamesRtnameR((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR!Is    "cC`sfg}|j}xD|D]<}|j|ƒ||}|jr|jt|ƒƒqqWt|ƒpedS(s2 Returns the field names of the input datatype as a tuple. Nested structure are flattend beforehand. Parameters ---------- adtype : dtype Input datatype Examples -------- >>> from numpy.lib import recfunctions as rfn >>> rfn.get_names_flat(np.empty((1,), dtype=int)) is None True >>> rfn.get_names_flat(np.empty((1,), dtype=[('A',int), ('B', float)])) ('A', 'B') >>> adtype = np.dtype([('a', int), ('b', [('ba', int), ('bb', int)])]) >>> rfn.get_names_flat(adtype) ('a', 'b', 'ba', 'bb') N(RRtextendtget_names_flatR R"(R#R$RR%R((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR'hs     cC`s†|j}|dkr|jSg}xS|D]K}|j|\}}|jra|jt|ƒƒq)|j||fƒq)Wt|ƒSdS(sD Flatten a structured data-type description. Examples -------- >>> from numpy.lib import recfunctions as rfn >>> ndtype = np.dtype([('a', '>> rfn.flatten_descr(ndtype) (('a', dtype('int32')), ('ba', dtype('float64')), ('bb', dtype('int32'))) N(RR"tdescrtfieldsR&t flatten_descrRR (tndtypeRR(Rttypt_((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR*‡s    cC`sªg}|r6x‹|D]}|jt|jƒƒqWndxa|D]Y}|j}|jpXd}t|ƒdkr†|jd|jfƒq=|j|jƒq=Wtj|ƒjS(sî Combine the dtype description of a series of arrays. Parameters ---------- seqarrays : sequence of arrays Sequence of arrays flatten : {boolean}, optional Whether to collapse nested descriptions. it((R&R*RRRRR(tnp(t seqarraystflattenRtaRR((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyt zip_descr¡s    cC`së|dkri}n|j}xÀ|D]¸}||}|jrz|rT|g||>> from numpy.lib import recfunctions as rfn >>> ndtype = np.dtype([('A', int), ... ('B', [('BA', int), ... ('BB', [('BBA', int), ('BBB', int)])])]) >>> rfn.get_fieldstructure(ndtype) ... # XXX: possible regression, order of BBA and BBB is swapped {'A': [], 'B': [], 'BA': ['B'], 'BB': ['B'], 'BBA': ['B', 'BB'], 'BBB': ['B', 'BB']} N(R"RtupdateR tgetR(R#tlastnametparentsRR%RR-t lastparent((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR »s"       + cc`sQxJ|D]B}t|tjƒrDx'tt|ƒƒD] }|Vq2Wq|VqWdS(su Returns an iterator of concatenated fields from a sequence of arrays, collapsing any nested structure. N(t isinstanceR/tvoidt_izip_fields_flatR (titerabletelementtf((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR;ês   cc`s¡xš|D]’}t|dƒrKt|tƒ rKxjt|ƒD] }|Vq9Wqt|tjƒr”tt|ƒƒdkr”x!t|ƒD] }|Vq‚Wq|VqWdS(sP Returns an iterator of concatenated fields from a sequence of arrays. t__iter__iN(thasattrR9Rt _izip_fieldsR/R:RR (R<R=R>((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyRAøs  * c c`s³|gt|ƒdjd„}tj|ƒ}g|D]}tj||ƒ|ƒ^q6}|rit}nt}y,x%t|ŒD]}t||ƒƒVqWWnt k r®nXdS(s* Returns an iterator of concatenated items from a sequence of arrays. Parameters ---------- seqarrays : sequence of arrays Sequence of arrays. fill_value : {None, integer} Value used to pad shorter iterables. flatten : {True, False}, Whether to ics`s |ƒVdS(s*Yields the fill_value or raises IndexErrorN((tcounter((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pytsentinelsN( Rtpopt itertoolstrepeattchainR;RAR R t IndexError( R0t fill_valueR1RCtfillerstittiterstzipfuncttup((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyt izip_records s +  cC`sdt|tƒst}n|r9|r`|jtƒ}q`n'tj|ƒ}|r`|jtƒ}n|S(s€ Private function: return a recarray, a ndarray, a MaskedArray or a MaskedRecords depending on the input parameters (R9RtFalsetviewRtmatfilledR(Rtusemaskt asrecarray((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyt _fix_output*s cC`s{|jj}|j|j|j}}}xK|p5ijƒD]7\}}||kr<|||<|||||>> from numpy.lib import recfunctions as rfn >>> rfn.merge_arrays((np.array([1, 2]), np.array([10., 20., 30.]))) masked_array(data = [(1, 10.0) (2, 20.0) (--, 30.0)], mask = [(False, False) (False, False) (True, False)], fill_value = (999999, 1e+20), dtype = [('f0', '>> rfn.merge_arrays((np.array([1, 2]), np.array([10., 20., 30.])), ... usemask=False) array([(1, 10.0), (2, 20.0), (-1, 30.0)], dtype=[('f0', '>> rfn.merge_arrays((np.array([1, 2]).view([('a', int)]), ... np.array([10., 20., 30.])), ... usemask=False, asrecarray=True) rec.array([(1, 10.0), (2, 20.0), (-1, 30.0)], dtype=[('a', '—stndmintcountRX(iN(!RR/t asanyarrayR9RR:RR3tTrueR(travelRRRRRQR tmaxR t __array__RRt getmaskarrayt_check_fill_valuetitemtarraytonesR"RRERGROtfromitertlist(R0RIR1RTRUtseqdtypetseqtypet_mtsizest maxlengthRtseqdatatseqmaskR2tnt nbmissingRWRXtfvaltfmskR((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyRIs|1       "    $! $$c`sŒt|ƒr|g}n t|ƒ}‡fd†‰ˆ|j|ƒ}|sOdStj|jd|ƒ}t||ƒ}t|d|d|ƒS(sv Return a new array with fields in `drop_names` dropped. Nested fields are supported. Parameters ---------- base : array Input array drop_names : string or sequence String or sequence of strings corresponding to the names of the fields to drop. usemask : {False, True}, optional Whether to return a masked array or not. asrecarray : string or sequence, optional Whether to return a recarray or a mrecarray (`asrecarray=True`) or a plain ndarray or masked array with flexible dtype. The default is False. Examples -------- >>> from numpy.lib import recfunctions as rfn >>> a = np.array([(1, (2, 3.0)), (4, (5, 6.0))], ... dtype=[('a', int), ('b', [('ba', float), ('bb', int)])]) >>> rfn.drop_fields(a, 'a') array([((2.0, 3),), ((5.0, 6),)], dtype=[('b', [('ba', '>> rfn.drop_fields(a, 'ba') array([(1, (3,)), (4, (6,))], dtype=[('a', '>> rfn.drop_fields(a, ['ba', 'bb']) array([(1,), (4,)], dtype=[('a', '>> from numpy.lib import recfunctions as rfn >>> a = np.array([(1, (2, [3.0, 30.])), (4, (5, [6.0, 60.]))], ... dtype=[('a', int),('b', [('ba', float), ('bb', (float, 2))])]) >>> rfn.rename_fields(a, {'a':'A', 'bb':'BB'}) array([(1, (2.0, [3.0, 30.0])), (4, (5.0, [6.0, 60.0]))], dtype=[('A', '>> from numpy.lib import recfunctions as rfn >>> x = np.array([1, 2,]) >>> rfn.stack_arrays(x) is x True >>> z = np.array([('A', 1), ('B', 2)], dtype=[('A', '|S3'), ('B', float)]) >>> zz = np.array([('a', 10., 100.), ('b', 20., 200.), ('c', 30., 300.)], ... dtype=[('A', '|S3'), ('B', float), ('C', float)]) >>> test = rfn.stack_arrays((z,zz)) >>> test masked_array(data = [('A', 1.0, --) ('B', 2.0, --) ('a', 10.0, 100.0) ('b', 20.0, 200.0) ('c', 30.0, 300.0)], mask = [(False, False, True) (False, False, True) (False, False, False) (False, False, False) (False, False, False)], fill_value = ('N/A', 1e+20, 1e+20), dtype = [('A', '|S3'), ('B', ' '%s'sf%iRTRUN(R9RRR/RcReRRR(RtindexRnR t TypeErrortdictRRt concatenateR…tsumtcumsumtr_R R"RVR](tarraysRZRTRUt autoconvertR2R0tnrecordsR+Rˆtfldnamestdtype_ltnewdescrR-Rtdtype_nR(R%tnameidxt current_descrRtoffsettseenRvtitj((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR§sT'(     & )0    c C`s tj|ƒjƒ}t|jƒ}|}|r\x||D]}||}q;W||}n|jƒ}||}|jƒ} | d | dk} |r²|j} t| | d>> from numpy.lib import recfunctions as rfn >>> ndtype = [('a', int)] >>> a = np.ma.array([1, 1, 1, 2, 2, 3, 3], ... mask=[0, 0, 1, 0, 0, 0, 1]).view(ndtype) >>> rfn.find_duplicates(a, ignoremask=True, return_index=True) ... # XXX: judging by the output, the ignoremask flag has no effect iÿÿÿÿiN( R/RcReR RtargsortRSt recordmaskRPRŒ( R2tkeyt ignoremaskt return_indexR)RR>tsortidxt sortedbaset sorteddatatflagt sortedmaskt duplicates((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR s(     tinnert1t2c )`s|dkrtd|ƒ‚ntˆtƒr:ˆf‰nxXˆD]P} | |jjkrltd| ƒ‚n| |jjkrAtd| ƒ‚qAqAW|jƒ}|jƒ}t|ƒ} |jj|jj} } tjt| ƒt| ƒƒj ˆƒr%|p| r%d} | d7} t| ƒ‚nt |g| D]}|ˆkr2|^q2ƒ}t |g| D]}|ˆkr`|^q`ƒ}t j ||fƒ}|j d ˆƒ}||}t j tg|d |d kfƒ}|d |d |d *||}||| k}||| k| }t|ƒt|ƒ}}|dkrPd\}}nÍ|dkrÍ||}tj |||| kfƒ}tj |||| k| fƒ}t|ƒ|t|ƒ|}}nP|dkr||}tj |||| kfƒ}t|ƒ|d }}n||||}}g|jjD]}t|ƒ^q?}|j‡fd †|jjDƒƒtd„|Dƒƒ} xÎ|jjD]À}!t|!ƒ}!|!d } | | kr?|j|!ƒ}"||"}#| ˆkrt|!d |#d ƒ|#d «scs`s|]}|dVqdS(iN((R`R-((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pys ­sRRTRU(R¨R«R¬(ii(R«R¬(RR9RRRReRR|t intersectiont differenceR RRRŒRRPR/R(RnR&R‰RftinsertRR R…tsortR‹RVR]()RŸtr1tr2tjointypet r1postfixt r2postfixRZRTRUR%tnb1tr1namestr2namesR‡Rvtr1ktr2ktauxtidx_sorttflag_intidx_intidx_1tidx_2tr1cmntr2cmntr1spctr2spctidx_outts1ts2R-R+RtdescR—RtcmnRR>tselectedtkwargs((RŸsI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyR7s¤3       '  .. &    #$  %#         +     +  c C`s@td|d|d|d|dtdtƒ}t||||S(s¨ Join arrays `r1` and `r2` on keys. Alternative to join_by, that always returns a np.recarray. See Also -------- join_by : equivalent function R´RµR¶RZRTRU(R‹RPRdR(RŸR²R³R´RµR¶RZRÌ((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pyRßs (2t__doc__t __future__RRRtsysREtnumpyR/tnumpy.maRRRRRtnumpy.ma.mrecordsRtnumpy.lib._iotoolsRt numpy.compatRt version_infotfuture_builtinsR tcoreRit__all__RR!R'R*RPR3R"R R;RARdRORVR]RR RRR RRR RR(((sI/opt/alt/python27/lib64/python2.7/site-packages/numpy/lib/recfunctions.pytsV       '    /  ! ˆ@  'D "  Y6 §