
    CwgqB                     X   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j0                        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$y)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    t        | d t        |       |       y N)r   len)abs     V/var/www/horilla/myenv/lib/python3.12/site-packages/numpy/ma/tests/test_subclassing.pyassert_startswithr      s    7CFQ    c                   <     e Zd Zi fdZ fdZ fdZ fdZ xZS )SubArrayc                 x    t        j                  |      j                  |       }|j                         |_        |S r   )npr   viewcopyinfo)clsarrr!   xs       r   __new__zSubArray.__new__   s-    MM###C(r   c                 d    t         |   |       t        |di       j                         | _        y Nr!   )super__array_finalize__getattrr    r!   )selfobj	__class__s     r   r)   zSubArray.__array_finalize__   s,    "3'C,113	r   c                 ~    t         |   |      }|j                  j                  dd      dz   |j                  d<   |S )Naddedr      )r(   __add__r!   getr+   otherresultr-   s      r   r1   zSubArray.__add__$   s8    '%{{w:Q>Gr   c                 ~    t         |   |      }|j                  j                  dd      dz   |j                  d<   |S )Niaddedr   r0   )r(   __iadd__r!   r2   r3   s      r   r8   zSubArray.__iadd__)   s9    !%( &! <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.c                 F    t        |   | fi |}||j                  d<   |S r'   )r(   r%   _optinfo)r"   r!   kwargsr,   r-   s       r   r%   zSubMaskedArray.__new__4   s)    goc,V,#V
r   r   )r9   r:   r;   __doc__r%   r<   r=   s   @r   r?   r?   2   s    F r   r?   c                   (    e Zd Zi efdZed        Zy)	MSubArrayc                 p    t        ||      }t        j                  | ||      }|j                  |_        |S )N)datamask)r   r
   r%   r!   )r"   rG   r!   rH   subarr_datas         r   r%   zMSubArray.__new__<   s2    $%##Cf4@[[
r   c                 >    | j                  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   :   s      "   r   rE   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)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                 n    || _         |j                  t        j                        j                  | _        y r   )	_originalr   r   ndarrayflat	_dataiter)r+   r   s     r   __init__zCSAIterator.__init__W   s#    

+00r   c                     | S r   rQ   r+   s    r   __iter__zCSAIterator.__iter__[   s    r   c                     | j                   j                  |      }t        |t        j                        s|j                         }|j                  t        | j                              }|S r   )	rX   __getitem__
isinstancer   rV   	__array__r   typerU   )r+   indxouts      r   r^   zCSAIterator.__getitem__^   sK    nn((.#rzz*--/ChhtDNN+,
r   c                 T    | j                   j                  |      | j                  |<   y r   )rU   _validate_inputrX   )r+   indexvalues      r   __setitem__zCSAIterator.__setitem__e   s     $ > >u Eur   c                     t        | j                        j                         j                  t	        | j
                              S r   )nextrX   r`   r   ra   rU   r[   s    r   __next__zCSAIterator.__next__h   s.    DNN#--/44T$..5IJJr   N)	r9   r:   r;   rC   rY   r\   r^   rh   rk   rQ   r   r   rS   rS   P   s"    1FKr   rS   c                   z     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                 4    d| j                  t               dS )Nz	myprefix z
 mypostfix)r   r   r[   s    r   __str__zComplicatedSubArray.__str__n   s    499X./z::r   c                 <    d| j                   j                   d|  dS )N< >)r-   r9   r[   s    r   __repr__zComplicatedSubArray.__repr__q   s"    4>>**+1TF!44r   c                 <    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@AAr   c                 D    t         |   || j                  |             y r   )r(   rh   re   r+   itemrg   r-   s      r   rh   zComplicatedSubArray.__setitem__z   s     	D$"6"6u"=>r   c                     t         |   |      }t        |t        j                        s#|j                         j                  t              }|S r   )r(   r^   r_   r   rV   r`   r   rm   rx   s      r   r^   zComplicatedSubArray.__getitem__   s=    #D)%,OO%**+>?Er   c                     t        |       S r   )rS   r[   s    r   rW   zComplicatedSubArray.flat   s    4  r   c                 .    | j                         }||d d  y r   )ravel)r+   rg   ys      r   rW   zComplicatedSubArray.flat   s    JJL!r   c                     t         |   |||      }|A|d   t        j                  u r,|j                  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__   sR    g$S'=A71:#<%(XX\\,%BQ%FCHH\"
r   rL   )r9   r:   r;   ro   rt   re   rh   r^   rP   rW   setterr   r<   r=   s   @r   rm   rm   l   sR    ;5
?
 ! ! 
[[  r   rm   c                   2    e Zd ZdZdZdZd Zd Zd	dZd Z	y)
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                      || _         || _        y r   r   )r+   r   r   s      r   rY   zWrappedArray.__init__   s    
r   c                 h    | j                   j                   d| j                   d| j                   dS )Nz(

z
))r-   r9   r   r   r[   s    r   rt   zWrappedArray.__repr__   s.    ..))*#dkk]"TZZLLLr   Nc                 @    t        j                  | j                        S r   )r   r   r   )r+   dtyper    s      r   r`   zWrappedArray.__array__   s    zz$++&&r   c                     |dk(  rT|D cg c]&  }t        || j                        r|j                  n|( }} | j                   ||i |fi | j                  S t        S c c}w )N__call__)r_   r-   r   r   NotImplemented)r+   ufuncmethodinputsrB   args         r   __array_ufunc__zWrappedArray.__array_ufunc__   sl    Z!') %/sDNN$CcjjL )F )!4>>%":6":IdjjII!!	)s   +A )NN)
r9   r:   r;   rC   	__slots____array_priority__rY   rt   r`   r   rQ   r   r   r   r      s)    
 $IM'"r   r   c                   Z    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y)TestSubclassingc                 b    t        j                  dd      }t        |g d      }||f| _        y )N   float)r   )r   r0   r   r   r   rH   )r   r   	msubarrayrG   r+   r$   mxs      r   setup_methodzTestSubclassing.setup_method   s)    IIaw'q/G	r   c                 
   t        j                  d      }g d}t        |      }t        ||      }t	        t        |t                     t        |j                  |       t	        t        |j                  t                     y )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   sY    IIaL{T*
5+./U[[$'
5;;12r   c                 h    | j                   \  }}t        t        |j                  t                     y r   )rG   r   r_   rJ   subarrayr   s      r   test_maskedarray_subclassingz,TestSubclassing.test_maskedarray_subclassing   s"    ))B
288X./r   c                    | j                   \  }}t        j                  d      5  t        t	        t        |      t                     t        t        |      t        j
                  |             d d d        y # 1 sw Y   y xY wNignore)r   )rG   r   errstater   r_   r   r   r   r   s      r   test_masked_unary_operationsz,TestSubclassing.test_masked_unary_operations   sY    ))B[[) 	,Js2w	23Q+	, 	, 	,s   AA::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                     y 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3
3r1:y12SQZA&
3r2;,,h78
399R,i89
5R=)45
5Q<34r   c                 L   | j                   \  }}t        |j                   j                         |j                        }t	        t        t        ||      t                     t	        t        t        ||      t                     t        t        ||      t        ||             y )Nr   )	rG   r   r`   rH   r   r_   r   r   r   )r+   r$   r   xmxs       r   test_masked_binary_operations2z.TestSubclassing.test_masked_binary_operations2   sm    ))B277,,.RWW=
6"b>956
6"a=)45VB^VC%5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kD         |dz  }t        t        |t                     t        t        |t                     t        t        |j                  t                     t        |j                  j                  d   dkD         |j                  g d       t        |j                  g d       |j                  j                  g d	       t        |j                  g d	       t        |d
di      }t        |      }t        t!        |d             t        |j                  |j                         y )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),,-
177H-.QWW\\2&T
1k*+
1i()
177H-.W%)*
a
2{+,
2y)*
288X./h'!+,
_%RXX/


_-RXX/-T"v&'UZZ+r   c                 T   t        j                  d      }g d}t        t        ||            }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                  |       y )Nr   r   r   )rH   r!   F)subokT)r   r   listziprE   r   r   r_   r
   r   r   r   r!   r   )r+   r$   r   xinfor   r   s         r   test_subclasspreservationz)TestSubclassing.test_subclasspreservation  s    IIaLSAY&8T/Jui001
5+./U[[!$Jui001
5+./U[[!$T.
5),-UZZ+U[[$**-4 
5),-UZZ+U[[!$r   c                 8   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 y	)
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
   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                 b   t        j                  d      }t        |      }t        |      }t	        t        |d   j                  t                     t	        t        |d   j                  t                     t	        t        |d   t                     t	        t        |d   t                     y )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    IIaL#A&$U+
=/446IJK
=/446IJK
=+-@AB
=+-@ABr   c                     t        j                  d      }t        |g d      }t        t	        |      d       t        |      }t        |g d      }t        t	        |      dt
        j                   d       y)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  se     IIaL!"CD$r(N3{T(IJ$u+h''((?@	Br   c                 f   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       y)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     IIaL{T(IJSZ1#A&j%"3"3Qeejj44	6e*KLS["DEr   c                 <   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(         y )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=1D$'%..()v&&01t%..()v&&01r   N)r9   r:   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   r   r   r   r      sH    
30
,57,B%6#&J	C	BF
2r   r   c                       e Zd ZdZd Zd Zy)ArrayNoInheritancez6Quantity-like class that does not inherit from ndarrayc                      || _         || _        y 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  s    @-r   r   c                     t         j                  j                  g dg d      } t        | d      }t         j                  j                  |      }t	        | j
                  |j
                         t	        | j                  |j                         g d| _        t	        | j                  |j                         t        |j                         t         j                  j                  |d      }t	        | j
                  |j
                         t	        | j                  |j                         g d| _        t	        g d|j                         t        |j                          t         j                  j                  |d	      }t	        | j
                  |j
                         t	        | j                  g d       t        |j                          t        |j                          y )
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     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                   $    e Zd Zd Zd Zd Zd Zy)TestClassWrappingc                 v    t         j                  j                  g dg d      }t        |      }||f| _        y )Nr0   r   r   FTFr   )r   r   r   r   rG   r+   r   wms      r   r   zTestClassWrapping.setup_method  s0    EEy/CD!_G	r   c                     | j                   \  }}t        j                  d      5  t        t	        t        j
                  |      t                     d d d        y # 1 sw Y   y xY wr   )rG   r   r   r   r_   r   r   r   s      r   r   z.TestClassWrapping.test_masked_unary_operations  sG    ))B[[) 	:Jrvvbz<89	: 	: 	:s   -AA%c                    | 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                  ||             y r   )
rG   r   r_   r   r   r   r   r   r   stack)r+   r   r  m2s       r   r   z/TestClassWrapping.test_masked_binary_operations  sg   ))B
266"b><89
266!R=,78
266"a=,78RVVAr]AF+
288Ar?L9:
288B?L9:
299R+\:;
299Q+\:;RYYr1%)299Q?R+?@XXq!f
299R,l;<
299R,l;<RYYr2&		"b(9:r   c                     t               }t        t        |j                  dd       t        j
                  j                  g dg d      }t        |      }t        t        |j                  dd       y )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  sT    %'ne&7&79JANEEy/CD!_nbnnmQGr   N)r9   r:   r;   r   r   r   r  rQ   r   r   r   r     s    
:;*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 0 +    rzz 0 [ +  	K K8(( (V"( "8B2 B2J- -&@*H *Hr   