ó
ÿ¼÷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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyR)   )   s     (   t   __name__t
   __module__R   R   R$   R)   (    (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyR   4   s    N(   R*   R+   t   __doc__R    R   (    (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyt   _get_seriesB   s    	t   fget(   R*   R+   R   R   R8   t   propertyt   _series(    (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyR8   W   s    	R9   (   R*   R+   R   R   R   R8   R:   R;   (    (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyt   __init__l   s    	c         C` s   |  S(   N(    (   R!   (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyt   __next__}   s    (	   R*   R+   R/   RE   RF   RG   RP   RR   RQ   (    (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyRG   —   s    c         C` s
   t  |  ƒ S(   N(   R?   (   R!   (    (    s>   /tmp/pip-build-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/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-2Vcwy8/numpy/numpy/ma/tests/test_subclassing.pyt   <module>   s"   R,¶