o 6aà@s.ddlZddlZddlmZddlmZddlmZddl m Z m Z ddl m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZejjjZejjj Z ejjj!Z!ejjj"Z#ejjj$Z%GdddZ&Gdd d Z'Gd d d Z(Gd d d Z)GdddZ*GdddZ+GdddZ,GdddZ-dS)N) MaskedRecords) assert_equal)assert_ assert_raises) drop_fields rename_fieldsget_fieldstructurerecursive_fill_fieldsfind_duplicates merge_arrays append_fields stack_arraysjoin_by repack_fieldsunstructured_to_structuredstructured_to_unstructuredapply_along_fieldsrequire_fieldsassign_fields_by_namec@sleZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS)TestRecFunctionscCrtddg}tgd}tjddgddtfgd}tjd d gd tfd d tfdtfgfgd}||||f|_dSN A?B@rz|S3r"dtyperr@@abbabbnparrayfloatintdataselfxyzwr?C/usr/lib/python3/dist-packages/numpy/lib/tests/test_recfunctions.pysetups   zTestRecFunctions.setupc CsH|j\}}}}t||fdd}t|tdtfdtfgt||fdd}t|tdtfdtfgt||fdd}t|tdtfddtfgt||fdd}t|tdtfdddtfgfgt||fdd}t|tdtfdtfdtfd tfgt||fdd}t|tdtfddtfd dtfd tfgfgfgdS) NTflattenFr$r"r/r1r2r0)r8 zip_descrrr4r&r7r6)r:r>r;r<r=testr?r?r@test_zip_descr sD    zTestRecFunctions.test_zip_descrcCs&tjddgdtfddtfdtfgfgd}t|d}tjdd gddtfdtfgfgd}t||t|d}tjd d gdtfgd}t||t|dg}tjd d gdtfddtfgfgd}t||t|ddg}tjd d gdtfgd}t||t|ddg}tjddggd}t||dS)Nr'r*r/r0r1r2r%)r()r,rr+)r)r))r+)r.r?)r4r5r7r6rrr:r/rFcontrolr?r?r@test_drop_fieldsAs,          z!TestRecFunctions.test_drop_fieldscCstjddddgffddddgffgd tfd d tfd tdffgfgd }t|ddd}dtfd d tfdtdffgfg}||}t|j|t||dS)Nrrr)>@r+r-r.gN@r/r0r1r2r%rBB)r/r2)r4r5r7r6rviewrr&)r:r/rFnewdtyperKr?r?r@test_rename_fieldsas"   z#TestRecFunctions.test_rename_fieldscCtddtfg}t|}t|dtdtfddtfdtfgfg}t|}t|dtdtfdgfg}t|}t|d tg}t|}t|d dS) Nr$r"rr"r/r0r1r2)r/)r0)r1r2)r/)r0r?r?)r4r&r6 get_namesrr7r:ndtyperFr?r?r@test_get_namesl "   zTestRecFunctions.test_get_namescCrR) Nr$r"rSr/r0r1r2)r/r0r1r2r/r0r?)r4r&r6get_names_flatrr7rUr?r?r@test_get_names_flat~rXz$TestRecFunctions.test_get_names_flatc Cstddtfg}t|}t|ggdtdtfddtfdgfg}t|}t|ggdgdgdtdtfddtfdd tfd tfgfgfg}t|}ggdgdgddgddgd }t||tg}t|}t|idS) Nr$r"rSrBArNz|S1)rr"r\rNrNBBABBB)rr"r\rNr^r_)r4r&r6rrr7)r:rVrFrKr?r?r@test_get_fieldstructures&     z(TestRecFunctions.test_get_fieldstructurecCsftjgdgddtfddtfdgfgd}t|dd d }d d g}tt|d |t|d ||d t|dd d}gd}tt|d |t|d ||d t|dd d}gd}tt|d |t|d ||d t|dd d}gd}tt|d |t|d ||d t|dd d}gd}tt|d |t|d ||d dS)N)rr#r")rrbra)r)r r"ra)r)r#C)rrrrdrdrd)rre)rrrrr"r\r]maskr&FT ignoremask return_indexrr)keyrk)rrrr-)rrrr+rN)rrrrnr+)mar5r7r6r rsortedrJr?r?r@test_find_duplicatess0 z%TestRecFunctions.test_find_duplicatescCsdtfg}tjgdgdd|}t|ddd}gd}tt|d|t|d ||dt|d dd}gd }tt|d|t|d ||ddS) Nr/)rrrrrrnrn)rrrrrrrrhTri)rrrnr+rlrF)rrrrnr+)r7ror5rOr rrp)r:rVr/rFrKr?r?r@test_find_duplicates_ignoremasks  z0TestRecFunctions.test_find_duplicates_ignoremaskcCs~tjddd}tjd|d}tt|tdtt|jdttt|dd|ttj|f}tt|jtjudS)Nzu1,f4,i8Talignrr% ) r4r&zerosrritemsizerecordrtype)r:dtr/r?r?r@test_repack_fieldssz#TestRecFunctions.test_repack_fieldscCstjdgdd}t|}t|tjdddtjgdgdd}tjt|dd gd d }t|tgd tjt|dgd d }t|tgd tdd}t||j }tjddddgfddddgfddddgfddddgfgdd d!d"gfd#gd}t||tjgdgdd}tt tj|tgd$tt tj|dd gtgd tjgdgd%d}t|}t||j }t |j |ut |j |utjd&d'd(gddgd)d*ggfd+d,dgd-d.gd/d0ggfggd1d}t|}t||j }t |j |ut |j |ut dt fd2t fg} t d3| fd | fd4| fg} td| } t| t d} t| tjd5t dd6d7} d8d9}dAd:d;}|| |tjtjd(}t||dtj|f|tj| | tjd'd'}t||d?tj|f|}ttttd(|ttttd(|tjdttttjd@tjddS)BNr+)r/i4)r0zf4,u2)cf4rr%)r+r-f8))rrr-)r+r-)r )rr )r;r)r<r)r=rr;r=rl)axis)r)g@"@&@)r @@$@rr)r rr)rr-)r.r @rr)rrg*@g,@)g0@g2@g3@r~r0)f0r)f1u2)rrr)gUUUUUU@gUUUUUU@gUUUUUU!@r)r)r<r)r=rrrrnrsrr rrrw))x0r)x1)rr)x2)rrrr<r/r)rrscSst||fSN)r4r&)r|shaper?r?r@subarray szBTestRecFunctions.test_structured_to_unstructured..subarraycWstddt|DS)NcSsg|] \}}d||fqS)zx{})format).0ir|r?r?r@ $szXTestRecFunctions.test_structured_to_unstructured..structured..)r4r& enumerate)dtsr?r?r@ structured#szDTestRecFunctions.test_structured_to_unstructured..structuredcSs2td|}t||d}t||}|j|j|jfS)Nr?r%)r4rxrrrr&)r|r&arrretbackarrr?r?r@inspect&s   zATestRecFunctions.test_structured_to_unstructured..inspect)rsrIrH)r-)rnrr)r4rxrrr5meanarangereshaperr&rrbaser7int32r ValueErrorNotImplementedError)r:r/outr0rwantddddddpointtrianglerresrrrr|r?r?r@test_structured_to_unstructureds                  z0TestRecFunctions.test_structured_to_unstructuredcCs\tjdgdd}ddg}tt||td|tjddg|d}t||dd t|tjd d g|jdt||t|tjd d g|jdtjddddgfgd}ddgfg}tt||td|tjddg|d}t||dd t|tjddg|jdt||t|tjddg|jdtdtd}}t||t|dddS)Nr)r~r0rru1r%r0rrrr)rnr+F)zero_unassigned)rrr)rrnr+)rrr)rrnr+r/r)r)rn)r)rrn))rr))rrnrnrr?)r4onesrrr5rr&)r:r/newdtr0r?r?r@test_field_assignment_by_nameAs&    z.TestRecFunctions.test_field_assignment_by_nameN)__name__ __module__ __qualname__rArGrLrQrWr[r`rqrtr}rrr?r?r?r@rs !  ! Zrc@seZdZddZddZdS)TestRecursiveFillFieldscCsdtjddgdtfdtfgd}tjd|jd}t||}tjgddtfdtfgd}t||dS)Nrrr4@rr"r%rrr)r)r4r5r7r6rxr&r rr:r/r0rFrKr?r?r@test_simple_flexible_s  z,TestRecursiveFillFields.test_simple_flexiblecCsptjddgddgdtfdtfgd}tjd|jd }t||}tjgd gd dtfdtfgd}t||dS) Nrrrrrfrr"rgrr%r)rrfre)ror5r7r6rxr&r rrr?r?r@test_masked_flexiblehs  z,TestRecursiveFillFields.test_masked_flexibleN)rrrrrr?r?r?r@r]s rc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)TestMergeArrayscCsxtddg}tgd}tjddgddtfgd}tjd d gd tfd d tfdtfdgfgfgd}||||f|_dS)Nrrrrr!r$r"r%r)rr)r?r+)r-r.r?r/r0r1r2bcr3r9r?r?r@rAws zTestMergeArrays.setupcCs||j\}}}}t|}tjddgdtfgd}t||t|f}t||t|dd}t||t|dd}t||dS)NrHrrr%FrBT)r8r r4r5r7rr:_r;r=rFrKr?r?r@ test_solos      zTestMergeArrays.test_solocCs^|jd}t|dd}t||t|dd}tjddgdtfdtfd tfgd }t||dS) NrFrBT)rrr))r+r-r.r/r1r2r%)r8r rr4r5r7r6r:r>rFrKr?r?r@test_solo_w_flattens     z#TestMergeArrays.test_solo_w_flattencCs|j\}}}}t||fdd}tjgddtfdtfgd}t||t||fdd}tjgdgddtfdtfgd }t||t|j|jdS) NFusemask)rr)rr)rlrrrr%Trererfrg)r8r r4r5r7rrorhr:rr;r<rFrKr?r?r@ test_standards    zTestMergeArrays.test_standardcCs|j\}}}}t||fdd}tjddgdtfddtfgd}t||t||fd d}tjd d gdtfd ddtfgfgd}t||dS) NTrB)rrr )rr"r#rr$r"r%F)rr)rr!rr8r r4r5r7r6rrr?r?r@ test_flattens   zTestMergeArrays.test_flattencCs|j\}}}}t||fdd}tjddgdtfdtfdtfdtfgd }t||t||fd d}dtfd dtfd dtfdtfd gfgfgfg}tjddg|d }t||dS)NTrB)rrrr))rr+r-r.rr/r1r2r%Frr0r)r r)rrr)r:r>r;rrFrK controldtyper?r?r@test_flatten_wflexibles$   z&TestMergeArrays.test_flatten_wflexiblecCs|j\}}}}tjgdgdd}t||fdd}tjgdgddtfd tfgd }t||t||fddd }t||tt|tdS) NrrrnrrrrrTr)rrr)rlrn)rrerfrrrg)r asrecarray) r8ror5r r7rr isinstancer)r:rr;mxrFrKr?r?r@test_wmasked_arrayss   z#TestMergeArrays.test_wmasked_arrayscCs^ttddgdtfgtgdf}tjgdgddtfdtfgd}t||dS) Nrrr/)rrrM)rr)rlrMrrrg)r r4r5rOr7ror6r)r:rFrKr?r?r@test_w_singlefields  z"TestMergeArrays.test_w_singlefieldcCsP|jd}t|tgddtfgftjgdddtfdtfgddS)Nrlrrc)rr rr"r#r)z-1rlrr$r"r%)r8r r4r5rOr7r6)r:r=r?r?r@test_w_shorter_flexs "  z#TestMergeArrays.test_w_shorter_flexcCsd|j\}}}}t|d|d|dfdd}tjdgdtfdtfddd tfgfgd }t||dS) NrFr)rrrrrrf2r$r"r%r)r:rr;r<r=rFrKr?r?r@test_singlerecordsz!TestMergeArrays.test_singlerecordN) rrrrArrrrrrrrrr?r?r?r@rts    rc@s4eZdZddZddZddZddZd d Zd S) TestAppendFieldscCrrr3r9r?r?r@rA zTestAppendFields.setupcCsR|j\}}}}t|dgdd}tjgdgddtfdtfgd}t||dS)Nrrr8rrrrgr8r ror5r7rr:rr;rFrKr?r?r@test_append_singles z#TestAppendFields.test_append_singlecCs`|j\}}}}t|dgdddggd}tjgdgddtfd tfd tfgd }t||dS) NrSrdr))rrr)rrr)rlrrl)rrrr)rrrrrr"rgrrr?r?r@test_append_doubles z#TestAppendFields.test_append_doublecCsP|jd}t|dgdd}tjgdgdddtfdtfgd }t||dS) Nrlrcrr)rr)rlr)rrrrrr$r"rg)r8r ror5r6r7r)r:r=rFrKr?r?r@test_append_on_flexs  z$TestAppendFields.test_append_on_flexcCs`|jd}t|dgdd}tjgdgddtfdd tfd tfgfdtfgd }t||dS) Nrrcrr))rr(r)r+r,r)rl)rlrr)rrerr)rrrr/r0r1r2rg)r8r ror5r7r6rrr?r?r@test_append_on_nested s  z&TestAppendFields.test_append_on_nestedN)rrrrArrrrr?r?r?r@rs    rc@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)TestStackArrayscCrrr3r9r?r?r@rA1rzTestStackArrays.setupcCsP|j\}}}}t|f}t||t||ut|}t||t||udSr)r8r rr)r:rr;rFr?r?r@r:s    zTestStackArrays.test_solocCs|j\}}}}t||fdd}tgd}t||t||fdd}tgd}t||t||fdd}tgd}t||dS)NFr)rrrr)rrrrr)rrrrr)r8r r4r5rrr?r?r@test_unnamed_fieldsEs  z#TestStackArrays.test_unnamed_fieldscCs|j\}}}}t||f}tjgdgddtfddtfgd}t||t|j|jt||f}tjgdgdddtfd tfgd}t||t|j|jt|||f}tjgd gd ddtfd tfgd}t||dS) N))rrlrl)rrlrl)rlrr)rlr"r)rrrrrrrr$r"rg)rrrlr"rrlrlrlrrlrlr)rrrrrrr)rrrrrr)rrrrrr)r8r ror5r7r6rrhrr?r?r@test_unnamed_and_named_fieldsUs*       z-TestStackArrays.test_unnamed_and_named_fieldscCs|j\}}}}tjgdddtfdtfgd}t||f}tjgdddtfdtfggdd}t||t|j|jt|||f}ddtfdtfd tfg}tjgd |gd d}t||t|j|jdS) Nr/rY@r0ri@rrMr@r$r"rcr%)rrr r rrrrrrr&rhf3))rrrlrl)r"rrlrl)r/rr rl)r0rrrl)rrMrrl)rlrlrlr)rlrlrlr)rrrrrrrrrrrrrrrr) r8r4r5r6r rorrhr7)r:rr;r=zzrFrKrVr?r?r@test_matching_named_fieldsus&      z*TestStackArrays.test_matching_named_fieldscCs|j\}}}}tjgdddtfdtfgd}dddd d }t||f|d }tjgd ddtfdtfggd d}t||t|j|jt|j|jdS)Nr r$r"rcr%z???g8gi)rr"rcD)defaults))rrr)r"rrr r rrr)r8r4r5r6r rorrh)r:rr=rrrFrKr?r?r@ test_defaultss   zTestStackArrays.test_defaultscCsdtfdtfdtfg}tjdgdg|d}dtfdtfdtfg}tjdg|d}tjddgdd g|d}t||fd d }t||t|j|jtt t||fd d WddS1s`wYdS) Nrr"rcrrrrrgr+r-rsr%rT) autoconvertF) r7boolr6ror5r rrhr TypeError)r:adtyper/bdtyper0rKrFr?r?r@test_autoconversions  "z#TestStackArrays.test_autoconversioncCsdtfdtfdtfg}tjdgdg|d}dtfdtfdtfg}tjdg|d}t||f}tjddgdd g|d}t||t|j|jdS) N)r/r)r0r")rrcrrrgrr%r)r7r r6ror5r rrh)r:r"r/r#r0rFrKr?r?r@test_checktitless  z TestStackArrays.test_checktitlesc Cstjddgddtdfgd}tjddgd fd d gd fd dgdfgddtdfdtfgd}t||f}tjddgdfddgdfddgd fdd gd fddgdfgddgdfddgdfddgdfddgdfddgdfg|jd}t|j|jt||t|j|jdS)Nr)r"rr$r"rHr%r/rr r0rrrrMrrcAr rBr#abcFT)r8rhr&)r4r5r6r ror&rrh)r:r=rrexpectedr?r?r@ test_subdtypes:             zTestStackArrays.test_subdtypeN) rrrrArrr rrr$r%r,r?r?r?r@r/s    rc@szeZdZddZddZddZddZd d Zd d Zd dZ ddZ e j j ddddZddZddZddZdS) TestJoinByc Cstjtttdtddtdddtfdtfdtfgd |_tjtttd d td d tdddtfdtfdtfgd |_dS)Nr2<rnr/r0rr%r-rAKrr4r5listziprr7r/r0r:r?r?r@rAs   zTestJoinBy.setupcCs\|j|j}}td||dd}tjgddtfdtfdtfdtfdtfgd }t||dS) Nr/inner)jointype))r-7r1ir)rs8Bje)r9Ckf)r:Dlg)r;Emhb1b2rrr%r/r0rr4r5r7rrr?r?r@test_inner_joins  zTestJoinBy.test_inner_joincCsH|j|j}}td||tjgddtfdtfdtfdtfgddS)NrY))r-r9r:r)rsr;r=r>)rr?rArB)rrCrErF)rrGrIrJr/r0rrr%)r/r0rr4r5r7r:r/r0r?r?r@ test_joins    zTestJoinBy.test_joincCs^tjdgdtfgd}tjdtgdfgdtfdgd}td||}t||tjdS)NrHrmr%rr)valueuint16rn)r4r5r7rrrOro MaskedArray)r:foobarrr?r?r@test_join_subdtypes  zTestJoinBy.test_join_subdtypecCZ|j|j}}td||d}tjgdgddtfdtfdtfdtfgd }t||dS) NrYouter)rr.rrlr3r>rlr4rBrlrn5rFrlr+6rJrlr-r9r:rl)r-r1rlrrsr;r=rl)rsr<rlr>rr?rArl)rr@rlrBrrCrErl)rrDrlrFrrGrIrl)rrHrlrJ)rFrlr:)rGrlr=)rHrlrA)rwIrlrE)rJrlrI)rrrrrrrrrrrrlrrlrrlrrlrlrlrlrlrlr/r0rrrgr/r0rror5r7rrr?r?r@test_outer_join s  zTestJoinBy.test_outer_joincCrW) NrY leftouter) rYrZr\r^r`rbrcrdrerf) rrrrrrrrrrr/r0rrrgrmrr?r?r@test_leftouter_join(s  zTestJoinBy.test_leftouter_joincCsPtjdgdd}tjdgdd}tddg||ddd }t|jjgd dS) Nrnr~rrr%rrr~rr0r7F)r8r)r0ra1a2)r4rxrrrr&names)r:r/r0jr?r?r@test_different_field_order9sz%TestJoinBy.test_different_field_ordercCs<tjdgdd}tjdgdd}tttgd||dS)Nrnrqr%rr)r/r0r0)r4rxrrrrrOr?r?r@test_duplicate_keysAszTestJoinBy.test_duplicate_keyszSee comment at gh-9343)reasoncCsjtddg}tddg}tgd}tjddg|d}tjdd g|d}td ||}t|j|dS) N)rmS5rQr>)rr]r@rBrB)rnr_rDrFrF)r+rarHrJrJ)r-r9rgr:r:)rsr;rhr=r=)rr?rirArA)rrCrjrErE)rrGrkrIrIr0rLrrr%rMrr?r?r@test_no_r1postfix   zTestJoinBy2.test_no_r1postfixc Cstttd|j|jddddS)Nr/rD)rr)rrrr/r0r6r?r?r@test_no_postfixs zTestJoinBy2.test_no_postfixcCr) Nr/1rDr7rrrKr0rrr%rMrr?r?r@test_no_r2postfixrzTestJoinBy2.test_no_r2postfixc Cs&tjtttddgdttddtddtdddtfd tfd tfd tfgd }tjtttddgdttddtd dtdddtfd tfd tfd tfgd }tjgddtfd tfdtfdtfdtfdtfgd }td dg||dddd}t |j |j t ||dS)Nrrr-rr.r/rrr/r0rr%r1r2r) )rrr.r1rr)rrr[r<rr)rrr]r@rr)rrr_rDrwrn)rrrarHrr+)rrr9rgrr-)rrnr;rhrs)rrnr?rirr)rr+rCrjr)rr+rGrkrrKrLc1c2rrr7r) r4r5r4r5tilerepeatrr7rrr&)r:r/r0rKrFr?r?r@test_two_keys_two_varss(&& z"TestJoinBy2.test_two_keys_two_varsN) rrr classmethodrArrrrr?r?r?r@rs  rc@s eZdZdZddZddZdS)TestAppendFieldsObjz; Test append_fields with arrays containing objects cCs$ddlm}t|dddd|_dS)Nr)dateir)obj)datetimerdictr8)r:rr?r?r@rAs zTestAppendFieldsObj.setupcCs|jd}tj|df|dfgdtfdtfgd}tjddgtd}t|d |d d }tj|ddf|ddfgdtfdtfd tfgd}t||d S) z7Test append_fields when the base array contains objectsrr r#rr"r%rrrcF)r8rN)r8r4r5objectr6r7r r)r:rr;r<rFrKr?r?r@test_append_to_objectss z*TestAppendFieldsObj.test_append_to_objectsN)rrr__doc__rArr?r?r?r@rs r).rnumpyr4numpy.maronumpy.ma.mrecordsrnumpy.ma.testutilsr numpy.testingrrnumpy.lib.recfunctionsrrrr r r r r rrrrrrrlib recfunctions_get_fieldspec get_fieldspecrTrZ _zip_descrrE _zip_dtype zip_dtyperrrrrr-rrr?r?r?r@s2   D     K6,&A