σ
ΨΖχXc           @` s~  d  Z  d d l m Z m Z m Z d d l Z d d l m Z 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 e j f d     YZ e Z d	 e f d
     YZ d e e f d     YZ e Z d e e j  f d     YZ! e! Z" d e# f d     YZ$ d e f d     YZ% d e f d     YZ& e' d k rze	   n  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   TestCaset   run_module_suitet   assert_raises(   t   assert_equal(   t   arrayt   aranget   maskedt   MaskedArrayt   masked_arrayt   logt   addt   hypott   dividet   asarrayt
   asanyarrayt   nomaskt   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>   /tmp/pip-build-X4mzal/numpy/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>   /tmp/pip-build-X4mzal/numpy/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>   /tmp/pip-build-X4mzal/numpy/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>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR)   )   s     (   t   __name__t
   __module__R   R   R$   R)   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/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>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR   4   s    N(   R*   R+   t   __doc__R    R   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR,   2   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   R1   R   R2   t   subarrt   _data(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR   <   s    c         C` s   |  j  t  } t | _ | S(   N(   R   R
   t   Falset   _sharedmask(   R!   t   _view(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   _get_seriesB   s    	t   fget(   R*   R+   R   R   R8   t   propertyt   _series(    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR0   :   s   	t   MMatrixc           B` s5   e  Z e d   Z d   Z d   Z e d e  Z RS(   c         C` s.   t  j |  } t j |  d | d | } | S(   NR1   R2   (   R   t   matrixR
   R   (   R   R1   R2   t   matR4   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR   M   s    c         C` s'   t  j j |  |  t j |  |  d  S(   N(   R   R=   R   R
   (   R!   R"   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR   R   s    c         C` s   |  j  t  } t | _ | S(   N(   R   R
   R5   R6   (   R!   R7   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR8   W   s    	R9   (   R*   R+   R   R   R   R8   R:   R;   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR<   K   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!   t   a(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   __init__l   s    	c         C` s   |  S(   N(    (   R!   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   __iter__p   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>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRG   s   s
    c         C` s   |  j  j |  |  j | <d  S(   N(   R@   t   _validate_inputRC   (   R!   t   indext   value(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   __setitem__z   s    c         C` s%   t  |  j  j   j t |  j   S(   N(   t   nextRC   RI   R   RJ   R@   (   R!   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   __next__}   s    (	   R*   R+   R/   RE   RF   RG   RP   RR   RQ   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR?   e   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>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   __str__   s    c         C` s   d j  |  j j |   S(   Ns	   <{0} {1}>(   RT   t	   __class__R*   (   R!   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   __repr__   s    c         C` s"   t  | t  s t d   n  | S(   Ns!   Can only set to MySubArray values(   RH   RS   t
   ValueError(   R!   RO   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRM      s    c         C` s&   t  t |   j | |  j |   d  S(   N(   R   RS   RP   RM   (   R!   t   itemRO   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRP      s    c         C` sF   t  t |   j |  } t | t j  sB | j   j t  } n  | S(   N(   R   RS   RG   RH   R   RA   RI   R   (   R!   RY   RO   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRG      s    c         C` s
   t  |   S(   N(   R?   (   R!   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRB      s    c         C` s   |  j    } | | (d  S(   N(   t   ravel(   R!   RO   t   y(    (    s>   /tmp/pip-build-X4mzal/numpy/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   RS   t   __array_wrap__R    R   t   multiplyR   R%   (   R!   R"   t   context(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyR]   §   s    #N(   R*   R+   RU   RW   RM   RP   RG   R:   RB   t   setterR    R]   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRS      s   					t   TestSubclassingc           B` st   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 RS(   c         C` sI   t  j d d d } t | d d d d d d g } | | f |  _ d  S(   Ni   t   dtypet   floatR2   i    i   (   R   R   t   mmatrixR1   (   R!   R   t   mx(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   setUp²   s    !c         C` s   t  j d  } d d d d d g } t |  } t | d | } |  j t | t   t | j |  |  j t | j t   d  S(   Ni   i    i   R2   (	   R   R   R   R   t
   assertTrueRH   R
   R   R4   (   R!   R   t   mt   xsubt   xmsub(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_data_subclassing·   s    c         C` s/   |  j  \ } } |  j t | j t j   d  S(   N(   R1   Rg   RH   R4   R   R=   (   R!   R   Re   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_maskedarray_subclassingΑ   s    c         C` sd   |  j  \ } } t j d d  = |  j t t |  t   t t |  t j |   Wd  QXd  S(   NR   t   ignore(   R1   R   t   errstateRg   RH   R   Rd   R   (   R!   R   Re   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_masked_unary_operationsΖ   s    c         C` sπ   |  j  \ } } |  j t t | |  t   |  j t t | |  t   t t | |  | |  |  j t t | |  j t j   |  j t t j	 | |  t   |  j t t
 | |  t   |  j t t
 | |  t   d  S(   N(   R1   Rg   RH   R   Rd   R   R4   R   R=   t   outerR   (   R!   R   Re   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_masked_binary_operationsΝ   s    %"c         C` s   |  j  \ } } t | j  j   d | j } |  j t t | |  t   |  j t t | |  t   t t | |  t | |   d  S(   NR2   (	   R1   R   RI   R2   Rg   RH   R   Rd   R   (   R!   R   Re   t   xmx(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_masked_binary_operations2Ϊ   s
    c         C` sJ  t  t d  d d g d g d } t t |   } t |  } | d } |  j t | t   |  j t | t   |  j t | j	 t
   t | j	 j i   | d } |  j t | t   |  j t | t   |  j t | j	 t
   |  j | j	 j d d k  | d 7} |  j t | t   |  j t | t   |  j t | j	 t
   |  j | 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 |  } |  j t | d   t | j | j  d  S(   Ni   R2   i    i   i   R#   R(   R   R   t   name(   R   R   R   t   subarrayt	   msubarrayRg   RH   R
   R0   R4   R   R   R   t	   _set_maskt   _maskR;   t   hasattr(   R!   R   t   myt   ymt   zRi   t   mxsub(    (    s>   /tmp/pip-build-X4mzal/numpy/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 } |  j t | t   |  j t | t   t	 | j
 |  t |  } |  j t | t   |  j t | t   t	 | j
 |  t | d t } |  j t | t   t	 | j | j  t	 | j
 | j
  t |  } |  j t | t   t	 | j | j  t	 | j
 |  d  S(   Ni   i    i   R2   R   Ri   t   subok(   R   R   t   zipR0   R   R5   Rg   RH   R
   R   Rx   R   t   TrueR   R   (   R!   R   Rh   t   it   jt   xinfoRi   R}   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_subclasspreservation  s(    .c         C` s  t  j d  } t |  } t | d t t t t t g } |  j t | d t   |  j t | d d !t   |  j t | d t   |  j | d t k  |  j t | d d !j	 t   |  j t | j
 d j	 t   |  j | d t k  |  j 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   R2   i   i   i    N(   R   R   RS   R   R   R5   Rg   RH   R	   R1   RB   t   baseR   RX   RP   t   slice(   R!   R   t   xcsubt   mxcsub(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_subclass_items  s(    !  #&)c         C` s₯   t  j d  } t | d t t t t t g } |  j t |  j d   t |  } t | d t t t t t g } |  j t |  j d j	 t j
    d S(   sO   test that repr uses the name of the subclass
        and 'array' for np.ndarrayi   R2   R   s   masked_{0}(data = [-- 1 -- 3 4]N(   R   R   R   R   R5   Rg   t   reprt
   startswithR   RT   R*   (   R!   R   Re   Ri   R}   (    (    s>   /tmp/pip-build-X4mzal/numpy/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 } |  j t |  d k  t |  } t	 t
 | j d t  j j j  t | d t t t t t g } |  j t |  d k  d S(   s7   test str with subclass that has overridden str, setitemi   R2   s   [-- 1 -- 3 4]i    s    myprefix [-- 1 -- 3 4] mypostfixN(   R   R   R   R   R   R5   Rg   t   strRS   R   RX   RP   t   mat   coret   masked_print_option(   R!   R   Ri   R}   R   R   (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   test_subclass_strI  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 | |  } |  j d
 | j k  |  j | j d
 d k  | | } |  j d
 | j k  |  j | j d
 d k  d  S(   Nt   testR1   i   i   i   i   i   i   i    R   (   R,   R   t   subtractRg   R-   (   R!   t   arr1t   arr2t   diff1t   diff2(    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt$   test_pure_subclass_info_preservationW  s    $!
(   R*   R+   Rf   Rk   Rl   Ro   Rq   Rs   R~   R   R   R   R   R   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyRa   ―   s   		
					!		 		t   __main__((   R/   t
   __future__R    R   R   t   numpyR   t   numpy.testingR   R   R   t   numpy.ma.testutilsR   t   numpy.ma.coreR   R   R	   R
   R   R   R   R   R   R   R   R   RA   R   Ru   R,   R0   Rv   R=   R<   Rd   t   objectR?   RS   Ra   R*   (    (    (    s>   /tmp/pip-build-X4mzal/numpy/numpy/ma/tests/test_subclassing.pyt   <module>   s"   R,Ά