
    H/PhB                        d Z ddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZ d Z G d d	ej                  ZeZ G d
 de          Z G d dee          ZeZ G d d          Z G d de          Z G d de          Z  G d d          Z! G d d          Z"d Z# G d d          Z$dS )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                 P    t          | d t          |                   |           d S N)r   len)abs     _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/ma/tests/test_subclassing.pyassert_startswithr      s&    7CFF7Q    c                   <     e Zd Zi fdZ fdZ fdZ fdZ xZS )SubArrayc                     t          j        |                              |           }|                                |_        |S r   )npr   viewcopyinfo)clsarrr!   xs       r   __new__zSubArray.__new__   s3    M###C((r   c                     t                                          |           t          |di                                           | _        d S Nr!   )super__array_finalize__getattrr    r!   )selfobj	__class__s     r   r)   zSubArray.__array_finalize__   s?    ""3'''C,,1133	r   c                     t                                          |          }|j                            dd          dz   |j        d<   |S )Naddedr      )r(   __add__r!   getr+   otherresultr-   s      r   r1   zSubArray.__add__$   s>    ''%{w::Q>Gr   c                     t                                          |          }|j                            dd          dz   |j        d<   |S )Niaddedr   r0   )r(   __iadd__r!   r2   r3   s      r   r8   zSubArray.__iadd__)   s@    !!%(( &! < <q @Hr   )__name__
__module____qualname__r%   r)   r1   r8   __classcell__r-   s   @r   r   r      s              
    
    
        r   r   c                   $     e Zd ZdZd fd	Z xZS )SubMaskedArrayz<Pure subclass of MaskedArray, keeping some info on subclass.Nc                 P     t                      j        | fi |}||j        d<   |S r'   )r(   r%   _optinfo)r"   r!   kwargsr,   r-   s       r   r%   zSubMaskedArray.__new__4   s1    eggoc,,V,,#V
r   r   )r9   r:   r;   __doc__r%   r<   r=   s   @r   r?   r?   2   sC        FF         r   r?   c                   0    e Zd Zi efdZed             ZdS )	MSubArrayc                 l    t          ||          }t          j        | ||          }|j        |_        |S )N)datamask)r   r
   r%   r!   )r"   rG   r!   rH   subarr_datas         r   r%   zMSubArray.__new__<   s6    $%%#Cf4@@@[
r   c                 H    |                      t                    }d|_        |S NF)r   r
   _sharedmask)r+   _views     r   _serieszMSubArray._seriesB   s     		+&&!r   N)r9   r:   r;   r   r%   propertyrO    r   r   rE   rE   :   sH         "       X  r   rE   c                   0    e Zd ZdZd Zd Zd Zd Zd Z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
    c                 f    || _         |                    t          j                  j        | _        d S r   )	_originalr   r   ndarrayflat	_dataiter)r+   r   s     r   __init__zCSAIterator.__init__W   s%    
++0r   c                     | S r   rQ   r+   s    r   __iter__zCSAIterator.__iter__[   s    r   c                     | j                             |          }t          |t          j                  s|                                }|                    t          | j                            }|S r   )	rX   __getitem__
isinstancer   rV   	__array__r   typerU   )r+   indxouts      r   r^   zCSAIterator.__getitem__^   sX    n((..#rz** 	"--//ChhtDN++,,
r   c                 J    | j                             |          | j        |<   d S r   )rU   _validate_inputrX   )r+   indexvalues      r   __setitem__zCSAIterator.__setitem__e   s$     $ > >u E Eur   c                     t          | j                                                                      t	          | j                            S r   )nextrX   r`   r   ra   rU   r[   s    r   __next__zCSAIterator.__next__h   s6    DN##--//44T$.5I5IJJJr   N)	r9   r:   r;   rC   rY   r\   r^   rh   rk   rQ   r   r   rS   rS   P   sq         1 1 1    F F FK K K K Kr   rS   c                   |     e Zd Zd Zd Zd Z fdZ fdZed             Z	e	j
        d             Z	d fd
	Z xZS )ComplicatedSubArrayc                 >    d|                      t                     dS )Nz	myprefix z
 mypostfix)r   r   r[   s    r   __str__zComplicatedSubArray.__str__n   s    :499X..::::r   c                 (    d| j         j         d|  dS )N< >)r-   r9   r[   s    r   __repr__zComplicatedSubArray.__repr__q   s     44>*44T4444r   c                 N    t          |t                    st          d          |S )Nz!Can only set to MySubArray values)r_   rm   
ValueError)r+   rg   s     r   re   z#ComplicatedSubArray._validate_inputu   s*    %!455 	B@AAAr   c                 r    t                                          ||                     |                     d S r   )r(   rh   re   r+   itemrg   r-   s      r   rh   zComplicatedSubArray.__setitem__z   s3     	D$"6"6u"="=>>>>>r   c                     t                                          |          }t          |t          j                  s,|                                                    t                    }|S r   )r(   r^   r_   r   rV   r`   r   rm   rx   s      r   r^   zComplicatedSubArray.__getitem__   sR    ##D))%,, 	@OO%%**+>??Er   c                      t          |           S r   )rS   r[   s    r   rW   zComplicatedSubArray.flat   s    4   r   c                 <    |                                  }||d d <   d S r   )ravel)r+   rg   ys      r   rW   zComplicatedSubArray.flat   s     JJLL!!!r   NFc                     t                                          |||          }|:|d         t          j        u r&|j                            dd          dz   |j        d<   |S )Nr   
multipliedr0   )r(   __array_wrap__r   multiplyr!   r2   )r+   r,   contextreturn_scalarr-   s       r   r   z"ComplicatedSubArray.__array_wrap__   sZ    gg$$S'=AA71:#<#<%(X\\,%B%BQ%FCH\"
r   rL   )r9   r:   r;   ro   rt   re   rh   r^   rP   rW   setterr   r<   r=   s   @r   rm   rm   l   s        ; ; ;5 5 5  
? ? ? ? ?
     ! ! X! 
[  [         r   rm   c                   4    e Zd ZdZdZdZd Zd Zd	dZd Z	dS )
WrappedArrayz
    Wrapping a MaskedArray rather than subclassing to test that
    ufunc deferrals are commutative.
    See: https://github.com/numpy/numpy/issues/15200)
    _arrayattrs   c                 "    || _         || _        d S r   r   )r+   r   r   s      r   rY   zWrappedArray.__init__   s    


r   c                 @    | j         j         d| j         d| j         dS )Nz(

z
))r-   r9   r   r   r[   s    r   rt   zWrappedArray.__repr__   s*    .)LLdkLLTZLLLLr   Nc                 4    t          j        | j                  S r   )r   r   r   )r+   dtyper    s      r   r`   zWrappedArray.__array__   s    z$+&&&r   c                 l     |dk    r' fd|D             }  j          ||i |fi  j        S t          S )N__call__c                 L    g | ] }t          |j                  r|j        n|!S rQ   )r_   r-   r   ).0argr+   s     r   
<listcomp>z0WrappedArray.__array_ufunc__.<locals>.<listcomp>   s@     ) ) ) %/sDN$C$CLcjj ) ) )r   )r-   r   NotImplemented)r+   ufuncmethodinputsrB   s   `    r   __array_ufunc__zWrappedArray.__array_ufunc__   sg    Z) ) ) )!') ) )F!4>%%":6":":IIdjIII!!r   )NN)
r9   r:   r;   rC   	__slots____array_priority__rY   rt   r`   r   rQ   r   r   r   r      so         
 $I  M M M' ' ' '" " " " "r   r   c                   \    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )TestSubclassingc                 j    t          j        dd          }t          |g d          }||f| _        d S )N   float)r   )r   r0   r   r   r   rH   )r   r   	msubarrayrG   r+   r$   mxs      r   setup_methodzTestSubclassing.setup_method   s;    Iaw'''q///G			r   c                 2   t          j        d          }g d}t          |          }t          ||          }t	          t          |t                               t          |j        |           t	          t          |j        t                               d S )Nr   r   r   r0   r   r   r   )	r   r   r   r   r   r_   r
   r   rJ   )r+   r$   mxsubxmsubs        r   test_data_subclassingz%TestSubclassing.test_data_subclassing   s    IaLLOO{{T***
5+..///U[$'''
5;1122222r   c                 h    | j         \  }}t          t          |j        t                               d S r   )rG   r   r_   rJ   subarrayr   s      r   test_maskedarray_subclassingz,TestSubclassing.test_maskedarray_subclassing   s-    )B
28X../////r   c                 2   | j         \  }}t          j        d          5  t          t	          t          |          t                               t          t          |          t          j        |                     d d d            d S # 1 swxY w Y   d S Nignore)r   )rG   r   errstater   r_   r   r   r   r   s      r   test_masked_unary_operationsz,TestSubclassing.test_masked_unary_operations   s    )B[))) 	, 	,Js2ww	22333Q+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   ABBBc                    | j         \  }}t          t          t          ||          t                               t          t          t          ||          t                               t          t          ||          ||z              t          t          t          ||          j        t                               t          t          t          j        ||          t                               t          t          t          ||          t                               t          t          t          ||          t                               d S r   )
rG   r   r_   r   r   r   rJ   r   outerr   r   s      r   test_masked_binary_operationsz-TestSubclassing.test_masked_binary_operations   s    )B
3r2;;	22333
3r1::y11222SQZZA&&&
3r2;;,h77888
39R,,i88999
5R==)44555
5Q<<3344444r   c                    | j         \  }}t          |j                                         |j                  }t	          t          t          ||          t                               t	          t          t          ||          t                               t          t          ||          t          ||                     d S )Nr   )	rG   r   r`   rH   r   r_   r   r   r   )r+   r$   r   xmxs       r   test_masked_binary_operations2z.TestSubclassing.test_masked_binary_operations2   s    )B27,,..RW===
6"b>>955666
6"a==)44555VB^^VC%5%566666r   c                 ~   t          t          d          dgdgdz  z             }t          t          |                    }t	          |          }|dz   }t          t          |t                               t          t          |t                                t          t          |j	        t                               t          |j	        j        i            |dz   }t          t          |t                               t          t          |t                               t          t          |j	        t                               t          |j	        j        d         dk               |dz  }t          t          |t                               t          t          |t                               t          t          |j	        t                               t          |j	        j        d         dk               |                    g d           t          |j        g d           |j                            g d	           t          |j        g d	           t          |d
di          }t          |          }t          t!          |d                     t          |j        |j                   d S )Nr   r   r0      r   r/   r7   )r0   r   r   r   r0   )r   r   r   r   r0   namer$   )r!   r!   )r   r   r   r   r   r   r_   r
   rE   rJ   r   r   r!   	_set_mask_maskrO   hasattr)r+   r$   myymzr   mxsubs          r   test_attributepropagationz)TestSubclassing.test_attributepropagation   s=   &))1#qc!e),,,(1++&&q\\T
1k**+++Jq),,,---
17H--...QW\2&&&T
1k**+++
1i(()))
17H--...W%)***
a
2{++,,,
2y))***
28X..///h'!+,,,
___%%%RX///

___---RX///---T""v&&'''UZ+++++r   c                    t          j        d          }g d}d t          ||          D             }t          ||d|i          }t	          |d          }t          t          |t                                t          t          |t                               t          |j	        |           t          |          }t          t          |t                                t          t          |t                               t          |j	        |           t	          |d          }t          t          |t                               t          |j        |j                   t          |j	        |j	                   t          |          }t          t          |t                               t          |j        |j                   t          |j	        |           d S )	Nr   r   c                     g | ]	\  }}||f
S rQ   rQ   )r   ijs      r   r   z=TestSubclassing.test_subclasspreservation.<locals>.<listcomp>  s     000FQ!Q000r   r   )rH   r!   F)subokT)r   r   ziprE   r   r   r_   r
   r   r   r   r!   r   )r+   r$   r   xinfor   r   s         r   test_subclasspreservationz)TestSubclassing.test_subclasspreservation  s   IaLLOO00c!Qii000&888T///Jui000111
5+..///U[!$$$Jui000111
5+..///U[!$$$T...
5),,---UZ+++U[$*---4  
5),,---UZ+++U[!$$$$$r   c                 2   t          j        d          }t          |          }t          |g d          }t	          t          |d         t                               t	          t          |d         t                               t	          t          |dd         t                               t	          t          |d         t                               t	          t          |d         j        t                               t	          |d         t          u            t	          t          |d         j        t                               t	          t          |dd         j        t                               t	          t          |j        d         j        t                               t	          |j        d         t          u            t	          t          |j        dd         j	        t                               t          t          |j        d|d                    t          t          |j        d|d                    t          t          |j        t          dd          |dd                    |d         |d<   |dd         |dd<   t          t          |j        j        d|d                    t          t          |j        j        t          dd          |dd                    |d         |j        d<   |dd         |j        dd<   d	S )
z,test that getter and setter go via baseclassr   TFTFFr   r0   r0   .r   r   r   .N)r   r   rm   r   r   r_   rG   r	   rW   baser   rv   rh   slice)r+   r$   xcsubmxcsubs       r   test_subclass_itemsz#TestSubclassing.test_subclass_items"  s   IaLL#A&&e*K*K*KLLL 	
58%899:::
5<)<==>>>
51:':;;<<< 	
6!9&9::;;;
6%=-/BCCDDDq	V#$$$
6%=-/BCCDDD
6!A#;+-@AABBB 	
6;q>.0CDDEEEA&()))
6;qs+02EFFGGG 	j%"3Q!===j&"4a1>>>j&"4eAqkk1QqS6JJJ!Hq	AaCjqsj&+"91adCCCj&+"95A;;!A#OOOqA 1:AaCr   c                    t          j        d          }t          |          }t          |          }t	          t          |d         j        t                               t	          t          |d         j        t                               t	          t          |d         t                               t	          t          |d         t                               d S )Nr   r   r   r0   r   )r   r   rm   r   r   r_   rG   )r+   r$   r   mxcsub_nomasks       r   test_subclass_nomask_itemsz*TestSubclassing.test_subclass_nomask_itemsG  s    IaLL#A&&$U++
=/46IJJKKK
=/46IJJKKK
=+-@AABBB
=+-@AABBBBBr   c                 (   t          j        d          }t          |g d          }t          t	          |          d           t          |          }t          |g d          }t          t	          |          dt
          j         d           dS )zOtest 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   r9   )r+   r$   r   r   r   s        r   test_subclass_reprz"TestSubclassing.test_subclass_reprR  s     IaLL!"C"C"CDDD$r((N333{{T(I(I(IJJJ$u++@h'@@@	B 	B 	B 	B 	Br   c                    t          j        d          }t          |          }t          |g d          }t	          t          |          d           t          |          }t          t          |j	        dt           j
        j        j                   t          |g d          }t	          t          |          d           dS )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   strrm   r   rv   rh   macoremasked_print_option)r+   r$   r   r   r   r   s         r   test_subclass_strz!TestSubclassing.test_subclass_str]  s     IaLL{{T(I(I(IJJJSZZ111#A&&j%"3Qej4	6 	6 	6e*K*K*KLLLS[["DEEEEEr   c                 T   t          dg d          }t          g d          }t          j        ||          }t          d|j        v            t          |j        d         dk               ||z
  }t          d|j        v            t          |j        d         dk               d S )Ntest)r0         r   r      )rG   )r   r0   r   r   r   r   r!   )r?   r   subtractr   rA   )r+   arr1arr2diff1diff2s        r   $test_pure_subclass_info_preservationz4TestSubclassing.test_pure_subclass_info_preservationk  s     f===999===111D$''%.()))v&&0111t%.()))v&&011111r   N)r9   r:   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   r   r   r   r      s          
3 3 30 0 0
, , ,5 5 57 7 7, , ,B% % %6#& #& #&J	C 	C 	C	B 	B 	BF F F
2 
2 
2 
2 
2r   r   c                       e Zd ZdZd Zd ZdS )ArrayNoInheritancez6Quantity-like class that does not inherit from ndarrayc                 "    || _         || _        d S r   )	magnitudeunits)r+   rG   r   s      r   rY   zArrayNoInheritance.__init__z  s    


r   c                 ,    t          | j        |          S r   )r*   r   )r+   attrs     r   __getattr__zArrayNoInheritance.__getattr__~  s    t~t,,,r   N)r9   r:   r;   rC   rY   r   rQ   r   r   r   r   x  s8        @@  - - - - -r   r   c                     t           j                            g dg d          } t          | d          }t           j                            |          }t	          | j        |j                   t	          | j        |j                   g d| _        t	          | j        |j                   t          |j                   t           j                            |d          }t	          | j        |j                   t	          | j        |j                   g d| _        t	          g d|j                   t          |j                    t           j                            |d	          }t	          | j        |j                   t	          | j        g d           t          |j                    t          |j                    d S )
N)r0   r   r   )TFTr   meters)TFFT)r    F)	keep_mask)	r   r   r   r   r   rG   rH   r   
sharedmask)data_maskeddata_masked_units	new_arrays      r   test_array_no_inheritancer     s   %++iii.A.A.A+BBK*;AA -..I!9>222!9>222+++K!9>222I !!! -D99I!9>222!9>222***K%%%y~666	$$%%% -??I!9>222!#6#6#6777		$$%%%%%r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestClassWrappingc                     t           j                            g dg d          }t          |          }||f| _        d S )Nr0   r   r   FTFr   )r   r   r   r   rG   r+   r   wms      r   r   zTestClassWrapping.setup_method  sA    Eyyy/C/C/CDD!__G			r   c                     | j         \  }}t          j        d          5  t          t	          t          j        |          t                               d d d            d S # 1 swxY w Y   d S r   )rG   r   r   r   r_   r   r   r  s      r   r   z.TestClassWrapping.test_masked_unary_operations  s    )B[))) 	: 	:Jrvbzz<88999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   5A""A&)A&c                 0   | j         \  }}t          t          t          j        ||          t
                               t          t          t          j        ||          t
                               t          t          t          j        ||          t
                               t          t          j        ||          ||z              t          t          t          j        ||          t
                               t          t          t          j        ||          t
                               t          t          t          j        ||          t
                               t          t          t          j        ||          t
                               t          t          j        ||          |z  t          j        ||          |z             t          j	        ||g          }t          t          t          j        ||          t
                               t          t          t          j        ||          t
                               t          t          j        ||          t          j        ||                     d S r   )
rG   r   r_   r   r   r   r   r   r   stack)r+   r   r  m2s       r   r   z/TestClassWrapping.test_masked_binary_operations  s   )B
26"b>><88999
26!R==,77888
26"a==,77888RVAr]]AF+++
28Ar??L99:::
28B??L99:::
29R++\::;;;
29Q++\::;;;RYr1%%)29Q??R+?@@@Xq!f
29R,,l;;<<<
29R,,l;;<<<RYr2&&	"b(9(9:::::r   c                     t                      }t          t          |j        dd           t          j                            g dg d          }t          |          }t          t          |j        dd           d S )Nnot_a_real_attrr0   r  r  r   not_an_attrr   )r   r   AttributeError__setattr__r   r   r   r   )r+   mixinr   r  s       r   test_mixins_have_slotsz(TestClassWrapping.test_mixins_have_slots  sq    %''ne&79JANNNEyyy/C/C/CDD!__nbnmQGGGGGr   N)r9   r:   r;   r   r   r   r  rQ   r   r   r  r    sU          
: : :; ; ;*H H H H Hr   r  )%rC   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   rV   r   r   r?   rE   r   rS   rm   r   r   r   r   r  rQ   r   r   <module>r     s        2 2 2 2 2 2 0 0 0 0 0 0 0 0 + + + + + +                                    rz   0     [       +    	K K K K K K K K8( ( ( ( (( ( ( (V" " " " "( " " "8B2 B2 B2 B2 B2 B2 B2 B2J- - - - - - - -& & &@*H *H *H *H *H *H *H *H *H *Hr   