
    KhqB                     X   S r SSKrSSKJr  SSKJrJr  SSKJ	r	  SSK
JrJrJrJrJrJrJrJrJrJrJrJr  S r " S S	\R0                  5      r\r " S
 S\5      r " S S\\5      r\r " S S5      r " S S\5      r " S S\5      r  " S S5      r! " S S5      r"S r# " S S5      r$g)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)NDArrayOperatorsMixin)assert_assert_raises)assert_equal)arrayarangemaskedMaskedArraymasked_arraylogaddhypotdivideasarray
asanyarraynomaskc                 4    [        U S [        U5       U5        g N)r   len)abs     Q/var/www/html/env/lib/python3.13/site-packages/numpy/ma/tests/test_subclassing.pyassert_startswithr      s    7CFQ    c                   L   ^  \ rS rSr0 4S jrU 4S jrU 4S jrU 4S jrSrU =r	$ )SubArray   c                 z    [         R                  " U5      R                  U 5      nUR                  5       Ul        U$ r   )npr   viewcopyinfo)clsarrr"   xs       r   __new__SubArray.__new__   s-    MM###C(r   c                 d   > [         TU ]  U5        [        US0 5      R                  5       U l        g Nr"   )super__array_finalize__getattrr!   r"   )selfobj	__class__s     r   r+   SubArray.__array_finalize__   s,    "3'C,113	r   c                 ~   > [         TU ]  U5      nUR                  R                  SS5      S-   UR                  S'   U$ )Naddedr      )r*   __add__r"   getr-   otherresultr/   s      r   r4   SubArray.__add__$   s8    '%{{w:Q>Gr   c                 ~   > [         TU ]  U5      nUR                  R                  SS5      S-   UR                  S'   U$ )Niaddedr   r3   )r*   __iadd__r"   r5   r6   s      r   r<   SubArray.__iadd__)   s9    !%( &! <q @Hr   r"   )
__name__
__module____qualname____firstlineno__r&   r+   r4   r<   __static_attributes____classcell__r/   s   @r   r   r      s!       


 r   r   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )SubMaskedArray2   z<Pure subclass of MaskedArray, keeping some info on subclass.c                 F   > [         TU ]  " U 40 UD6nXR                  S'   U$ r)   )r*   r&   _optinfo)r#   r"   kwargsr.   r/   s       r   r&   SubMaskedArray.__new__4   s'    goc,V,#V
r    r   )r?   r@   rA   rB   __doc__r&   rC   rD   rE   s   @r   rG   rG   2   s    F r   rG   c                   2    \ rS rSr0 \4S jr\S 5       rSrg)	MSubArray:   c                 h    [        X5      n[        R                  " XUS9nUR                  Ul        U$ )N)datamask)r   r
   r&   r"   )r#   rS   r"   rT   subarr_datas         r   r&   MSubArray.__new__<   s.    $%##C4@[[
r   c                 >    U R                  [        5      nSUl        U$ NF)r    r
   _sharedmask)r-   _views     r   _seriesMSubArray._seriesB   s    		+&!r   rM   N)	r?   r@   rA   rB   r   r&   propertyr\   rC   rM   r   r   rP   rP   :   s      "   r   rP   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
CSAIteratorP   z
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                 l    Xl         UR                  [        R                  5      R                  U l        g r   )	_originalr    r   ndarrayflat	_dataiter)r-   r   s     r   __init__CSAIterator.__init__W   s!    

+00r   c                     U $ r   rM   r-   s    r   __iter__CSAIterator.__iter__[   s    r   c                     U R                   R                  U5      n[        U[        R                  5      (       d  UR                  5       nUR                  [        U R                  5      5      nU$ r   )	rf   __getitem__
isinstancer   rd   	__array__r    typerc   )r-   indxouts      r   rn   CSAIterator.__getitem__^   sN    nn((.#rzz**--/ChhtDNN+,
r   c                 T    U R                   R                  U5      U R                  U'   g r   )rc   _validate_inputrf   )r-   indexvalues      r   __setitem__CSAIterator.__setitem__e   s     $ > >u Eur   c                     [        U R                  5      R                  5       R                  [	        U R
                  5      5      $ r   )nextrf   rp   r    rq   rc   rj   s    r   __next__CSAIterator.__next__h   s.    DNN#--/44T$..5IJJr   )rf   rc   N)r?   r@   rA   rB   rN   rg   rk   rn   ry   r}   rC   rM   r   r   r`   r`   P   s"    1FKr   r`   c                      ^  \ rS rSrS rS rS rU 4S jrU 4S jr\	S 5       r
\
R                  S 5       r
SU 4S	 jjrS
rU =r$ )ComplicatedSubArrayl   c                 4    SU R                  [        5       S3$ )Nz	myprefix z
 mypostfix)r    r   rj   s    r   __str__ComplicatedSubArray.__str__n   s    499X./z::r   c                 <    SU R                   R                   SU  S3$ )N< >)r/   r?   rj   s    r   __repr__ComplicatedSubArray.__repr__q   s"    4>>**+1TF!44r   c                 F    [        U[        5      (       d  [        S5      eU$ )Nz!Can only set to MySubArray values)ro   r   
ValueError)r-   rx   s     r   rv   #ComplicatedSubArray._validate_inputu   s!    %!455@AAr   c                 B   > [         TU ]  XR                  U5      5        g r   )r*   ry   rv   r-   itemrx   r/   s      r   ry   ComplicatedSubArray.__setitem__z   s     	D"6"6u"=>r   c                    > [         TU ]  U5      n[        U[        R                  5      (       d#  UR                  5       R                  [        5      nU$ r   )r*   rn   ro   r   rd   rp   r    r   r   s      r   rn   ComplicatedSubArray.__getitem__   s@    #D)%,,OO%**+>?Er   c                     [        U 5      $ r   )r`   rj   s    r   re   ComplicatedSubArray.flat   s    4  r   c                 ,    U R                  5       nXS S & g r   )ravel)r-   rx   ys      r   re   r      s    JJL!r   c                    > [         TU ]  XU5      nUbB  US   [        R                  L a,  UR                  R                  SS5      S-   UR                  S'   U$ )Nr   
multipliedr3   )r*   __array_wrap__r   multiplyr"   r5   )r-   r.   contextreturn_scalarr/   s       r   r   "ComplicatedSubArray.__array_wrap__   sP    g$S=A71:#<%(XX\\,%BQ%FCHH\"
r   rM   rY   )r?   r@   rA   rB   r   r   rv   ry   rn   r^   re   setterr   rC   rD   rE   s   @r   r   r   l   sR    ;5
?
 ! ! 
[[  r   r   c                   <    \ rS rSrSrSrSrS rS rS
S jr	S	 r
Srg)WrappedArray   z
Wrapping a MaskedArray rather than subclassing to test that
ufunc deferrals are commutative.
See: https://github.com/numpy/numpy/issues/15200)
_arrayattrs   c                     Xl         X l        g r   r   )r-   r   r   s      r   rg   WrappedArray.__init__   s    
r   c                 h    U R                   R                   SU R                   SU R                   S3$ )Nz(

z
))r/   r?   r   r   rj   s    r   r   WrappedArray.__repr__   s.    ..))*#dkk]"TZZLLLr   Nc                 B    [         R                  " U R                  5      $ r   )r   r   r   )r-   dtyper!   s      r   rp   WrappedArray.__array__   s    zz$++&&r   c                     US:X  a[  U Vs/ s H+  n[        XPR                  5      (       a  UR                  OUPM-     nnU R                  " U" U0 UD640 U R                  D6$ [        $ s  snf )N__call__)ro   r/   r   r   NotImplemented)r-   ufuncmethodinputsrK   args         r   __array_ufunc__WrappedArray.__array_ufunc__   sn    Z!')!'# %/sNN$C$CcjjL!'  )>>%":6":IdjjII!!	)s   2A()NN)r?   r@   rA   rB   rN   	__slots____array_priority__rg   r   rp   r   rC   rM   r   r   r   r      s)    
 $IM'"r   r   c                   b    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)TestSubclassing   c                 V    [         R                  " SSS9n[        U/ SQS9nX4U l        g )N   float)r   )r   r3   r   r   r   rT   )r   r   	msubarrayrS   r-   r%   mxs      r   setup_methodTestSubclassing.setup_method   s'    IIaw'q/G	r   c                    [         R                  " S5      n/ SQn[        U5      n[        X2S9n[	        [        U[        5      5        [        UR                  U5        [	        [        UR                  [        5      5        g )Nr   r   r   r3   r   r   r   )	r   r   r   r   r   ro   r
   r   rV   )r-   r%   mxsubxmsubs        r   test_data_subclassing%TestSubclassing.test_data_subclassing   sW    IIaL{T*
5+./U[[$'
5;;12r   c                 f    U R                   u  p[        [        UR                  [        5      5        g r   )rS   r   ro   rV   subarrayr   s      r   test_maskedarray_subclassing,TestSubclassing.test_maskedarray_subclassing   s     ))
288X./r   c                    U R                   u  p[        R                  " SS9   [        [	        [        U5      [        5      5        [        [        U5      [        R
                  " U5      5        S S S 5        g ! , (       d  f       g = fNignore)r   )rS   r   errstater   ro   r   r   r   r   s      r   test_masked_unary_operations,TestSubclassing.test_masked_unary_operations   sN    ))[[)Js2w	23Q+ *))s   AA88
Bc                    U R                   u  p[        [        [        X"5      [        5      5        [        [        [        X!5      [        5      5        [        [        X!5      X!-   5        [        [        [        X"5      R                  [        5      5        [        [        [        R                  " X"5      [        5      5        [        [        [        X"5      [        5      5        [        [        [        X!5      [        5      5        g r   )
rS   r   ro   r   r   r   rV   r   outerr   r   s      r   test_masked_binary_operations-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                 <   U R                   u  p[        UR                   R                  5       UR                  S9n[	        [        [        X"5      [        5      5        [	        [        [        X!5      [        5      5        [        [        X"5      [        X35      5        g )Nr   )	rS   r   rp   rT   r   ro   r   r   r   )r-   r%   r   xmxs       r   test_masked_binary_operations2.TestSubclassing.test_masked_binary_operations2   sc    ))277,,.RWW=
6">956
6"=)45VB^VC%56r   c                    [        [        S5      S/S/S-  -   S9n[        [        U5      5      n[	        U5      nUS-   n[        [        U[        5      5        [        [        U[        5      (       + 5        [        [        UR                  [        5      5        [        UR                  R                  0 5        US-   n[        [        U[        5      5        [        [        U[        5      5        [        [        UR                  [        5      5        [        UR                  R                  S   S:  5        US-  n[        [        U[        5      5        [        [        U[        5      5        [        [        UR                  [        5      5        [        UR                  R                  S   S:  5        UR                  / SQ5        [        UR                  / SQ5        UR                  R                  / S	Q5        [        UR                  / S	Q5        [        US
S0S9n[        U5      n[        [!        US5      5        [        UR                  UR                  5        g )Nr   r   r3      r   r2   r;   )r3   r   r   r   r3   )r   r   r   r   r3   namer%   r>   r"   )r   r   r   r   r   r   ro   r
   rP   rV   r   r   r"   	_set_mask_maskr\   hasattr)r-   r%   myymzr   mxsubs          r   test_attributepropagation)TestSubclassing.test_attributepropagation   s   &)1#qc!e),(1+&q\T
1k*+Jq),,-
177H-.QWW\\2&T
1k*+
1i()
177H-.W%)*
a
2{+,
2y)*
288X./h'!+,
_%RXX/


_-RXX/-T"v&'UZZ+r   c                 P   [         R                  " S5      n/ SQn[        [        X5      5      n[	        XSU0S9n[        USS9n[        [        U[        5      (       + 5        [        [        U[        5      5        [        UR                  U5        [        U5      n[        [        U[        5      (       + 5        [        [        U[        5      5        [        UR                  U5        [        USS9n[        [        U[        5      5        [        UR                  UR                  5        [        UR                  UR                  5        [        U5      n[        [        U[        5      5        [        UR                  UR                  5        [        UR                  U5        g )Nr   r   r   )rT   r"   F)subokT)r   r   listziprP   r   r   ro   r
   r   r   r   r"   r   )r-   r%   r   xinfor   r   s         r   test_subclasspreservation)TestSubclassing.test_subclasspreservation  s   IIaLSY&8T/Jui001
5+./U[[!$Jui001
5+./U[[!$T.
5),-UZZ+U[[$**-4 
5),-UZZ+U[[!$r   c                 4   [         R                  " S5      n[        U5      n[        U/ SQS9n[	        [        US   [        5      5        [	        [        US   [        5      5        [	        [        USS [        5      5        [	        [        US   [        5      5        [	        [        US   R                  [        5      5        [	        US   [        L 5        [	        [        US   R                  [        5      5        [	        [        USS R                  [        5      5        [	        [        UR                  S   R                  [        5      5        [	        UR                  S   [        L 5        [	        [        UR                  SS R                  [        5      5        [        [        UR                  SUS   5        [        [        UR                  SUS   5        [        [        UR                  [        SS5      USS 5        US   US'   USS USS& [        [        UR                  R                  SUS   5        [        [        UR                  R                  [        SS5      USS 5        US   UR                  S'   USS UR                  SS& g	)
z,test that getter and setter go via baseclassr   TFTFFr   r3   r3   .r   r   r   .N)r   r   r   r   r   ro   rS   r	   re   baser   r   ry   slice)r-   r%   xcsubmxcsubs       r   test_subclass_items#TestSubclassing.test_subclass_items"  s
   IIaL#A&e*KL 	
58%89:
5<)<=>
51:':;< 	
6!9&9:;
6%=--/BCDq	V#$
6%=--/BCD
6!A;++-@AB 	
6;;q>..0CDEA&()
6;;q+002EFG 	j%"3"3Q!=j&"4"4a1>j&"4"4eAqk1Qq6J!Hq	Aajqj&++"9"91adCj&++"9"95A;!AOqA 1:Aar   c                 d   [         R                  " S5      n[        U5      n[        U5      n[	        [        US   R                  [        5      5        [	        [        US   R                  [        5      5        [	        [        US   [        5      5        [	        [        US   [        5      5        g )Nr   r   r   r3   r   )r   r   r   r   r   ro   rS   )r-   r%   r   mxcsub_nomasks       r   test_subclass_nomask_items*TestSubclassing.test_subclass_nomask_itemsG  s    IIaL#A&$U+
=/446IJK
=/446IJK
=+-@AB
=+-@ABr   c                     [         R                  " S5      n[        U/ SQS9n[        [	        U5      S5        [        U5      n[        U/ SQS9n[        [	        U5      S[
        R                   S35        g)zGtest that repr uses the name of the subclass
and 'array' for np.ndarrayr   r   r   r   masked_z(data=[--, 1, --, 3, 4]N)r   r   r   r   reprr   r?   )r-   r%   r   r   r   s        r   test_subclass_repr"TestSubclassing.test_subclass_reprR  se     IIaL!"CD$r(N3{T(IJ$u+h''((?@	Br   c                 \   [         R                  " S5      n[        U5      n[        U/ SQS9n[	        [        U5      S5        [        U5      n[        [        UR                  S[         R                  R                  R                  5        [        U/ SQS9n[	        [        U5      S5        g)z7test str with subclass that has overridden str, setitemr   r   r   z[-- 1 -- 3 4]r   z myprefix [-- 1 -- 3 4] mypostfixN)r   r   r   r   r   strr   r   r   ry   macoremasked_print_option)r-   r%   r   r   r   r   s         r   test_subclass_str!TestSubclassing.test_subclass_str]  s     IIaL{T(IJSZ1#A&j%"3"3Qeejj44	6e*KLS["DEr   c                 2   [        S/ SQS9n[        / SQS9n[        R                  " X5      n[        SUR                  ;   5        [        UR                  S   S:H  5        X-
  n[        SUR                  ;   5        [        UR                  S   S:H  5        g )Ntest)r3         r   r      rS   )r   r3   r  r  r   r   r"   )rG   r   subtractr   rJ   )r-   arr1arr2diff1diff2s        r   $test_pure_subclass_info_preservation4TestSubclassing.test_pure_subclass_info_preservationk  s}     f=9=1D'%..()v&&01%..()v&&01r   r  N)r?   r@   rA   rB   r   r   r   r   r   r   r   r   r   r   r  r  r  rC   rM   r   r   r   r      sH    
30
,57,B%6#&J	C	BF
2r   r   c                   $    \ rS rSrSrS rS rSrg)ArrayNoInheritanceix  z6Quantity-like class that does not inherit from ndarrayc                     Xl         X l        g r   	magnitudeunits)r-   rS   r  s      r   rg   ArrayNoInheritance.__init__z  s    
r   c                 .    [        U R                  U5      $ r   )r,   r  )r-   attrs     r   __getattr__ArrayNoInheritance.__getattr__~  s    t~~t,,r   r  N)r?   r@   rA   rB   rN   rg   r#  rC   rM   r   r   r  r  x  s    @-r   r  c                     [         R                  R                  / SQ/ SQS9n [        U S5      n[         R                  R                  U5      n[	        U R
                  UR
                  5        [	        U R                  UR                  5        / SQU l        [	        U R                  UR                  5        [        UR                  5        [         R                  R                  USS9n[	        U R
                  UR
                  5        [	        U R                  UR                  5        / SQU l        [	        / SQUR                  5        [        UR                  (       + 5        [         R                  R                  USS	9n[	        U R
                  UR
                  5        [	        U R                  / SQ5        [        UR                  (       + 5        [        UR                  (       + 5        g )
N)r3   r  r  )TFTr   meters)TFFT)r!   F)	keep_mask)	r   r  r   r  r   rS   rT   r   
sharedmask)data_maskeddata_masked_units	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                   ,    \ rS rSrS rS rS rS rSrg)TestClassWrappingi  c                 n    [         R                  R                  / SQ/ SQS9n[        U5      nX4U l        g )Nr3   r  r   FTFr   )r   r  r   r   rS   r-   r   wms      r   r   TestClassWrapping.setup_method  s.    EEy/CD!_G	r   c                     U R                   u  p[        R                  " SS9   [        [	        [        R
                  " U5      [        5      5        S S S 5        g ! , (       d  f       g = fr   )rS   r   r   r   ro   r   r   r2  s      r   r   .TestClassWrapping.test_masked_unary_operations  s<    ))[[)Jrvvbz<89 *))s   .A
A(c                    U R                   u  p[        [        [        R                  " X"5      [
        5      5        [        [        [        R                  " X5      [
        5      5        [        [        [        R                  " X!5      [
        5      5        [        [        R                  " X5      X-   5        [        [        [        R                  " X5      [
        5      5        [        [        [        R                  " X!5      [
        5      5        [        [        [        R                  " X!5      [
        5      5        [        [        [        R                  " X5      [
        5      5        [        [        R                  " X!5      U-  [        R                  " X5      U-  5        [        R                  " X/5      n[        [        [        R                  " X#5      [
        5      5        [        [        [        R                  " X25      [
        5      5        [        [        R                  " X25      [        R                  " X#5      5        g r   )
rS   r   ro   r   r   r   r   r   r   stack)r-   r   r3  m2s       r   r   /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                     [        5       n[        [        UR                  SS5        [        R
                  R                  / SQ/ SQS9n[        U5      n[        [        UR                  SS5        g )Nnot_a_real_attrr3   r0  r1  r   not_an_attrr  )r   r   AttributeError__setattr__r   r  r   r   )r-   mixinr   r3  s       r   test_mixins_have_slots(TestClassWrapping.test_mixins_have_slots  sT    %'ne&7&79JANEEy/CD!_nbnnmQGr   r  N)	r?   r@   rA   rB   r   r   r   rA  rC   rM   r   r   r.  r.    s    
:;*Hr   r.  )%rN   numpyr   numpy.lib.mixinsr   numpy.testingr   r   numpy.ma.testutilsr   numpy.ma.corer   r   r	   r
   r   r   r   r   r   r   r   r   r   rd   r   r   rG   rP   r   r`   r   r   r   r  r,  r.  rM   r   r   <module>rH     s     2 0 +    rzz 0 [ +  	K K8(( (V"( "8B2 B2J- -&@*H *Hr   