σ
ΠEe]c           @` sI  d  Z  d d l m Z m Z m Z d d l 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 d e j f d	     YZ e Z d
 e f d     YZ d e e f d     YZ e Z d e  f d     YZ! d e f d     YZ" d e  f d     YZ# d S(   s½   Tests suite for MaskedArray & subclassing.

:author: Pierre Gerard-Marchant
:contact: pierregm_at_uga_dot_edu
:version: $Id: test_subclassing.py 3473 2007-10-29 15:18:13Z jarrod.millman $

i    (   t   divisiont   absolute_importt   print_functionN(   t   assert_t   assert_raises(   t   assert_equal(   t   arrayt   aranget   maskedt   MaskedArrayt   masked_arrayt   logt   addt   hypott   dividet   asarrayt
   asanyarrayt   nomaskc         C` s   t  |  t |   |  d  S(   N(   R   t   len(   t   at   b(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   assert_startswith   s    t   SubArrayc           B` s/   e  Z i  d   Z d   Z d   Z d   Z RS(   c         C` s+   t  j |  j |   } | j   | _ | S(   N(   t   npR   t   viewt   copyt   info(   t   clst   arrR   t   x(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __new__   s    c         C` sY   t  t t t |   d d    r: t t |   j |  n  t | d i   j   |  _ d  S(   Nt   __array_finalize__R   (   t   callablet   getattrt   superR   t   NoneR   R   R   (   t   selft   obj(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR       s
    c         C` s<   t  t |   j |  } | j j d d  d | j d <| S(   Nt   addedi    i   (   R"   R   t   __add__R   t   get(   R$   t   othert   result(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR'   '   s     c         C` s<   t  t |   j |  } | j j d d  d | j d <| S(   Nt   iaddedi    i   (   R"   R   t   __iadd__R   R(   (   R$   R)   R*   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR,   ,   s     (   t   __name__t
   __module__R   R   R'   R,   (    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR      s   		t   SubMaskedArrayc           B` s   e  Z d  Z d d  Z RS(   s<   Pure subclass of MaskedArray, keeping some info on subclass.c         K` s,   t  t |   j |  |  } | | j d <| S(   NR   (   R"   R/   R   t   _optinfo(   R   R   t   kwargsR%   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR   7   s    N(   R-   R.   t   __doc__R#   R   (    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR/   5   s   t	   MSubArrayc           B` s/   e  Z i  e d   Z d   Z e d e  Z RS(   c         C` s:   t  | |  } t j |  d | d | } | j | _ | S(   Nt   datat   mask(   R   R	   R   R   (   R   R4   R   R5   t   subarrt   _data(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR   ?   s    c         C` s   |  j  t  } t | _ | S(   N(   R   R	   t   Falset   _sharedmask(   R$   t   _view(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   _get_seriesE   s    	t   fget(   R-   R.   R   R   R;   t   propertyt   _series(    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR3   =   s   	t   CSAIteratorc           B` sA   e  Z d  Z d   Z d   Z d   Z d   Z d   Z e Z RS(   sί   
    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         C` s%   | |  _  | j t j  j |  _ d  S(   N(   t	   _originalR   R   t   ndarrayt   flatt	   _dataiter(   R$   R   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __init__Z   s    	c         C` s   |  S(   N(    (   R$   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __iter__^   s    c         C` sO   |  j  j |  } t | t j  s3 | j   } n  | j t |  j   } | S(   N(	   RC   t   __getitem__t
   isinstanceR   RA   t	   __array__R   t   typeR@   (   R$   t   indxt   out(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRF   a   s
    c         C` s   |  j  j |  |  j | <d  S(   N(   R@   t   _validate_inputRC   (   R$   t   indext   value(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __setitem__h   s    c         C` s%   t  |  j  j   j t |  j   S(   N(   t   nextRC   RH   R   RI   R@   (   R$   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __next__k   s    (	   R-   R.   R2   RD   RE   RF   RO   RQ   RP   (    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR?   S   s   					t   ComplicatedSubArrayc           B` sb   e  Z d    Z d   Z d   Z d   Z d   Z e d    Z e j	 d    Z d d  Z RS(	   c         C` s   d j  |  j t   S(   Ns   myprefix {0} mypostfix(   t   formatR   R   (   R$   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __str__s   s    c         C` s   d j  |  j j |   S(   Ns	   <{0} {1}>(   RS   t	   __class__R-   (   R$   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   __repr__v   s    c         C` s"   t  | t  s t d   n  | S(   Ns!   Can only set to MySubArray values(   RG   RR   t
   ValueError(   R$   RN   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRL   z   s    c         C` s&   t  t |   j | |  j |   d  S(   N(   R"   RR   RO   RL   (   R$   t   itemRN   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRO      s    c         C` sF   t  t |   j |  } t | t j  sB | j   j t  } n  | S(   N(   R"   RR   RF   RG   R   RA   RH   R   (   R$   RX   RN   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRF      s    c         C` s
   t  |   S(   N(   R?   (   R$   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRB      s    c         C` s   |  j    } | | (d  S(   N(   t   ravel(   R$   RN   t   y(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRB      s    c         C` sa   t  t |   j | |  } | d  k	 r] | d t j k r] | j j d d  d | j d <n  | S(   Ni    t
   multipliedi   (   R"   RR   t   __array_wrap__R#   R   t   multiplyR   R(   (   R$   R%   t   context(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR\      s    #N(   R-   R.   RT   RV   RL   RO   RF   R=   RB   t   setterR#   R\   (    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyRR   q   s   					t   TestSubclassingc           B` s}   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 RS(   c         C` sI   t  j d d d } t | d d d d d d g } | | f |  _ d  S(   Ni   t   dtypet   floatR5   i    i   (   R   R   t	   msubarrayR4   (   R$   R   t   mx(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   setup    s    !c         C` s   t  j d  } d d d d d g } t |  } t | d | } t t | t   t | j |  t t | j t   d  S(   Ni   i    i   R5   (	   R   R   R   R
   R   RG   R	   R   R7   (   R$   R   t   mt   xsubt   xmsub(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_data_subclassing₯   s    c         C` s)   |  j  \ } } t t | j t   d  S(   N(   R4   R   RG   R7   t   subarray(   R$   R   Rd   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_maskedarray_subclassing―   s    c         C` sa   |  j  \ } } t j d d  : t t t |  t   t t |  t j |   Wd  QXd  S(   NR   t   ignore(   R4   R   t   errstateR   RG   R   Rc   R   (   R$   R   Rd   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_masked_unary_operations΄   s    c         C` sΫ   |  j  \ } } t t t | |  t   t t t | |  t   t t | |  | |  t t t | |  j t   t t t j | |  t   t t t	 | |  t   t t t	 | |  t   d  S(   N(
   R4   R   RG   R   Rc   R   R7   Rj   t   outerR   (   R$   R   Rd   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_masked_binary_operations»   s    c         C` s   |  j  \ } } t | j  j   d | j } t t t | |  t   t t t | |  t   t t | |  t | |   d  S(   NR5   (	   R4   R
   RH   R5   R   RG   R   Rc   R   (   R$   R   Rd   t   xmx(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_masked_binary_operations2Θ   s
    c         C` s&  t  t d  d d g d g d } t t |   } t |  } | d } t t | t   t t | t   t t | j	 t
   t | j	 j i   | d } t t | t   t t | t   t t | j	 t
   t | j	 j d d k  | d 7} t t | t   t t | t   t t | j	 t
   t | j	 j d d k  | j d d d d d g  t | j d d d d d g  | j j d d d d d g  t | j d d d d d g  t | d i d	 d
 6} t |  } t t | d   t | j | j  d  S(   Ni   R5   i    i   i   R&   R+   R   R   t   name(   R   R   R
   Rj   Rc   R   RG   R	   R3   R7   R   R   R   t	   _set_maskt   _maskR>   t   hasattr(   R$   R   t   myt   ymt   zRg   t   mxsub(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_attributepropagationΠ   s4    &


c         C` s  t  j d  } d d d d d g } g  t | |  D] \ } } | | f ^ q4 } t | d | d i | d 6} t | d t } t t | t   t t | t   t	 | j
 |  t |  } t t | t   t t | t   t	 | j
 |  t | d t } t t | t   t	 | j | j  t	 | j
 | j
  t |  } t t | t   t	 | j | j  t	 | j
 |  d  S(   Ni   i    i   R5   R   Rg   t   subok(   R   R   t   zipR3   R
   R8   R   RG   R	   R   Ru   R   t   TrueR   R   (   R$   R   Rf   t   it   jt   xinfoRg   Rz   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_subclasspreservationρ   s(    .c         C` sB  t  j d  } t |  } t | d t t t t t g } 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	 k  t t | d
 j t   t t | d d !j t   t t | j
 d j t   t | j
 d t	 k  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(   s,   test that getter and setter go via baseclassi   R5   i   .i   i    N(   i   .(   i   .(   i    .(   R   R   RR   R
   R~   R8   R   RG   R4   R   RB   t   baseR   RW   RO   t   slice(   R$   R   t   xcsubt   mxcsub(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_subclass_items  s.    ! &)c         C` s   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(   Ni   i   .i    (   i   .(   i    .(   R   R   RR   R
   R   RG   R4   (   R$   R   R   t   mxcsub_nomask(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_subclass_nomask_items1  s    c         C` s   t  j d  } t | d t t t t t g } t t |  d  t |  } t | d t t t t t g } t t |  d j t j	   d S(   sO   test that repr uses the name of the subclass
        and 'array' for np.ndarrayi   R5   R
   s!   masked_{0}(data=[--, 1, --, 3, 4]N(
   R   R   R
   R~   R8   R   t   reprR   RS   R-   (   R$   R   Rd   Rg   Rz   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_subclass_repr<  s    !!c         C` s²   t  j d  } t |  } t | d t t t t t g } t t |  d  t |  } t	 t
 | j d t  j j j  t | d t t t t t g } t t |  d  d S(   s7   test str with subclass that has overridden str, setitemi   R5   s   [-- 1 -- 3 4]i    s    myprefix [-- 1 -- 3 4] mypostfixN(   R   R   R   R
   R~   R8   R   t   strRR   R   RW   RO   t   mat   coret   masked_print_option(   R$   R   Rg   Rz   R   R   (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   test_subclass_strG  s    !!c      	   C` sΉ   t  d d d d d d d d g } t  d d	 d d d d d g  } t j | |  } t d
 | j k  t | j d
 d k  | | } t d
 | j k  t | j d
 d k  d  S(   Nt   testR4   i   i   i   i   i   i   i    R   (   R/   R   t   subtractR   R0   (   R$   t   arr1t   arr2t   diff1t   diff2(    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt$   test_pure_subclass_info_preservationU  s    $!
(   R-   R.   Re   Ri   Rk   Rn   Rp   Rr   R{   R   R   R   R   R   R   (    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyR`      s   		
					!		%			($   R2   t
   __future__R    R   R   t   numpyR   t   numpy.testingR   R   t   numpy.ma.testutilsR   t   numpy.ma.coreR   R   R   R	   R
   R   R   R   R   R   R   R   R   RA   R   Rj   R/   R3   Rc   t   objectR?   RR   R`   (    (    (    s>   lib/python2.7/site-packages/numpy/ma/tests/test_subclassing.pyt   <module>   s   R	,