1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
U
P±d|Bã@sdZddlZddlmZddlmZmZddlm    Z    ddl
m Z m Z m Z mZmZmZmZmZmZmZmZmZdd„ZGd    d
„d
ejƒZeZGd d „d eƒZGd d„deeƒZeZGdd„dƒZGdd„deƒZGdd„deƒZ Gdd„dƒZ!Gdd„dƒZ"dd„Z#Gdd„dƒZ$dS)z½Tests 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)ÚNDArrayOperatorsMixin)Úassert_Ú assert_raises)Ú assert_equal) ÚarrayÚarangeÚmaskedÚ MaskedArrayÚ masked_arrayÚlogÚaddÚhypotÚdivideÚasarrayÚ
asanyarrayÚnomaskcCst|dt|ƒ…|ƒdS©N)rÚlen)ÚaÚb©rúVd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/ma/tests/test_subclassing.pyÚassert_startswithsrcs@eZdZifdd„Z‡fdd„Z‡fdd„Z‡fdd„Z‡ZS)    ÚSubArraycCst |¡ |¡}| ¡|_|Sr)ÚnprÚviewÚcopyÚinfo)ÚclsZarrrÚxrrrÚ__new__s
zSubArray.__new__cs"tƒ |¡t|diƒ ¡|_dS©Nr)ÚsuperÚ__array_finalize__Úgetattrrr)ÚselfÚobj©Ú    __class__rrr#s zSubArray.__array_finalize__cs(tƒ |¡}|j dd¡d|jd<|S)NÚaddedré)r"Ú__add__rÚget©r%ÚotherÚresultr'rrr+$s zSubArray.__add__cs(tƒ |¡}|j dd¡d|jd<|S)NÚiaddedrr*)r"Ú__iadd__rr,r-r'rrr1)s zSubArray.__iadd__)Ú__name__Ú
__module__Ú __qualname__r r#r+r1Ú __classcell__rrr'rrs   rcs"eZdZdZd‡fdd„    Z‡ZS)ÚSubMaskedArrayz<Pure subclass of MaskedArray, keeping some info on subclass.Nc stƒj|f|Ž}||jd<|Sr!)r"r Ú_optinfo)rrÚkwargsr&r'rrr 4s
zSubMaskedArray.__new__)N)r2r3r4Ú__doc__r r5rrr'rr62sr6c@s&eZdZiefdd„Zedd„ƒZdS)Ú    MSubArraycCs&t||ƒ}tj|||d}|j|_|S)N)ÚdataÚmask)rr    r r)rr;rr<ZsubarrÚ_datarrrr <s
zMSubArray.__new__cCs| t¡}d|_|S)NF)rr    Z _sharedmask)r%Z_viewrrrÚ_seriesBs
zMSubArray._seriesN)r2r3r4rr Úpropertyr>rrrrr::sr:c@s8eZdZdZdd„Zdd„Zdd„Zdd    „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||_| tj¡j|_dSr)Ú    _originalrrÚndarrayÚflatÚ    _dataiter)r%rrrrÚ__init__WszCSAIterator.__init__cCs|Srr©r%rrrÚ__iter__[szCSAIterator.__iter__cCs4|j |¡}t|tjƒs | ¡}| t|jƒ¡}|Sr)    rDÚ __getitem__Ú
isinstancerrBÚ    __array__rÚtyperA)r%ZindxÚoutrrrrH^s
  zCSAIterator.__getitem__cCs|j |¡|j|<dSr)rAÚ_validate_inputrD)r%ÚindexÚvaluerrrÚ __setitem__eszCSAIterator.__setitem__cCst|jƒ ¡ t|jƒ¡Sr)ÚnextrDrJrrKrArFrrrÚ__next__hszCSAIterator.__next__N)    r2r3r4r9rErGrHrPrRrrrrr@Ps r@csheZdZdd„Zdd„Zdd„Z‡fdd„Z‡fd    d
„Zed d „ƒZ    e    j
d d „ƒZ    d‡fdd„    Z ‡Z S)ÚComplicatedSubArraycCsd| t¡›dS)Nz    myprefix z
 mypostfix)rrrFrrrÚ__str__nszComplicatedSubArray.__str__cCsd|jj›d|›dS)Nú<ú ú>)r(r2rFrrrÚ__repr__qszComplicatedSubArray.__repr__cCst|tƒstdƒ‚|S)Nz!Can only set to MySubArray values)rIrSÚ
ValueError)r%rOrrrrMus
z#ComplicatedSubArray._validate_inputcstƒ || |¡¡dSr)r"rPrM©r%ÚitemrOr'rrrPzszComplicatedSubArray.__setitem__cs*tƒ |¡}t|tjƒs&| ¡ t¡}|Sr)r"rHrIrrBrJrrSrZr'rrrHs  zComplicatedSubArray.__getitem__cCst|ƒSr)r@rFrrrrC†szComplicatedSubArray.flatcCs| ¡}||dd…<dSr)Zravel)r%rOÚyrrrrCŠsNcs@tƒ ||¡}|dk    r<|dtjkr<|j dd¡d|jd<|S)NrZ
multipliedr*)r"Ú__array_wrap__rÚmultiplyrr,)r%r&Úcontextr'rrr]sz"ComplicatedSubArray.__array_wrap__)N) r2r3r4rTrXrMrPrHr?rCÚsetterr]r5rrr'rrSls  
 
rSc@s4eZdZdZdZdd„Zdd„Zdd„Zd    d
„Zd S) Ú WrappedArrayz 
    Wrapping a MaskedArray rather than subclassing to test that
    ufunc deferrals are commutative.
    See: https://github.com/numpy/numpy/issues/15200)
    écKs||_||_dSr)Ú_arrayÚattrs)r%rrdrrrrEŸszWrappedArray.__init__cCs|jj›d|j›d|j›dS)Nz(
Ú
z
))r(r2rcrdrFrrrrX£szWrappedArray.__repr__cCs t |j¡Sr)rrrcrFrrrrJ¦szWrappedArray.__array__cs8|dkr0‡fdd„|Dƒ}ˆj|||ŽfˆjŽStSdS)NÚ__call__cs"g|]}t|ˆjƒr|jn|‘qSr)rIr(rc)Ú.0ÚargrFrrÚ
<listcomp>«sÿz0WrappedArray.__array_ufunc__.<locals>.<listcomp>)r(rdÚNotImplemented)r%ZufuncÚmethodÚinputsr8rrFrÚ__array_ufunc__©s 
ÿzWrappedArray.__array_ufunc__N)    r2r3r4r9Z__array_priority__rErXrJrmrrrrra—s rac@steZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚTestSubclassingcCs2tjddd}t|dddddgd}||f|_dS)NéÚfloat)Zdtyperr*©r<)rrÚ    msubarrayr;©r%rÚmxrrrÚ setup_methodµszTestSubclassing.setup_methodcCsZt d¡}dddddg}t|ƒ}t||d}tt|tƒƒt|j|ƒtt|jtƒƒdS)Nrorr*rq)    rrrr
rrIr    rr=)r%rÚmÚxsubZxmsubrrrÚtest_data_subclassingºs
  z%TestSubclassing.test_data_subclassingcCs|j\}}tt|jtƒƒdSr)r;rrIr=ÚsubarrayrsrrrÚtest_maskedarray_subclassingÄs
z,TestSubclassing.test_maskedarray_subclassingc    CsL|j\}}tjdd,ttt|ƒtƒƒtt|ƒt |¡ƒW5QRXdS©NÚignore)r)r;rÚerrstaterrIr rrrrsrrrÚtest_masked_unary_operationsÉs
z,TestSubclassing.test_masked_unary_operationscCsž|j\}}ttt||ƒtƒƒttt||ƒtƒƒtt||ƒ||ƒttt||ƒjtƒƒttt ||¡tƒƒttt    ||ƒtƒƒttt    ||ƒtƒƒdSr)
r;rrIr rrrr=ryÚouterr rsrrrÚtest_masked_binary_operationsÐs
z-TestSubclassing.test_masked_binary_operationscCs`|j\}}t|j ¡|jd}ttt||ƒtƒƒttt||ƒtƒƒtt||ƒt||ƒƒdS)Nrq)    r;r
rJr<rrIrrrr)r%rrtZxmxrrrÚtest_masked_binary_operations2Ýs
 
z.TestSubclassing.test_masked_binary_operations2cCs’ttdƒdgdgdd}tt|ƒƒ}t|ƒ}|d}tt|tƒƒtt|tƒ ƒtt|j    t
ƒƒt |j    j iƒ|d}tt|tƒƒtt|tƒƒtt|j    t
ƒƒt|j    j ddkƒ|d7}tt|tƒƒtt|tƒƒtt|j    t
ƒƒt|j    j ddkƒ|  dddddg¡t |jdddddgƒ|j  dddddg¡t |jdddddgƒt|dd    id
}t|ƒ}tt|d ƒƒt |j |j ƒdS) Nrorr*érqr)r0Únamer)rr)rrr
ryrrrrIr    r:r=rrrZ    _set_maskÚ_maskr>Úhasattr)r%rZmyZymÚzrwÚmxsubrrrÚtest_attributepropagationås4 z)TestSubclassing.test_attributepropagationcCst d¡}dddddg}dd„t||ƒDƒ}t||d|id}t|dd    }tt|tƒ ƒtt|tƒƒt|j    |ƒt
|ƒ}tt|tƒ ƒtt|tƒƒt|j    |ƒt|d
d    }tt|tƒƒt|j |j ƒt|j    |j    ƒt |ƒ}tt|tƒƒt|j |j ƒt|j    |ƒdS) Nrorr*cSsg|]\}}||f‘qSrr)rgÚiÚjrrrri
sz=TestSubclassing.test_subclasspreservation.<locals>.<listcomp>rw)r<rF)ZsubokT) rrÚzipr:r
rrIr    rr„rrr)r%rrvZxinforwr‡rrrÚtest_subclasspreservations(
    z)TestSubclassing.test_subclasspreservationcCsÊt d¡}t|ƒ}t|dddddgd}tt|dtƒƒtt|dtƒƒtt|dd…tƒƒtt|dtƒƒtt|djtƒƒt|dtkƒtt|d    jtƒƒtt|dd…jtƒƒtt|jdjtƒƒt|jdtkƒtt|jdd…j    tƒƒt
t |j d|dƒt
t |j d|dƒt
t |j t ddƒ|dd…ƒ|d|d<|dd…|dd…<t
t |jj d|dƒt
t |jj t ddƒ|dd…ƒ|d|jd<|dd…|jdd…<d
S) z,test that getter and setter go via baseclassroTFrqr*©r*.r‚r©r.N)rrrSr
rrIr;rrCÚbaserrYrPÚslice)r%rÚxcsubÚmxcsubrrrÚtest_subclass_items!s.
  z#TestSubclassing.test_subclass_itemscCsjt d¡}t|ƒ}t|ƒ}tt|djtƒƒtt|djtƒƒtt|dtƒƒtt|dtƒƒdS)NrorrŽr*r)rrrSr
rrIr;)r%rr‘Z mxcsub_nomaskrrrÚtest_subclass_nomask_itemsFs
z*TestSubclassing.test_subclass_nomask_itemscCsht d¡}t|dddddgd}tt|ƒdƒt|ƒ}t|dddddgd}tt|ƒdtj›dƒdS)    zOtest that repr uses the name of the subclass
        and 'array' for np.ndarrayroTFrqr
Zmasked_z(data=[--, 1, --, 3, 4]N)rrr
rÚreprrr2)r%rrtrwr‡rrrÚtest_subclass_reprQs
 ÿz"TestSubclassing.test_subclass_reprcCs|t d¡}t|ƒ}t|dddddgd}tt|ƒdƒt|ƒ}tt|j    dtj
j j ƒt|dddddgd}tt|ƒdƒdS)    z7test str with subclass that has overridden str, setitemroTFrqz [-- 1 -- 3 4]rz myprefix [-- 1 -- 3 4] mypostfixN) rrrr
rÚstrrSrrYrPÚmaÚcoreZmasked_print_option)r%rrwr‡r‘r’rrrÚtest_subclass_str\s
 
ÿz!TestSubclassing.test_subclass_strcCs†tdddddddgd}td    dddddgd}t ||¡}td
|jkƒt|jd
dkƒ||}td
|jkƒt|jd
dkƒdS) NÚtestr*éér‚roé)r;rr)r6rÚsubtractrr7)r%Zarr1Zarr2Zdiff1Zdiff2rrrÚ$test_pure_subclass_info_preservationjs z4TestSubclassing.test_pure_subclass_info_preservationN)r2r3r4rurxrzr~r€rrˆrŒr“r”r–ršr rrrrrn²s
 !%  rnc@s eZdZdZdd„Zdd„ZdS)ÚArrayNoInheritancez6Quantity-like class that does not inherit from ndarraycCs||_||_dSr)Ú    magnitudeÚunits)r%r;r£rrrrEyszArrayNoInheritance.__init__cCs t|j|ƒSr)r$r¢)r%ÚattrrrrÚ __getattr__}szArrayNoInheritance.__getattr__N)r2r3r4r9rEr¥rrrrr¡wsr¡cCstjjdddgdddgd}t|dƒ}tj |¡}t|j|jƒt|j|jƒdddg|_t|j|jƒt|jƒtjj|dd}t|j|jƒt|j|jƒdddg|_tdddg|jƒt|j ƒtjj|dd    }t|j|jƒt|jdddgƒt|j ƒt|j ƒdS)
Nr*rœrTFrqZmeters)r)Z    keep_mask)    rr˜rr¡rr;r<rZ
sharedmask)Z data_maskedZdata_masked_unitsZ    new_arrayrrrÚtest_array_no_inheritances&
 
   r¦c@s$eZdZdd„Zdd„Zdd„ZdS)ÚTestClassWrappingcCs2tjjdddgdddgd}t|ƒ}||f|_dS)Nr*rroFTrq)rr˜r
rar;©r%rvÚwmrrrru¤szTestClassWrapping.setup_methodc    Cs:|j\}}tjddttt |¡tƒƒW5QRXdSr{)r;rr}rrIr rar¨rrrr~©s
z.TestClassWrapping.test_masked_unary_operationscCs4|j\}}ttt ||¡tƒƒttt ||¡tƒƒttt ||¡tƒƒtt ||¡||ƒttt ||¡tƒƒttt ||¡tƒƒttt ||¡tƒƒttt ||¡tƒƒtt ||¡|t ||¡|ƒt     ||g¡}ttt ||¡tƒƒttt ||¡tƒƒtt ||¡t ||¡ƒdSr)
r;rrIrr rarr rÚstack)r%rvr©Úm2rrrr€¯s
"z/TestClassWrapping.test_masked_binary_operationsN)r2r3r4rur~r€rrrrr§¡sr§)%r9ÚnumpyrZnumpy.lib.mixinsrZ numpy.testingrrZnumpy.ma.testutilsrZ numpy.ma.corerrrr    r
r r r rrrrrrBrryr6r:rrr@rSrarnr¡r¦r§rrrrÚ<module>s&  8+F