+
    ei(B  c                   sZ   R t ^ RIt^ RIHt ^ RIHtHtHtH	t	H
t
HtHtHtHtHtHtHt ^ RIHt ^ RIHtHt R t ! R R]P0                  4      t]t ! R	 R
]4      t ! R R]]4      t]t ! R R4      t ! R R]4      t ! R R]4      t  ! R R4      t! ! R R4      t"R t# ! R R4      t$R# )zoTests suite for MaskedArray & subclassing.

:author: Pierre Gerard-Marchant
:contact: pierregm_at_uga_dot_edu

N)NDArrayOperatorsMixin)MaskedArrayaddarangearray
asanyarrayasarraydividehypotlogmaskedmasked_arraynomask)assert_equal)assert_assert_raisesc                 s6    \        V R \        V4       V4       R # N)r   Zlen)aZb   &&F/usr/lib64/python3.14/site-packages/numpy/ma/tests/test_subclassing.pyassert_startswithr      s    7CFQ    c                   sV   a a ] tR t^ t o/ 3R ltV 3R ltV 3R ltV 3R ltRtVt	V ;t
# )SubArrayc                sz    \         P                  ! V4      P                  V 4      pVP                  4       Vn        V# r   )npr   viewcopyinfo)clsZarrr   xs   &&& r   __new__ZSubArray.__new__#   s-    MM###C(r   c                sf   < \         SV `  V4       \        VR / 4      P                  4       V n        R# )r   N)super__array_finalize__getattrr   r   )selfobj	__class__s   &&r   r   ZSubArray.__array_finalize__(   s)    "3'C,113	r   c                   < \         SV `  V4      pVP                  P                  R ^ 4      ^,           VP                  R &   V# )added)r   __add__r   getr!   ZotherZresultr#      && r   r&   ZSubArray.__add__,   s8    '%{{w:Q>Gr   c                r$   )iadded)r   __iadd__r   r'   r(   r)   r   r+   ZSubArray.__iadd__1   s9    !%( &! <q @Hr   r   )__name__
__module____qualname____firstlineno__r   r   r&   r+   __static_attributes____classdictcell____classcell__r#   __classdict__   @@r   r   r       s#       " 
4
 r   r   c                   s:   a a ] tR t^:t oRtRV 3R lltRtVtV ;t# )SubMaskedArrayz<Pure subclass of MaskedArray, keeping some info on subclass.c                sF   < \         SV `  ! V 3/ VB pWP                  R &   V# r,   )r   r   _optinfo)r   r   kwargsr"   r#   s   &&, r   r   ZSubMaskedArray.__new__<   s'    goc,V,#V
r    r   )	r-   r.   r/   r0   __doc__r   r1   r2   r3   r4   r6   r   r7   r7   :   s     F r   r7   c                   s>   a  ] tR t^Bt o / ]3R lt]R 4       tRtV t	R# )	MSubArrayc                sn    \        W4      p\        P                  ! WVR 7      pVP                  Vn        V# ))datamask)r   r   r   r   )r   r=   r   r>   Zsubarr_datas   &&&&  r   r   ZMSubArray.__new__D   s.    $%##C4@[[
r   c                s>    V P                  \        4      pR Vn        V# )F)r   r   Z_sharedmask)r!   Z_views   & r   _seriesZMSubArray._seriesJ   s    		+&!r   r:   N)
r-   r.   r/   r0   r   r   propertyr@   r1   r2   r5      @r   r<   r<   B   s#      "   r   r<   c                   sB   a  ] tR t^Yt o RtR tR tR tR tR t	Rt
V tR# )	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
c                sn    Wn         VP                  \        P                  4      P                  V n        R # r   )	_originalr   r   ndarrayflat	_dataiter)r!   r   r   r   __init__ZCSAIterator.__init__`   s!    

+00r   c                s    V # r   r:   r!      &r   __iter__ZCSAIterator.__iter__d   s    r   c                s    V P                   P                  V4      p\        V\        P                  4      '       g   VP                  4       pVP                  \        V P                  4      4      pV# r   )	rH   __getitem__
isinstancer   rF   	__array__r   typerE   )r!   ZindxZout   && r   rM   ZCSAIterator.__getitem__g   sN    nn((.#rzz**--/ChhtDNN+,
r   c                sV    V P                   P                  V4      V P                  V&   R # r   )rE   _validate_inputrH   )r!   Zindexvalue   &&&r   __setitem__ZCSAIterator.__setitem__n   s     $ > >u Eur   c                s    \        V P                  4      P                  4       P                  \	        V P
                  4      4      # r   )ZnextrH   rO   r   rP   rE   rJ   rK   r   __next__ZCSAIterator.__next__q   s.    DNN#--/44T$..5IJJr   )rH   rE   N)r-   r.   r/   r0   r;   rI   rL   rM   rU   rV   r1   r2   rB   rC   r   rD   rD   Y   s+     1FK Kr   rD   c                   s   a a ] tR t^ut oR tR tR tV 3R ltV 3R lt]	R 4       t
]
P                  R 4       t
R
V 3R lltR	tVtV ;t# )ComplicatedSubArrayc                s4    R V P                  \        4       R2# )z	myprefix z
 mypostfix)r   r   rJ   rK   r   __str__ZComplicatedSubArray.__str__w   s    499X./z::r   c                s<    R V P                   P                   RV  R2# )Z<Z Z>)r#   r-   rJ   rK   r   __repr__ZComplicatedSubArray.__repr__z   s"    4>>**+1TF!44r   c                sH    \        V\        4      '       g   \        R 4      hV# )z!Can only set to MySubArray values)rN   rW   
ValueError)r!   rS   r   r   rR   Z#ComplicatedSubArray._validate_input~   s!    %!455@AAr   c                sD   < \         SV `  WP                  V4      4       R # r   )r   rU   rR   r!   ZitemrS   r#   s   &&&r   rU   ZComplicatedSubArray.__setitem__   s     	D"6"6u"=>r   c                s   < \         SV `  V4      p\        V\        P                  4      '       g$   VP                  4       P                  \        4      pV# r   )r   rM   rN   r   rF   rO   r   rW   r[   r)   r   rM   ZComplicatedSubArray.__getitem__   s@    #D)%,,OO%**+>?Er   c                s    \        V 4      # r   )rD   rJ   rK   r   rG   ComplicatedSubArray.flat   s    4  r   c                s.    V P                  4       pWR &   R# ):NNNN)Zravel)r!   rS   ZyrQ   r   rG   r\      s    JJL!r   c                s   < \         SV `  WV4      pVeL   V^ ,          \        P                  J d1   VP                  P                  R^ 4      ^,           VP                  R&   V# )NZ
multiplied)r   __array_wrap__r   Zmultiplyr   r'   )r!   r"   ZcontextZreturn_scalarr#   s   &&&&r   r]   Z"ComplicatedSubArray.__array_wrap__   sP    g$S=A71:#<%(XX\\,%BQ%FCHH\"
r   r:   )NF)r-   r.   r/   r0   rX   rY   rR   rU   rM   rA   rG   Zsetterr]   r1   r2   r3   r4   r6   r   rW   rW   u   sT     ;5
?
 ! ! 
[[  r   rW   c                   sH   a  ] tR t^t o RtRt^tR tR tRR lt	R t
RtV tR# )	WrappedArrayz
Wrapping a MaskedArray rather than subclassing to test that
ufunc deferrals are commutative.
See: https://github.com/numpy/numpy/issues/15200)
c                    Wn         W n        R # r   _arrayattrs)r!   r   rb   s   &&,r   rI   ZWrappedArray.__init__   s    
r   c                sh    V P                   P                   R V P                   RV P                   R2# )z(
Z
z
))r#   r-   ra   rb   rJ   rK   r   rY   ZWrappedArray.__repr__   s.    ..))*#dkk]"TZZLLLr   Nc                sB    \         P                  ! V P                  4      # r   )r   r   ra   )r!   dtyper   rT   r   rO   ZWrappedArray.__array__   s    zz$++&&r   c                s    VR 8X  d\   V Uu. uF,  p\        WPP                  4      '       d   VP                  MTNK.  	  ppV P                  ! V! V/ VB 3/ V P                  B # \        # u upi )Z__call__)rN   r#   ra   rb   ZNotImplemented)r!   ZufuncZmethodZinputsr9   Zargs   &&&*, r   __array_ufunc__ZWrappedArray.__array_ufunc__   sn    Z!')!'# %/sNN$C$CcjjL!'  )>>%":6":IdjjII!!	)s   2A)r`   )NN)r-   r.   r/   r0   r;   Z	__slots__Z__array_priority__rI   rY   rO   rd   r1   r2   rB   rC   r   r^   r^      s1     
 $IM'" "r   r^   c                   sn   a  ] tR t^t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tRtV tR# )TestSubclassingc                sd    \         P                  ! ^RR7      p\        V. ROR7      pW3V n        R# )   Zfloat)rc   r>   N)       rh   rh   rh   )r   r   	msubarrayr=   r!   r   mx   &  r   setup_methodZTestSubclassing.setup_method   s'    IIaw'q/G	r   c                s   \         P                  ! ^4      p. ROp\        V4      p\        W2R7      p\	        \        V\        4      4       \        VP                  V4       \	        \        VP                  \        4      4       R# )rf   rg   Nrh   rh   ri   rh   rh   )	r   r   r   r   r   rN   r   r   r?   )r!   r   mxsubZxmsub   &    r   test_data_subclassingZ%TestSubclassing.test_data_subclassing   sW    IIaL{T*
5+./U[[$'
5;;12r   c                sh    V P                   w  r\        \        VP                  \        4      4       R # r   )r=   r   rN   r?   subarrayrk   rm   r   test_maskedarray_subclassingZ,TestSubclassing.test_maskedarray_subclassing   s     ))
288X./r   c           	     s0   V P                   w  r\        P                  ! R R7      ;_uu_ 4        \        \	        \        V4      \        4      4       \        \        V4      \        P
                  ! V4      4       RRR4       R#   + '       g   i     R# ; iZignore)r   N)r=   r   errstater   rN   r	   rj   r   rk   rm   r   test_masked_unary_operationsZ,TestSubclassing.test_masked_unary_operations   sT    ))[[))Js2w	23Q+ *)))s   ABB	c                s   V P                   w  r\        \        \        W"4      \        4      4       \        \        \        W!4      \        4      4       \        \        W!4      W!,           4       \        \        \        W"4      P                  \        4      4       \        \        \        P                  ! W"4      \        4      4       \        \        \        W"4      \        4      4       \        \        \        W!4      \        4      4       R # r   )
r=   r   rN   r   rj   r   r?   rt   Zouterr   rk   rm   r   test_masked_binary_operationsZ-TestSubclassing.test_masked_binary_operations   s    ))
3r;	23
3r:y12SZ(
3r;,,h78
399R,i89
5=)45
5<34r   c                sD   V P                   w  r\        VP                   P                  4       VP                  R 7      p\	        \        \        W"4      \        4      4       \	        \        \        W!4      \        4      4       \        \        W"4      \        W34      4       R# )rg   N)	r=   r   rO   r>   r   rN   r   rj   r   )r!   r   rl   Zxmx   &   r   test_masked_binary_operations2Z.TestSubclassing.test_masked_binary_operations2   sc    ))277,,.RWW=
6">956
6"=)45VB^VC%56r   c                s   \        \        ^4      ^ .^.^,          ,           R7      p\        \        V4      4      p\	        V4      pV^,           p\        \        V\        4      4       \        \        V\        4      '       * 4       \        \        VP                  \        4      4       \        VP                  P                  / 4       V^,           p\        \        V\        4      4       \        \        V\        4      4       \        \        VP                  \        4      4       \        VP                  P                  R,          ^ 8  4       V^,          p\        \        V\        4      4       \        \        V\        4      4       \        \        VP                  \        4      4       \        VP                  P                  R,          ^ 8  4       VP                  . R	O4       \        VP                  . R	O4       VP                  P                  . R
O4       \        VP                  . R
O4       \        VRR/R7      p\        V4      p\        \!        VR4      4       \        VP                  VP                  4       R# )rf   rg   r%   r*   Znamer   r,   r   N)ri   rh   rh   rh   ri   )rh   rh   rh   rh   ri   )r   r   r   rt   rj   r   rN   r   r<   r?   r   r   r   Z	_set_mask_maskr@   Zhasattr)r!   r   ZmyZymZzrq   mxsubs   &      r   test_attributepropagationZ)TestSubclassing.test_attributepropagation   s   &)1#a-0(1+&q\!V
1k*+Jq),,-
177H-.QWW\\2&!V
1k*+
1i()
177H-.W%)*
a
2{+,
2y)*
288X./h'!+,
_%RXX/


_-RXX/.T"v&'UZZ+r   c                sd   \         P                  ! ^4      p. ROp\        \        W4      4      p\	        WRV/R7      p\        VRR7      p\        \        V\        4      '       * 4       \        \        V\        4      4       \        VP                  V4       \        V4      p\        \        V\        4      '       * 4       \        \        V\        4      4       \        VP                  V4       \        VRR7      p\        \        V\        4      4       \        VP                  VP                  4       \        VP                  VP                  4       \        V4      p\        \        V\        4      4       \        VP                  VP                  4       \        VP                  V4       R# )rf   rq   )r>   r   F)ZsubokTNro   )r   r   ZlistZzipr<   r   r   rN   r   r   r|   r   r   r   )r!   r   rp   Zxinforq   r}      &     r   test_subclasspreservationZ)TestSubclassing.test_subclasspreservation  s   IIaLSY&%9T/Jui001
5+./U[[!$Jui001
5+./U[[!$T.
5),-UZZ+U[[$**-4 
5),-UZZ+U[[!$r   c                s   \         P                  ! ^4      p\        V4      p\        V. ROR7      p\	        \        V^,          \        4      4       \	        \        VR,          \        4      4       \	        \        VR,          \        4      4       \	        \        V^,          \        4      4       \	        \        VR,          P                  \        4      4       \	        V^ ,          \        J 4       \	        \        VR,          P                  \        4      4       \	        \        VR,          P                  \        4      4       \	        \        VP                  ^,          P                  \        4      4       \	        VP                  ^ ,          \        J 4       \	        \        VP                  R,          P                  \        4      4       \        \        VP                  ^V^,          4       \        \        VP                  ^V^,          4       \        \        VP                  \        ^^4      VR,          4       V^,          V^&   VR,          VR&   \        \        VP                  P                  ^V^,          4       \        \        VP                  P                  \        ^^4      VR,          4       V^,          VP                  ^&   VR,          VP                  R&   R# )z,test that getter and setter go via baseclassrg   :ri      NNTFTFFri   .rh   .)r   r   rW   r   r   rN   r=   r
   rG   Zbaser   rZ   rU   Zslice)r!   r   xcsubmxcsubrz   r   test_subclass_itemsZ#TestSubclassing.test_subclass_items+  s   IIaL#A&e*KL 	
58%89:
5=*=>?
5:':;< 	
6!9&9:;
6&>..0CDEq	V#$
6&>..0CDE
6#;++-@AB 	
6;;q>..0CDEA&()
6;;s+002EFG 	j%"3"3Q!=j&"4"4a1>j&"4"4eAqk1S6J!Hq	Cjsj&++"9"91adCj&++"9"95A;#OqA :Cr   c                s   \         P                  ! ^4      p\        V4      p\        V4      p\	        \        VR,          P                  \        4      4       \	        \        VR,          P                  \        4      4       \	        \        V^,          \        4      4       \	        \        V^ ,          \        4      4       R# )rf   Nr   r   )r   r   rW   r   r   rN   r=   )r!   r   r   Zmxcsub_nomaskrz   r   test_subclass_nomask_itemsZ*TestSubclassing.test_subclass_nomask_itemsP  s    IIaL#A&$U+
=0557JKL
=0557JKL
=+-@AB
=+-@ABr   c                s    \         P                  ! ^4      p\        V. ROR7      p\        \	        V4      R4       \        V4      p\        V. ROR7      p\        \	        V4      R\
        P                   R24       R# )zGtest that repr uses the name of the subclass
and 'array' for np.ndarrayrg   r   Zmasked_z(data=[--, 1, --, 3, 4]Nr   )r   r   r   r   Zreprr   r-   )r!   r   rl   rq   r}   rr   r   test_subclass_reprZ"TestSubclassing.test_subclass_repr[  se     IIaL!"CD$r(N3{T(IJ$u+h''((?@	Br   c                sj   \         P                  ! ^4      p\        V4      p\        V. ROR7      p\	        \        V4      R4       \        V4      p\        \        VP                  ^ \         P                  P                  P                  4       \        V. ROR7      p\	        \        V4      R4       R# )z7test str with subclass that has overridden str, setitemrg   z[-- 1 -- 3 4]z myprefix [-- 1 -- 3 4] mypostfixNr   )r   r   r   r   r   ZstrrW   r   rZ   rU   maZcoreZmasked_print_option)r!   r   rq   r}   r   r   r   r   test_subclass_strZ!TestSubclassing.test_subclass_strf  s     IIaL{T(IJSZ1#A&j%"3"3Qeejj44	6e*KLS["DEr   c                sX   \        R . ROR7      p\        . ROR7      p\        P                  ! W4      p\        RVP                  9   4       \        VP                  R,          R 8H  4       W,
          p\        RVP                  9   4       \        VP                  R,          R 8H  4       R# )Ztestr=   r   N)ri         r   rf   i   )rh   ri   r   r   r   rf   )r7   r   Zsubtractr   r8   )r!   Zarr1Zarr2Zdiff1Zdiff2rr   r   $test_pure_subclass_info_preservationZ4TestSubclassing.test_pure_subclass_info_preservationt  s     f+=>#56D'%..()v&&01%..()v&&01r   r   N)r-   r.   r/   r0   rn   rs   ru   rx   ry   r{   r~   r   r   r   r   r   r   r1   r2   rB   rC   r   re   re      sP     
30
,57,B%6#&J	C	BF
2 
2r   re   c                   s0   a  ] tR tRt o RtR tR tRtV tR# )ArrayNoInheritancei  z6Quantity-like class that does not inherit from ndarrayc                r_   r   	magnitudeunits)r!   r=   r   rT   r   rI   ZArrayNoInheritance.__init__  s    
r   c                s.    \        V P                  V4      # r   )r    r   )r!   Zattrr   r   __getattr__ZArrayNoInheritance.__getattr__  s    t~~t,,r   r   N)	r-   r.   r/   r0   r;   rI   r   r1   r2   rB   rC   r   r   r     s     @- -r   r   c                  s   \         P                  P                  . RO. R	OR7      p \        V R4      p\         P                  P                  V4      p\	        V P
                  VP
                  4       \	        V P                  VP                  4       . R
OV n        \	        V P                  VP                  4       \        VP                  4       \         P                  P                  VRR7      p\	        V P
                  VP
                  4       \	        V P                  VP                  4       . R	OV n        \	        . R
OVP                  4       \        VP                  '       * 4       \         P                  P                  VRR7      p\	        V P
                  VP
                  4       \	        V P                  . R	O4       \        VP                  '       * 4       \        VP                  '       * 4       R# )ri   TFrg   Zmeters)r   )Z	keep_maskN)ri   r   r   )TFT)TFF)	r   r   r   r   r   r=   r>   r   Z
sharedmask)Zdata_maskedZdata_masked_unitsZ	new_arrays      r   test_array_no_inheritancer     sT   %%++i.A+BK*;A -.I!!9>>2!!9>>2+K!!9>>2I  ! -D9I!!9>>2!!9>>2*K%y~~6	$$$% -?I!!9>>2!!#67		$$$%r   c                   s8   a  ] tR tRt o R tR tR tR tRtV t	R# )TestClassWrappingi  c                sv    \         P                  P                  . RO. ROR7      p\        V4      pW3V n        R# )ri   rg   Nri   r   rf   FTF)r   r   r   r^   r=   r!   rp   wmrm   r   rn   ZTestClassWrapping.setup_method  s.    EEy/CD!_G	r   c           	     s    V P                   w  r\        P                  ! R R7      ;_uu_ 4        \        \	        \        P
                  ! V4      \        4      4       RRR4       R#   + '       g   i     R# ; irv   )r=   r   rw   r   rN   r	   r^   r   rm   r   rx   Z.TestClassWrapping.test_masked_unary_operations  sB    ))[[))Jrvvbz<89 *)))s   .A&&A7	c                s   V P                   w  r\        \        \        P                  ! W"4      \
        4      4       \        \        \        P                  ! W4      \
        4      4       \        \        \        P                  ! W!4      \
        4      4       \        \        P                  ! W4      W,           4       \        \        \        P                  ! W4      \
        4      4       \        \        \        P                  ! W!4      \
        4      4       \        \        \        P                  ! W!4      \
        4      4       \        \        \        P                  ! W4      \
        4      4       \        \        P                  ! W!4      V,          \        P                  ! W4      V,          4       \        P                  ! W.4      p\        \        \        P                  ! W#4      \
        4      4       \        \        \        P                  ! W24      \
        4      4       \        \        P                  ! W24      \        P                  ! W#4      4       R # r   )
r=   r   rN   r   r   r^   r   r   r   Zstack)r!   rp   r   Zm2rz   r   ry   Z/TestClassWrapping.test_masked_binary_operations  sE   ))
266"><89
266!=,78
266"=,78RVVA]AF+
288A?L9:
288B?L9:
299R+\:;
299Q+\:;RYYr%)299Q?R+?@XXqf
299R,l;<
299R,l;<RYYr&		"(9:r   c                s    \        4       p\        \        VP                  R ^4       \        P
                  P                  . RO. ROR7      p\        V4      p\        \        VP                  R^4       R# )Znot_a_real_attrrg   Znot_an_attrNr   r   )r    r   ZAttributeErrorZ__setattr__r   r   r   r^   )r!   Zmixinrp   r   rz   r   test_mixins_have_slotsZ(TestClassWrapping.test_mixins_have_slots  sT    %'ne&7&79JANEEy/CD!_nbnnmQGr   r   N)
r-   r.   r/   r0   rn   rx   ry   r   r1   r2   rB   rC   r   r   r     s      
:;*H Hr   r   )%r;   Znumpyr   Znumpy.lib.mixinsr    Znumpy.ma.corer   r   r   r   r   r   r   r   r	   r
   r   r   Znumpy.ma.testutilsr   Znumpy.testingr   r   r   rF   r   rt   r7   r<   rj   rD   rW   r^   re   r   r   r   r:   r   r   <module>r      s     2    , 0 rzz . [ +  	K K8(( (V"( "8B2 B2J- -&@*H *Hr   