ó
šßÈ[c           @   s—   d  Z  d d l Z d d l Z e j j d ƒ d d
 d „  ƒ  Yƒ Z e j j d ƒ d e f d „  ƒ  Yƒ Z e j j d ƒ d e f d	 „  ƒ  Yƒ Z d S(   sa    Verify item access API in:
https://github.com/astropy/astropy/wiki/Table-item-access-definition
iÿÿÿÿNt
   table_datat   BaseTestItemsc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyR      s   t   TestTableColumnsItemsc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sH  | j  | j ƒ |  _ |  j j |  _ |  j d j d k s@ t ‚ |  j d d d k s] t ‚ |  j d j d k sy t ‚ |  j d j d k s• t ‚ |  j d j	 i d d 6k s¸ t ‚ |  j d j
 d k sÔ t ‚ |  j d j | j d ƒ s÷ t ‚ t |  j d | j ƒ st ‚ d |  j d	 d <|  j d	 d d k sDt ‚ d
 S(   ss   Access TableColumns by name and show that item access returns
        a Column that refers to underlying table datat   ai   i   t   dat   fat   mat   uai    t   bN(   t   Tablet   COLSt   tt   columnst   tct   namet   AssertionErrort   descriptiont   formatt   metat   unitt   attrs_equalt
   isinstancet   Column(   t   selfR    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_by_name   s    ##c         C   sv  | j  | j ƒ |  _ |  j j |  _ |  j d j d k s@ t ‚ t j |  j d j	 | j d j	 k ƒ so t ‚ |  j d j
 d k s‹ t ‚ |  j d j d k s§ t ‚ |  j d j i d d 6k sÊ t ‚ |  j d j d k sæ t ‚ |  j d j | j d ƒ s	t ‚ t |  j d | j ƒ s(t ‚ |  j d j d k sDt ‚ d |  j d d <|  j d d d k srt ‚ d	 S(
   sw   Access TableColumns by position and show that item access returns
        a Column that refers to underlying table datai   R
   t   dbt   fbt   mbt   ubi   i    N(   R   R   R   R   R   R   R   t   npt   allt   dataR   R   R   R   R   R   R   (   R   R    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_by_position'   s    /##c         C   sã   | j  | j ƒ |  _ |  j j |  _ |  j d } | d j d k sJ t ‚ | d d d k sd t ‚ | d j d k s} t ‚ | d d d k s— t ‚ d | d d <|  j d d d k sÂ t ‚ |  j d d d k sß t ‚ d S(	   s}   Access TableColumns with "fancy indexing" and showed that returned
        TableColumns object still references original dataR
   t   ci   i   i    i   N(   R
   R#   (   R   R   R   R   R   R   R   (   R   R    t   tc2(    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_mult_columns;   s    c         C   sæ   | j  | j ƒ |  _ |  j j |  _ |  j d d !} | d j d k sM t ‚ | d d d k sg t ‚ | d j d k s€ t ‚ | d d d k sš t ‚ d | d d <|  j d d d k sÅ t ‚ |  j d d d k sâ t ‚ d S(	   sr   Access TableColumns with slice and showed that returned
        TableColumns object still references original datai   i   R#   i   i    R
   i   N(   R   R   R   R   R   R   R   (   R   R    R$   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_column_sliceK   s    (   R   R   R   R"   R%   R&   (    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyR      s   			t   TestTableItemsc           B   sË   e  Z e j j d  d e j d ƒ e j d ƒ g ƒ d „  ƒ Z e j j d  d e j d ƒ e j d ƒ g ƒ d „  ƒ Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   t   idxi   c         C   sr   | j  | j ƒ |  _ |  j j |  _ |  j d } | | d k sG t ‚ d | | <|  j d | d k sn t ‚ d S(   s'   Column access returns REFERENCE to dataR   i   i    N(   R   R   R   R   R   R   (   R   R    R(   R   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_column_   s    
c         C   sª  | j  | j ƒ |  _ |  j j |  _ |  j | } | d d k sG t ‚ | | d k s] t ‚ | j d j | j d ƒ s€ t ‚ | j d j | j d ƒ s£ t ‚ | j d j | j d ƒ sÆ t ‚ d | | <| | d k sæ t ‚ | d d k sü t ‚ |  j d | d k st ‚ |  j | d d k s6t ‚ d | d <| d d k sVt ‚ | d d k slt ‚ |  j d d d k s‰t ‚ |  j d d d k s¦t ‚ d S(	   s%   Row  access returns REFERENCE to dataR   i   i   i    R
   i   R#   N(   R   R   R   R   R   R   R   (   R   R    R(   t   row(    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_rowj   s$    ###

c         C   sÎ   | j  | j ƒ |  _ x² g  d t j g  ƒ f D]˜ } |  j | } | sN t ‚ t | ƒ d k sf t ‚ | d j | j d ƒ s† t ‚ | d j | j d ƒ s¦ t ‚ | d j | j d ƒ s. t ‚ q. Wd S(	   sm   
        Table item access with [], (), or np.array([]) returns the same table
        with no rows.
        i    R   R
   i   R#   i   N(    (   R   R   R   R   t   arrayR   t   lenR   (   R   R    t   itemt   t2(    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_empty_iterable_item…   s      c         C   sU  | j  | j ƒ |  _ |  j j |  _ |  j d d !} t j | d | j d d d !k ƒ sa t ‚ | d j	 | j d ƒ s t ‚ | d j	 | j d ƒ s¡ t ‚ | d j	 | j d ƒ sÁ t ‚ d | d d <t j |  j d t j
 d d d g ƒ k ƒ st ‚ | j |  j j k st ‚ | j |  j j k s9t ‚ t | | j  ƒ sQt ‚ d S(	   s%   Table slice returns REFERENCE to datai   i   R   i    R
   R#   i   N(   R   R   R   R   R   R   R    t   DATAR   R   R,   t   maskedt   _column_classR   (   R   R    R/   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_table_slice“   s    -   4c         C   s  | j  | j ƒ |  _ |  j j |  _ t j d d g ƒ } |  j | } t j | d | j d | k ƒ sp t	 ‚ | d j
 | j d ƒ s t	 ‚ | d j
 | j d ƒ s° t	 ‚ | d j
 | j d ƒ sÐ t	 ‚ d | d d <t j |  j j ƒ  | j k ƒ st	 ‚ t j | d | j d | k ƒ s/t	 ‚ | j |  j j k sJt	 ‚ | j |  j j k set	 ‚ t | | j  ƒ s}t	 ‚ d S(   s&   Table fancy slice returns COPY of datai    i   R   R
   i   R#   N(   R   R   R   R   R   R   R,   R    R1   R   R   t   as_arrayt   anyR2   R3   R   (   R   R    t   sliceR/   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_fancy_index_slice£   s    *   '*c         C   sx  | j  | j ƒ |  _ |  j j |  _ d d g } |  j | } t j | d | j d | k ƒ sg t ‚ | d j	 | j d ƒ s‡ t ‚ | d j	 | j d ƒ s§ t ‚ | d j	 | j d ƒ sÇ t ‚ d | d d <t j |  j j
 ƒ  | j k ƒ sü t ‚ t j | d | j d | k ƒ s&t ‚ | j |  j j k sAt ‚ | j |  j j k s\t ‚ t | | j  ƒ stt ‚ d S(   s+   Table list index slice returns COPY of datai    i   R   R
   i   R#   N(   R   R   R   R   R   R   R    R1   R   R   R5   R6   R2   R3   R   (   R   R    R7   R/   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_list_index_slice¶   s    *   '*c         C   so  | j  | j ƒ |  _ |  j j |  _ xDd d d g f D]0} |  j | } t j | d | j d k ƒ sp t ‚ t j | d | j d k ƒ s– t ‚ | d j	 | j d ƒ s¶ t ‚ | d j	 | j d ƒ sÖ t ‚ d | d d <t j |  j j
 ƒ  | j k ƒ st ‚ t j | d | j d k ƒ s1t ‚ | j |  j j k sLt ‚ | j |  j j k s7 t ‚ q7 Wd S(   sE   Select columns returns COPY of data and all column
        attributesR   R#   i    i   N(   R   R#   (   R   R   R   R   R   R   R    R1   R   R   R5   R6   R2   R3   (   R   R    R   R/   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_select_columnsÉ   s    &&  '&c         C   s˜   | j  | j ƒ |  _ t j t ƒ  } |  j d g Wd QXd t | ƒ k sS t ‚ t j t ƒ  } |  j d d g Wd QXd t | ƒ k s” t ‚ d S(   s+   Selecting a column that doesn't exist failst   xxxxNs+   Slice name(s) xxxx not valid column name(s)t   yyyys1   Slice name(s) xxxx, yyyy not valid column name(s)(   R   R   R   t   pytestt   raisest
   ValueErrort   strR   (   R   R    t   err(    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_select_columns_failÜ   s    c         C   sî   | j  | j ƒ } t j | d d k ƒ } | | } t j | d d d g k ƒ sZ t ‚ t j | d d d g k ƒ s t ‚ t | | j  ƒ s— t ‚ t j | d d k ƒ } | | } t | ƒ d	 k sÒ t ‚ t | | j  ƒ sê t ‚ d
 S(   s$   Select rows using output of np.whereR   g      ø?i   i   R
   i   i   id   i    N(   R   R   R   t   whereR    R   R   R-   (   R   R    R   t   rowsR/   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_np_whereè   s    
%%
c         C   sB   | j  | j ƒ } t j j t | ƒ d d ƒ} | | d } d S(   sp   
        Select rows using numpy integers.  This is a regression test for a
        py 3.3 failure mode
        t   sizei   i   N(   R   R   R   t   randomt   randintR-   (   R   R    R   t   idxsR.   (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_np_integersø   s    c         C   sI   | j  | j ƒ |  _ |  j j |  _ t j t ƒ  |  j d Wd QXd S(   s&   Select column name that does not existR   i   N(   R   i   (   R   R   R   R   R   R=   R>   R?   (   R   R    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   test_select_bad_column  s    (   R   R   R=   t   markt   parametrizeR   t   int64R,   R)   R+   R0   R4   R8   R9   R:   RB   RE   RJ   RK   (    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyR'   \   s   99									(    (	   t   __doc__R=   t   numpyR   RL   t   usefixturesR   R   R'   (    (    (    sC   lib/python2.7/site-packages/astropy/table/tests/test_item_access.pyt   <module>   s   %I