a
    ߙfb2$                     @   sj   d Z ddlZddlZejdG dd dZejdG dd deZejdG dd	 d	eZdS )
za Verify item access API in:
https://github.com/astropy/astropy/wiki/Table-item-access-definition
    N
table_datac                   @   s   e Zd ZdS )BaseTestItemsN)__name__
__module____qualname__ r   r   Clib/python3.9/site-packages/astropy/table/tests/test_item_access.pyr      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTableColumnsItemsc                 C   s   | |j| _| jj| _| jd jdks,J | jd d dksBJ | jd jdksVJ | jd jdksjJ | jd jddiksJ | jd j	dksJ | jd 
|jd sJ t| jd |jsJ d| jd	 d< | jd	 d dksJ d
S )zsAccess TableColumns by name and show that item access returns
        a Column that refers to underlying table dataa      Zdaz%iZmaZuar   bN)TableCOLStcolumnstcnamedescriptionformatmetaunitattrs_equal
isinstanceColumnselfr   r   r   r   test_by_name   s    
z"TestTableColumnsItems.test_by_namec                 C   s  | |j| _| jj| _| jd jdks,J t| jd j|jd jksNJ | jd j	dksbJ | jd j
dksvJ | jd jddiksJ | jd jdksJ | jd |jd sJ t| jd |jsJ | jd jdksJ d| jd d< | jd d dksJ d	S )
zwAccess TableColumns by position and show that item access returns
        a Column that refers to underlying table datar   r   Zdbz%dZmbZubr   r   N)r   r   r   r   r   r   npalldatar   r   r   r   r   r   r   r   r   r   r   test_by_position&   s    
"z&TestTableColumnsItems.test_by_positionc                 C   s   | |j| _| jj| _| jd }|d jdks4J |d d dksHJ |d jdksZJ |d d dksnJ d|d d< | jd d dksJ | jd d dksJ dS )	z}Access TableColumns with "fancy indexing" and showed that returned
        TableColumns object still references original data)r   cr   r"      r   r      Nr   r   r   r   r   r   r   r   Ztc2r   r   r   test_mult_columns:   s    

z'TestTableColumnsItems.test_mult_columnsc                 C   s   | |j| _| jj| _| jdd }|d jdks8J |d d dksLJ |d jdks^J |d d dksrJ d|d d< | jd d dksJ | jd d dksJ dS )	zrAccess TableColumns with slice and showed that returned
        TableColumns object still references original datar      r"   r#   r   r   r$   Nr%   r&   r   r   r   test_column_sliceJ   s    
z'TestTableColumnsItems.test_column_sliceN)r   r   r   r   r!   r'   r)   r   r   r   r   r	      s   r	   c                   @   s   e Zd Zejddededgdd Z	ejddededgdd Z
dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestTableItemsidxr   c                 C   sT   | |j| _| jj| _| jd }|| dks2J d||< | jd | dksPJ dS )z'Column access returns REFERENCE to datar
   r   r   N)r   r   r   r   r   )r   r   r+   r
   r   r   r   test_column^   s    

zTestTableItems.test_columnc                 C   sB  | |j| _| jj| _| j| }|d dks2J || dksBJ |jd |jd s\J |jd |jd svJ |jd |jd sJ d||< || dksJ |d dksJ | jd | dksJ | j| d dksJ d|d< |d dksJ |d dksJ | jd d dks&J | jd d dks>J dS )	z%Row  access returns REFERENCE to datar
   r   r$   r   r   r   r"   N)r   r   r   r   r   r   )r   r   r+   rowr   r   r   test_rowi   s$    

zTestTableItems.test_rowc                 C   s   | |j| _g dtg fD ]n}| j| }|r4J t|dksDJ |d |jd s\J |d |jd stJ |d |jd sJ qdS )	zm
        Table item access with [], (), or np.array([]) returns the same table
        with no rows.
        r   r   r
   r   r   r"   r   N)r   r   r   r   arraylenr   )r   r   itemt2r   r   r   test_empty_iterable_item   s    
z'TestTableItems.test_empty_iterable_itemc                 C   s   | |j| _| jj| _| jdd }t|d |jd dd ksJJ |d |jd sbJ |d |jd szJ |d |jd sJ d|d d< t| jd t	g dksJ |j
| jj
ksJ |j| jjksJ t||j sJ d	S )
z%Table slice returns REFERENCE to datar   r(   r
   r   r   r"   r   )r   r   r(   N)r   r   r   r   r   r   r   DATAr   r/   masked_column_classr   )r   r   r2   r   r   r   test_table_slice   s    
$"zTestTableItems.test_table_slicec                 C   s  | |j| _| jj| _tddg}| j| }t|d |jd | ksPJ |d 	|jd shJ |d 	|jd sJ |d 	|jd sJ d|d d< t| j
 |jksJ t|d |jd | ksJ |j| jjksJ |j| jjksJ t||j sJ dS )z&Table fancy slice returns COPY of datar   r   r
   r   r   r"   N)r   r   r   r   r   r   r/   r   r4   r   as_arrayanyr5   r6   r   r   r   slicer2   r   r   r   test_fancy_index_slice   s    

  z%TestTableItems.test_fancy_index_slicec                 C   s  | |j| _| jj| _ddg}| j| }t|d |jd | ksJJ |d |jd sbJ |d |jd szJ |d |jd sJ d|d d< t| j	 |jksJ t
|d |jd | ksJ |j| jjksJ |j| jjksJ t||j sJ dS )z+Table list index slice returns COPY of datar   r   r
   r   r   r"   N)r   r   r   r   r   r   r   r4   r   r8   r9   r5   r6   r   r:   r   r   r   test_list_index_slice   s    

  z$TestTableItems.test_list_index_slicec                 C   s  | |j| _| jj| _dddgfD ]}| j| }t|d |jd ksNJ t|d |jd ksjJ |d |jd sJ |d |jd sJ d|d d< t| j	 |jksJ t
|d |jd ksJ |j| jjksJ |j| jjks$J q$dS )zESelect columns returns COPY of data and all column
        attributes)r
   r"   r
   r"   r   r   N)r   r   r   r   r   r   r   r4   r   r8   r9   r5   r6   )r   r   r   r2   r   r   r   test_select_columns   s    

z"TestTableItems.test_select_columnsc                 C   s   | |j| _tt}| jdg  W d   n1 s:0    Y  dt|jv sVJ tt}| jddg  W d   n1 s0    Y  dt|jv sJ dS )z+Selecting a column that doesn't exist failsZxxxxNz'xxxx'Zyyyy)r   r   r   pytestraisesKeyErrorstrvalue)r   r   errr   r   r   test_select_columns_fail   s    *,z'TestTableItems.test_select_columns_failc                 C   s   | |j}t|d dk}|| }t|d ddgks@J t|d ddgksZJ t||j sjJ t|d dk}|| }t|d	ksJ t||j sJ d
S )z$Select rows using output of np.wherer
   g      ?r   r(   r   r$      d   r   N)r   r   r   wherer   r   r0   )r   r   r   Zrowsr2   r   r   r   test_np_where   s    zTestTableItems.test_np_wherec                 C   s0   | |j}tjjt|dd}||d   dS )zp
        Select rows using numpy integers.  This is a regression test for a
        py 3.3 failure mode
        r   )sizer   N)r   r   r   ZrandomZrandintr0   )r   r   r   Zidxsr   r   r   test_np_integers   s    zTestTableItems.test_np_integersc                 C   sP   | |j| _| jj| _tt | jd  W d   n1 sB0    Y  dS )z&Select column name that does not exist)r
   r   N)r   r   r   r   r   r?   r@   
ValueErrorr   r   r   r   test_select_bad_column   s    
z%TestTableItems.test_select_bad_columnN)r   r   r   r?   markZparametrizer   Zint64r/   r,   r.   r3   r7   r<   r=   r>   rE   rI   rK   rM   r   r   r   r   r*   [   s   


	r*   )	__doc__r?   Znumpyr   rN   Zusefixturesr   r	   r*   r   r   r   r   <module>   s   

I
