o 6ac1@sdZddlZddlmZmZddlmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZddZGdd d ejZeZGd d d e ZGd d d ee ZeZGdddZGdddeZGdddZdS)zTests suite for MaskedArray & subclassing. :author: Pierre Gerard-Marchant :contact: pierregm_at_uga_dot_edu :version: $Id: test_subclassing.py 3473 2007-10-29 15:18:13Z jarrod.millman $ N)assert_ assert_raises) assert_equal) arrayarangemasked MaskedArray masked_arraylogaddhypotdivideasarray asanyarraynomaskcCst|dt||dSN)rlen)abrA/usr/lib/python3/dist-packages/numpy/ma/tests/test_subclassing.pyassert_startswithsrcs@eZdZifddZfddZfddZfddZZS) SubArraycCst||}||_|Sr)nprviewcopyinfo)clsarrrxrrr__new__s zSubArray.__new__cs4tttddrt|t|di|_dS)N__array_finalize__r)callablegetattrsuperr!rr)selfobj __class__rrr!s zSubArray.__array_finalize__c(t|}|jddd|jd<|S)Naddedr)r$__add__rgetr%otherresultr'rrr,$ zSubArray.__add__cr))Niaddedrr+)r$__iadd__rr-r.r'rrr3)r1zSubArray.__iadd__)__name__ __module__ __qualname__r r!r,r3 __classcell__rrr'rrs    rcs"eZdZdZdfdd ZZS)SubMaskedArrayzsubarr_datarrrr <s zMSubArray.__new__cCs|t}d|_|S)NF)rr _sharedmask)r%_viewrrr_seriesBs zMSubArray._seriesN)r4r5r6rr propertyrCrrrrr<:sr<c@s8eZdZdZddZddZddZdd Zd d Zd S) CSAIteratorz Flat iterator object that uses its own setter/getter (works around ndarray.flat not propagating subclass setters/getters see https://github.com/numpy/numpy/issues/4564) roughly following MaskedIterator cCs||_|tjj|_dSr) _originalrrndarrayflat _dataiter)r%rrrr__init__WszCSAIterator.__init__cCs|Srrr%rrr__iter__[szCSAIterator.__iter__cCs4|j|}t|tjs|}|t|j}|Sr) rI __getitem__ isinstancerrG __array__rtyperF)r%indxoutrrrrM^s  zCSAIterator.__getitem__cCs|j||j|<dSr)rF_validate_inputrI)r%indexvaluerrr __setitem__eszCSAIterator.__setitem__cCst|jt|jSr)nextrIrOrrPrFrKrrr__next__hszCSAIterator.__next__N) r4r5r6r;rJrLrMrVrXrrrrrEPs rEcsheZdZddZddZddZfddZfd d Zed d Z e j d d Z dfdd Z Z S)ComplicatedSubArraycCsd|tdS)Nz myprefix z mypostfix)rrrKrrr__str__nszComplicatedSubArray.__str__cCsd|jjd|dS)N< >)r(r4rKrrr__repr__qszComplicatedSubArray.__repr__cCst|ts td|S)Nz!Can only set to MySubArray values)rNrY ValueError)r%rUrrrrSus z#ComplicatedSubArray._validate_inputcst|||dSr)r$rVrSr%itemrUr'rrrVzszComplicatedSubArray.__setitem__cs*t|}t|tjs|t}|Sr)r$rMrNrrGrOrrYr`r'rrrMs  zComplicatedSubArray.__getitem__cCst|Sr)rErKrrrrHszComplicatedSubArray.flatcCs|}||dd<dSr)ravel)r%rUyrrrrHsNcs@t||}|dur|dtjur|jddd|jd<|S)Nr multipliedr+)r$__array_wrap__rmultiplyrr-)r%r&contextr'rrresz"ComplicatedSubArray.__array_wrap__r) r4r5r6rZr^rSrVrMrDrHsetterrer7rrr'rrYls    rYc@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)TestSubclassingcCs,tjddd}t|gdd}||f|_dS)Nfloat)dtype)rr+rrrr>)rr msubarrayr=r%rmxrrrsetupszTestSubclassing.setupcCsTtd}gd}t|}t||d}tt|tt|j|tt|jtdS)Nrjrrr+rrrm) rrrr rrNrrr@)r%rmxsubxmsubrrrtest_data_subclassings   z%TestSubclassing.test_data_subclassingcCs|j\}}tt|jtdSr)r=rrNr@subarrayrorrrtest_maskedarray_subclassings z,TestSubclassing.test_maskedarray_subclassingcCsb|j\}}tjddttt|ttt|t|WddS1s*wYdS)Nignore)r )r=rerrstaterrNr rnrrorrrtest_masked_unary_operationss "z,TestSubclassing.test_masked_unary_operationscCs|j\}}ttt||tttt||ttt||||ttt||jtttt||tttt ||tttt ||tdSr) r=rrNr rnrr@rwouterr rorrrtest_masked_binary_operationss z-TestSubclassing.test_masked_binary_operationscCs`|j\}}t|j|jd}ttt||tttt||ttt||t||dS)Nrm) r=r rOr>rrNr rnr)r%rrpxmxrrrtest_masked_binary_operations2s z.TestSubclassing.test_masked_binary_operations2cCszttddgdgdd}tt|}t|}|d}tt|ttt|t tt|j t t |j j i|d}tt|ttt|ttt|j t t|j j ddk|d7}tt|ttt|ttt|j t t|j j ddk| gdt |jgd|j gd t |jgd t|d d id }t|}tt|d t |j |j dS)Nrjrr+rmr*r2)r+rrrr+)rrrrr+namer)rr)rrr rwrnrrNrr<r@rrr _set_mask_maskrChasattr)r%rmyymzrtmxsubrrrtest_attributepropagations4 z)TestSubclassing.test_attributepropagationcCs td}gd}ddt||D}t||d|id}t|dd}tt|t tt|tt|j |t |}tt|t tt|tt|j |t|d d}tt|tt|j |j t|j |j t |}tt|tt|j |j t|j |dS) NrjrrcSsg|]\}}||fqSrr).0ijrrr sz=TestSubclassing.test_subclasspreservation..rt)r>rF)subokT) rrzipr<r rrNrrrrrr)r%rrsxinfortrrrrtest_subclasspreservations(     z)TestSubclassing.test_subclasspreservationcCstd}t|}t|gdd}tt|dttt|dttt|ddttt|dttt|djtt|dtutt|djttt|ddjttt|jdjtt|jdtutt|jddj tt t |j d|dt t |j d|dt t |j t dd|dd|d|d<|dd|dd<t t |jj d|dt t |jj t dd|dd|d|jd<|dd|jdd<d S) z,test that getter and setter go via baseclassrjTFTFFrmr+r+.rrr.N)rrrYr rrNr=rrHbaserr_rVslice)r%rxcsubmxcsubrrrtest_subclass_itemss.   z#TestSubclassing.test_subclass_itemscCsjtd}t|}t|}tt|djttt|djttt|dttt|dtdS)Nrjrrr+r)rrrYr rrNr=)r%rr mxcsub_nomaskrrrtest_subclass_nomask_items+s z*TestSubclassing.test_subclass_nomask_itemscCs\td}t|gdd}tt|dt|}t|gdd}tt|dtjddS)zOtest that repr uses the name of the subclass and 'array' for np.ndarrayrjrrmr masked_z(data=[--, 1, --, 3, 4]N)rrr rreprrr4)r%rrprtrrrrtest_subclass_repr6s  z"TestSubclassing.test_subclass_reprcCsptd}t|}t|gdd}tt|dt|}tt|j dtj j j t|gdd}tt|ddS)z7test str with subclass that has overridden str, setitemrjrrmz [-- 1 -- 3 4]rz myprefix [-- 1 -- 3 4] mypostfixN) rrrr rstrrYrr_rVmacoremasked_print_option)r%rrtrrrrrrtest_subclass_strAs  z!TestSubclassing.test_subclass_strcCsvtdgdd}tgdd}t||}td|jvt|jddk||}td|jvt|jddkdS)Ntest)r+rrj)r=)rr+rrrrjr)r8rsubtractrr9)r%arr1arr2diff1diff2rrr$test_pure_subclass_info_preservationOs z4TestSubclassing.test_pure_subclass_info_preservationN)r4r5r6rqrvrxr{r}rrrrrrrrrrrrris  !%  ri)r;numpyr numpy.testingrrnumpy.ma.testutilsr numpy.ma.corerrrrr r r r r rrrrrGrrwr8r<rnrErYrirrrrs 8+