B N) r/r0r1rrr r=r?r@rrrrrAKs rAc@s<eZdZdZddZddZddZdd Zd d ZeZ d 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|_dS)N) _originalrrndarrayflat _dataiter)r$arrr__init__lszCSAIterator.__init__cCs|S)Nr)r$rrr__iter__pszCSAIterator.__iter__cCs4|j|}t|tjs |}|t|j}|S)N) rG __getitem__ isinstancerrE __array__rtyperD)r$ZindxoutrrrrKss   zCSAIterator.__getitem__cCs|j||j|<dS)N)rD_validate_inputrG)r$indexvaluerrr __setitem__zszCSAIterator.__setitem__cCst|jt|jS)N)nextrGrMrrNrD)r$rrr__next__}szCSAIterator.__next__N) r/r0r1r6rIrJrKrSrUrTrrrrrCesrCcsheZdZddZddZddZfddZfd d Zed d Z e j d d Z dfdd Z Z S)ComplicatedSubArraycCsd|tS)Nzmyprefix {0} mypostfix)formatrr)r$rrr__str__szComplicatedSubArray.__str__cCsd|jj|S)Nz <{0} {1}>)rWr&r/)r$rrr__repr__szComplicatedSubArray.__repr__cCst|tstd|S)Nz!Can only set to MySubArray values)rLrV ValueError)r$rRrrrrPs z#ComplicatedSubArray._validate_inputcstt||||dS)N)r#rVrSrP)r$itemrR)r&rrrSs zComplicatedSubArray.__setitem__cs.tt||}t|tjs*|t}|S)N)r#rVrKrLrrErMr)r$r[rR)r&rrrKs zComplicatedSubArray.__getitem__cCst|S)N)rC)r$rrrrFszComplicatedSubArray.flatcCs|}||dd<dS)N)Zravel)r$rRyrrrrFsNcsDtt|||}|dk r@|dtjkr@|jddd|jd<|S)NrZ multipliedr()r#rV__array_wrap__rZmultiplyrr*)r$r%context)r&rrr]sz"ComplicatedSubArray.__array_wrap__)N) r/r0r1rXrYrPrSrKr?rFsetterr]r2rr)r&rrVs   rVc@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)TestSubclassingcCs2tjddd}t|dddddgd}||f|_dS)Nfloat)Zdtyperr()r9)rr mmatrixr8)r$rmxrrrsetUpszTestSubclassing.setUpcCs^td}dddddg}t|}t||d}|t|tt|j||t|jtdS)Nrarr()r9) rr rr assertTruerLr r r:)r$rmxsubZxmsubrrrtest_data_subclassings   z%TestSubclassing.test_data_subclassingcCs"|j\}}|t|jtjdS)N)r8rfrLr:rrB)r$rrdrrrtest_maskedarray_subclassings z,TestSubclassing.test_maskedarray_subclassingc CsN|j\}}tjdd.|tt|ttt|t|WdQRXdS)Nignore)r)r8rZerrstaterfrLrrcr )r$rrdrrrtest_masked_unary_operationss z,TestSubclassing.test_masked_unary_operationscCs|j\}}|tt||t|tt||ttt|||||tt||jtj|tt ||t|tt ||t|tt ||tdS)N) r8rfrLrrcr r:rrBZouterr)r$rrdrrrtest_masked_binary_operationss z-TestSubclassing.test_masked_binary_operationscCsd|j\}}t|j|jd}|tt||t|tt||ttt||t||dS)N)r9) r8rrMr9rfrLrrcr )r$rrdZxmxrrrtest_masked_binary_operations2s  z.TestSubclassing.test_masked_binary_operations2cCsttddgdgdd}tt|}t|}|d}|t|t|t|t |t|j t t |j j i|d}|t|t|t|t|t|j t ||j j ddk|d7}|t|t|t|t|t|j t ||j j ddk| dddddgt |jdddddg|j dddddgt |jdddddgt|dd id }t|}|t|d t |j |j dS) Nrarr()r9r'r-namer)rr)r r rsubarray msubarrayrfrLr r7r:rr rZ _set_mask_maskr@hasattr)r$rZmyZymzrhmxsubrrrtest_attributepropagations4 z)TestSubclassing.test_attributepropagationcCstd}dddddg}ddt||D}t||d|id}t|dd }|t|t |t|tt|j |t |}|t|t |t|tt|j |t|d d }|t|tt|j |j t|j |j t |}|t|tt|j |j t|j |dS) Nrarr(cSsg|]\}}||fqSrr).0ijrrr sz=TestSubclassing.test_subclasspreservation..rh)r9rF)ZsubokT) rr zipr7rrfrLr r rsrrr)r$rrgZxinforhrvrrrtest_subclasspreservations(     z)TestSubclassing.test_subclasspreservationcCstd}t|}t|dddddgd}|t|dt|t|dt|t|ddt|t|dt|t|djt||dtk|t|d jt|t|ddjt|t|jdjt||jdtk|t|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 baseclassraTF)r9r()r(.ror)r.N)rr rVrrfrLr8r rFbaserrZrSslice)r$rxcsubmxcsubrrrtest_subclass_itemss.   z#TestSubclassing.test_subclass_itemscCsrtd}t|}t|}|t|djt|t|djt|t|dt|t|dtdS)Nra)r(.)r.r(r)rr rVrrfrLr8)r$rrZ mxcsub_nomaskrrrtest_subclass_nomask_itemsCs z*TestSubclassing.test_subclass_nomask_itemscCsrtd}t|dddddgd}|t|dt|}t|dddddgd}|t|dtjdS)zOtest that repr uses the name of the subclass and 'array' for np.ndarrayraTF)r9rzmasked_{0}(data = [-- 1 -- 3 4]N) rr rrfrepr startswithrrWr/)r$rrdrhrvrrrtest_subclass_reprNs  z"TestSubclassing.test_subclass_reprcCstd}t|}t|dddddgd}|t|dkt|}tt|j dtj j j t|dddddgd}|t|dkdS) z7test str with subclass that has overridden str, setitemraTF)r9z [-- 1 -- 3 4]rz myprefix [-- 1 -- 3 4] mypostfixN) rr rrrfstrrVrrZrSZmaZcoreZmasked_print_option)r$rrhrvrrrrrtest_subclass_strYs   z!TestSubclassing.test_subclass_strcCstdddddddgd}td dddddgd}t||}|d |jk||jd dk||}|d |jk||jd dkdS) NZtestr(rora)r8rr)r3rsubtractrfr4)r$Zarr1Zarr2Zdiff1Zdiff2rrr$test_pure_subclass_info_preservationgs z4TestSubclassing.test_pure_subclass_info_preservationN)r/r0r1rerirjrlrmrnrwr}rrrrrrrrrr`s  !%  r`__main__))r6Z __future__rrrZnumpyrZ numpy.testingrrrrZnumpy.ma.testutilsr Z numpy.ma.corer r r r rrrrrrrrrErrqr3r7rrrBrArcobjectrCrVr`r/rrrrs$ 8,G