ó
šßÈ[c           @   s  d  d l  Z  d  d l Z d d l m Z d d l m Z m Z d d l m	 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 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿNi   (   t   catch_warnings(   t   Tablet   Column(   t   AstropyUserWarningc         C   s   t  |  ƒ t  | ƒ k S(   N(   t   sorted(   t   list1t   list2(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   sort_eq   s    c         C   s0  x)t  t f D]} t |  d | ƒ} | d j ƒ  } | j | d ƒ } t j | j j t j	 d d d d g ƒ k ƒ s~ t
 ‚ | j | d ƒ } t j | j j t j	 d d d d d	 d
 d g ƒ k ƒ sÐ t
 ‚ | j | d j ƒ  ƒ } t j | j j t j	 d d d d d	 d
 d g ƒ k ƒ s t
 ‚ q Wd  S(   Nt   maskedt   ai    i   i   i   t   bi   i   i   (   R	   R
   (   R	   R
   (   t   Falset   TrueR   t   copyt   group_byt   npt   allt   groupst   indicest   arrayt   AssertionErrort   as_array(   t   T1R   t   t1t   t1at   t1ag(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_column_group_by   s    6?c         C   s  x t  t f D]ò} t |  d | ƒ} | j d ƒ } t j | j j t j d d d d g ƒ k ƒ sj t	 ‚ t
 | j ƒ d k s… t	 ‚ t
 | d j ƒ d k s¤ t	 ‚ | j ƒ  d	 d
 d d d d d d d d g
 k sÚ t	 ‚ | j d d k só t	 ‚ | d j d d k st	 ‚ | d j d k s)t	 ‚ | j | d ƒ } | j ƒ  | j ƒ  k sZt	 ‚ xž d d g d f D]Š } | j | ƒ } t j | j j t j d d d d d d d g ƒ k ƒ sÁt	 ‚ | j ƒ  d	 d
 d d d d d d d d g
 k smt	 ‚ qmW| j | d ƒ } | j ƒ  | j ƒ  k s,t	 ‚ | j | d j ƒ  ƒ } | j ƒ  | j ƒ  k sct	 ‚ | j t j d d d d d d d d g ƒ ƒ } t j | j j t j d d d d g ƒ k ƒ sÉt	 ‚ | j ƒ  d	 d
 d d d d d d d d g
 k s t	 ‚ q Wd S(   sl   
    Test basic table group_by functionality for possible key types and for
    masked/unmasked tables.
    R   R	   i    i   i   i   s   <TableGroups indices=[0 1 4 8]>s    <ColumnGroups indices=[0 1 4 8]>s    a   b   c   d s   --- --- --- ---s     0   a 0.0   4s     1   b 3.0   5s     1   a 2.0   6s     1   a 1.0   7s     2   c 7.0   0s     2   b 5.0   1s     2   b 6.0   2s     2   a 4.0   3t   tat   cs   column cR
   i   i   i   i   N(   R	   R
   (   R	   R
   (   R	   R
   (   R   R   R   R   R   R   R   R   R   R   t   strt   pformatt   metat   descriptionR   (   R   R   R   t   tgt   tg2t   keys(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_group_by#   sd    6?06c      	   C   sL  |  j  d ƒ } | j j } | j j d k s3 t ‚ t j | d t j d d d g ƒ k ƒ sd t ‚ |  j  d d g ƒ } | j j } | j j d k s t ‚ t j | d t j d d d d d d g ƒ k ƒ s× t ‚ t j | d t j d d d d d d g ƒ k ƒ st ‚ |  j  |  d ƒ } | j j } | j j d  k sHt ‚ d  S(	   NR	   i    i   i   R
   R   (   R	   (   R	   R
   (
   R   R   R#   t   dtypet   namesR   R   R   R   t   None(   R   R!   R#   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_groups_keysj   s    1::c         C   s„   |  j  d ƒ } xn t | j ƒ D]] \ } } | j ƒ  | j | j ƒ  k sP t ‚ | d d | d | j j | k s t ‚ q Wd  S(   NR	   i    (   R   t	   enumerateR   R   R   R   (   R   R!   t   iit   group(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_groups_iterator|   s    %c   	      C   s6  x/t  t f D]!} t |  d | ƒ} | j d ƒ } | j ƒ  } t j | j j | j j k ƒ sg t	 ‚ t j | j j
 | j j
 k ƒ sŽ t	 ‚ | d j ƒ  } t j | j j | d j j k ƒ sÉ t	 ‚ | d j ƒ  } | j | d ƒ } | j ƒ  } t j | j j t j d d d d g ƒ k ƒ s t	 ‚ q Wd S(   sH   
    Test that copying a table or column copies the groups properly
    R   R	   i    i   i   i   N(   R   R   R   R   R   R   R   R   R   R   R#   R   (	   R   R   R   R!   t   tgct   tact   c1t   gc1t   gc1c(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_grouped_copyƒ   s    ''+c         C   s—   x t  t f D]‚ } t |  d | ƒ} | j d ƒ } | d d !} t j | j j t j d t	 | ƒ g ƒ k ƒ sw t
 ‚ | j j d k s t
 ‚ q Wd S(   s=   
    Test that slicing a table removes previous grouping
    R   R	   i   i   i    N(   R   R   R   R   R   R   R   R   R   t   lenR   R#   R'   (   R   R   R   R!   R"   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_grouped_slicing—   s    6c         C   s   |  d j  t j |  d ƒ ƒ } t j | j j t j d d d g ƒ k ƒ sS t ‚ t j | j j t j d d d d g ƒ k ƒ s‰ t ‚ d S(	   s0   
    Group a column that is part of a table
    R   R	   i    i   i   i   i   N(   R   R   R   R   R   R#   R   R   (   R   t   cg(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_group_column_from_table¦   s     3c         C   sü   xõ t  t f D]ç } t |  d | ƒj d ƒ } | j t j t t  t g ƒ } t | j ƒ d k sh t ‚ | j d j	 ƒ  | j d j	 ƒ  k s” t ‚ | j d j	 ƒ  | j d j	 ƒ  k sÀ t ‚ t j
 | j j d t j d d g ƒ k ƒ s t ‚ q Wd S(   s<   
    Use boolean mask as item in __getitem__ for groups
    R   R	   i   i    i   N(   R   R   R   R   R   R   R   R3   R   R   R   R#   (   R   R   R   t   t2(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_groups_mask_index¯   s    ,,c         C   sù   xò t  t f D]ä } t |  d | ƒj d ƒ } | j t j d d g ƒ } t | j ƒ d k se t ‚ | j d j	 ƒ  | j d j	 ƒ  k s‘ t ‚ | j d j	 ƒ  | j d j	 ƒ  k s½ t ‚ t j
 | j j d t j d d g ƒ k ƒ s t ‚ q Wd S(   s;   
    Use numpy array as item in __getitem__ for groups
    R   R	   i    i   i   N(   R   R   R   R   R   R   R   R3   R   R   R   R#   (   R   R   R   R7   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_groups_array_index½   s    ,,c         C   s2  x+t  t f D]} t |  d | ƒj d ƒ } | j d d !} t | j ƒ d k sY t ‚ | j d j ƒ  | j d j ƒ  k s… t ‚ | j d j ƒ  | j d j ƒ  k s± t ‚ t j	 | j j
 d t j d d g ƒ k ƒ så t ‚ | j d d !} t | j ƒ d k st ‚ | j d j ƒ  | j d j ƒ  k s<t ‚ t j	 | j j
 d t j d g ƒ k ƒ smt ‚ | j d d d … } t | j ƒ d k sžt ‚ | j d j ƒ  | j d j ƒ  k sÊt ‚ | j d j ƒ  | j d j ƒ  k söt ‚ t j	 | j j
 d t j d d g ƒ k ƒ s t ‚ q Wd S(   s.   
    Test that slicing table groups works
    R   R	   i    i   i   i   N(   R   R   R   R   R   R3   R   R   R   R   R#   R   (   R   R   R   R7   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_groups_slicingË   s     ,,4,1,,c         C   sd  x]t  t f D]O} t |  d | ƒ} | j d ƒ } | d } t j | j j | j j k ƒ se t ‚ t j | j j	 | j j	 k ƒ sŒ t ‚ | j j
 t j ƒ } | j ƒ  d d d d d	 g k sÈ t ‚ | d } t j | j j | j j k ƒ sù t ‚ t j | j j	 | j j	 k ƒ s t ‚ | j j
 t j ƒ } | j ƒ  d
 d d d d g k s t ‚ q Wd S(   s5   
    Test that column slicing preserves grouping
    R   R	   R   t   ds    a   c    d s   --- ---- ---s     0  0.0   4s     1  6.0  18s     2 22.0   6s    c    d s   ---- ---s    0.0   4s    6.0  18s   22.0   6N(   R	   R   R;   (   R   R;   (   R   R   R   R   R   R   R   R#   R   R   t	   aggregatet   sumR   (   R   R   R   R!   t   tgst   tgsa(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_grouped_item_accessè   s*    
''
''c      	   C   sA  x:t  t f D],} t |  d | ƒ} | j d ƒ } | j d ƒ t j | j j t j	 d t
 | ƒ g ƒ k ƒ sw t ‚ | j j d k s t ‚ | j d ƒ } | j d ƒ t j | j j t j	 d t
 | ƒ g ƒ k ƒ sá t ‚ | j j d k sù t ‚ | j d ƒ } | j j j ƒ  } | j t d d d t j t
 | ƒ ƒ ƒ ƒ t j | j j | k ƒ sft ‚ t j | d j j | k ƒ s‹t ‚ t j | d j j | j j k ƒ s¶t ‚ | j d ƒ } | j d	 ƒ t j | j j | k ƒ sót ‚ | j j j j d k st ‚ t j | d j j | k ƒ s6t ‚ | j d ƒ } | j d ƒ t j | j j | k ƒ sst ‚ | j j j j d k s‘t ‚ t j | d	 j j | k ƒ s¶t ‚ | j d ƒ } | j d d
 ƒ t j | j j | k ƒ söt ‚ | j j j j d k st ‚ t j | d
 j j | k ƒ s t ‚ q Wd S(   s”   
    Operations like adding or deleting a row should removing grouping,
    but adding or removing or renaming a column should retain grouping.
    R   R	   i    g      @i   t   namet   et   dataR
   t   aaN(   i    R	   g      @i   (   R	   (   R	   (   R	   (   R   R   R   R   t   add_rowR   R   R   R   R   R3   R   R#   R'   t
   remove_rowR   t
   add_columnR   t   aranget   remove_columnR%   R&   t   rename_column(   R   R   R   R!   R   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_mutable_operations  s>    66+!%+!%!%!c         C   sw   t  |  d t ƒ} t | d j d <t | d j d <| j d ƒ j ƒ  d d d	 d
 d d d d d d g
 k ss t ‚ d  S(   NR   R   i   R;   i   R	   s    a   b   c   d s   --- --- --- ---s     0   a  --   4s     1   b 3.0  --s     1   a 2.0   6s     1   a 1.0   7s     2   c 7.0   0s     2   b 5.0   1s     2   b 6.0   2s     2   a 4.0   3(   R   R   t   maskR   R   R   (   R   t   t1m(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_group_by_masked9  s    c      
   C   së   t  j t ƒ  |  j d ƒ Wd QXt  j t ƒ  |  j d d g ƒ Wd QXt  j t ƒ ! |  j t j d d g ƒ ƒ Wd QXt  j t ƒ  |  j d ƒ Wd QXt |  d t	 ƒ} t	 | d j
 d <t  j t ƒ  | j d ƒ Wd QXd S(	   s(   
    Appropriate errors get raised.
    t   fNt   gi   i   R   R	   i   (   t   pytestt   raisest
   ValueErrorR   R   R   t	   TypeErrorR'   R   R   RL   (   R   R   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_group_by_errorsI  s    "c         C   sÔ  |  j  d ƒ } | j j j d t k s. t ‚ | d j j j d t k sQ t ‚ | j d j j j d t k sw t ‚ | d j t j t t t g ƒ j j j d t k s³ t ‚ |  j  |  d	 ƒ } | j j j d t k så t ‚ | d j j j d t k st ‚ | j d j j j d t k s.t ‚ |  j  |  d
 j	 ƒ  ƒ } t
 | j j d ƒ sct ‚ t
 | d j j d ƒ sƒt ‚ |  j  |  d ƒ } d | j j j k s±t ‚ d | d j j j k sÐt ‚ d S(   sF   
    Make sure the keys meta['grouped_by_table_cols'] is working.
    R	   t   grouped_by_table_colsR   i   R;   R
   R   N(   R	   R
   (   R	   R
   (   R   R   R#   R   R   R   R   R   R   R   t   hasattr(   R   R!   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_groups_keys_metad  s     #&)#& c      	   C   sÙ  |  d } | j  d ƒ } | j j t j ƒ } | j ƒ  d d d d d g k sU t ‚ t j | j j t j	 d	 d
 g ƒ k ƒ s… t ‚ | j j
 d k s t ‚ | j d d k s¶ t ‚ | d j d d k sÓ t ‚ | d j d k sì t ‚ t | d t ƒ} t | d j d d +t | d j d d +| j  d ƒ } t t ƒ T } | j j t j ƒ } | d	 j t k srt ‚ d t | d	 j ƒ k s‘t ‚ Wd QX| j ƒ  d d d d d g k s¾t ‚ t | d t ƒ} t | d j d <t | d j d <| j  d ƒ } | j j t j ƒ } | j ƒ  d d d d d g k s=t ‚ |  j  d ƒ } t t ƒ T } | j j t j ƒ } | d	 j t k s‰t ‚ d t | d	 j ƒ k s¨t ‚ Wd QX| j ƒ  d d d d d g k sÕt ‚ d S(   s   
    Aggregate a table
    R	   R   R;   s    a   c    d s   --- ---- ---s     0  0.0   4s     1  6.0  18s     2 22.0   6i    i   R   i   s   column cR   i   i   s"   converting a masked element to nanNs    a   c    d  s   --- ---- ----s     0  nan  nans     1  3.0 13.0s     2 22.0  6.0i   s     1  3.0  13s   Cannot aggregate column(   R	   R   R;   (   R   R   R<   R   R=   R   R   R   R   R   R#   R'   R   R    R   R   RL   R    t   Warningt   categoryt   UserWarningR   t   messageR   (   R   R   R!   t   tgaRM   t   warning_lines(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_aggregate  s\    
0%%c         C   sÙ  d „  } d „  } d „  } |  d } | j  d ƒ } | j j t j ƒ } | j j t j ƒ } | j j | ƒ } t j | | k ƒ s‹ t ‚ t j | | k ƒ s¦ t ‚ | j ƒ  d d d	 d
 d g k sÍ t ‚ | j j t j	 ƒ } | j j | ƒ } t j | | k ƒ st ‚ | j ƒ  d d d d d g k s6t ‚ |  d }	 |	 j  d ƒ } t
 t ƒ Q }
 | j j | ƒ } |
 d j t k s‰t ‚ d t |
 d j ƒ k s¨t ‚ Wd QX| j ƒ  d d d d d g k sÕt ‚ d S(   sE   
    Aggregate table with functions which have a reduceat method
    c         S   s   t  j |  ƒ S(   N(   R   t   mean(   t   x(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   np_meanÊ  s    c         S   s   t  j |  ƒ S(   N(   R   R=   (   Ra   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   np_sumÍ  s    c         S   s   t  j |  ƒ S(   N(   R   t   add(   Ra   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   np_addÐ  s    R	   R   R;   s    a   c    d s   --- ---- ---s     0  0.0   4s     1  6.0  18s     2 22.0   6s    a   c   d s   --- --- ---s     0 0.0 4.0s     1 2.0 6.0s     2 5.5 1.5i    s   Cannot aggregate columnNs    a s   ---s     0s     1s     2(   R	   R   R;   (   R	   R   (   R   R   R<   R   R=   Rd   R   R   R   R`   R    RY   RZ   R   R   R\   (   R   Rb   Rc   Re   R   R!   t   tga_rt   tga_at   tga_nR7   R^   R]   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_aggregate_reduceatÅ  sD    			

%c         C   sv   xo t  t f D]a } t |  d | ƒj d ƒ } | d j j t j ƒ } | j ƒ  d d d d d g k s t	 ‚ q Wd	 S(
   s)   
    Aggregate a single table column
    R   R	   R   s    c  s   ----s    0.0s    6.0s   22.0N(
   R   R   R   R   R   R<   R   R=   R   R   (   R   R   R!   R]   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_column_aggregateû  s    c          C   s´   d „  }  t  j d d d d d d d d	 d
 d g
 d d ƒ} | j d ƒ } | j j |  ƒ } | j d j ƒ  d d d d g k sˆ t ‚ | j d j ƒ  d d d g k s° t ‚ d S(   s    
    Table groups filtering
    c         S   sZ   g  |  j  D] } | | k r
 | ^ q
 } x+ | D]# } t j |  | d k  ƒ r/ t Sq/ Wt S(   Ni    (   t   colnamesR   t   anyR   R   (   t   tablet   key_colnamesRA   Rk   t   colname(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   all_positive  s
    (s    a c ds	    -2 7.0 0s	    -2 5.0 1s    0 0.0 4s    1 3.0 5s	    1 2.0 -6s    1 1.0 7s    3 3.0 5s	    3 -2.0 6s    3 1.0 7t   formatt   asciiR	   i    s    a   c   d s   --- --- ---s    -2 7.0   0s    -2 5.0   1i   s     0 0.0   4N(   R   t   readR   R   t   filterR   R   (   Rp   t   tR!   R7   (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_table_filter	  s*    				c          C   s  d „  }  t  j d d d d d d d d	 d
 d g
 d d ƒ} | j d ƒ } | d j j |  ƒ } t | j ƒ d k s| t ‚ | j d j ƒ  d d d d g k s§ t ‚ | j d j ƒ  d d d g k sÏ t ‚ | j d j ƒ  d d d d d g k sý t ‚ d S(   s    
    Table groups filtering
    c         S   s   t  j |  d k  ƒ r t St S(   Ni    (   R   Rl   R   R   (   t   column(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyRp   /  s    s    a c ds	    -2 7.0 0s	    -2 5.0 1s    0 0.0 4s    1 3.0 5s	    1 2.0 -6s    1 1.0 7s    3 3.0 5s	    3 -2.0 6s    3 1.0 7Rq   Rr   R	   R   i   i    s    c s   ---s   7.0s   5.0i   s   0.0i   s   3.0s   2.0s   1.0N(   R   Rs   R   R   Rt   R3   R   R   (   Rp   Ru   R!   t   c2(    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   test_column_filter+  s$    				+((   RQ   t   numpyR   t   tests.helperR    Rm   R   R   t   utils.exceptionsR   R   R   R$   R(   R,   R2   R4   R6   R8   R9   R:   R@   RK   RN   RU   RX   R_   Ri   Rj   Rv   Ry   (    (    (    s>   lib/python2.7/site-packages/astropy/table/tests/test_groups.pyt   <module>   s2   			G											3				D	6		"