U
    e»{j.$  ã                   @   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   úc/var/www/html/bwave/python/venv/lib/python3.8/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,t‚| jd d dksBt‚| jd jdksVt‚| jd jdksjt‚| jd j	ddiks‚t‚| jd j
dks–t‚| jd  |jd ¡s°t‚t| jd |jƒsÆt‚d| jd	 d< | jd	 d dksêt‚d
S )zsAccess TableColumns by name and show that item access returns
        a Column that refers to underlying table dataÚaé   é   Údaz%iÚmaZuar   ÚbN)ÚTableÚCOLSÚtÚcolumnsÚtcÚnameÚAssertionErrorÚ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,t‚t | jd j	|jd j	k¡sNt‚| jd j
dksbt‚| jd jdksvt‚| jd jddiksŽt‚| jd jdks¢t‚| jd  |jd ¡s¼t‚t| jd |jƒsÒt‚| jd jdksæt‚d| jd d< | jd d dk�st‚d	S )
zwAccess TableColumns by position and show that item access returns
        a Column that refers to underlying table datar   r   Údbz%dÚmbZubr   r   N)r   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s4t‚|d d dksHt‚|d jdksZt‚|d d dksnt‚d|d d< | jd d dks�t‚| jd d dks¦t‚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   r   Ztc2r   r   r   Útest_mult_columns9   s    

z'TestTableColumnsItems.test_mult_columnsc                 C   s®   |  |j¡| _| jj| _| jdd… }|d jdks8t‚|d d dksLt‚|d jdks^t‚|d d dksrt‚d|d d< | jd d dks”t‚| jd d dksªt‚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_sliceI   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s2t‚d||< | jd | dksPt‚dS )z'Column access returns REFERENCE to datar
   r   r   N)r   r   r   r   r   r   )r   r   r0   r
   r   r   r   Útest_column\   s    

zTestTableItems.test_columnc                 C   sB  |  |j¡| _| jj| _| j| }|d dks2t‚|| dksBt‚|jd  |jd ¡s\t‚|jd  |jd ¡svt‚|jd  |jd ¡s�t‚d||< || dks¨t‚|d dks¸t‚| jd | dksÎt‚| j| d dksät‚d|d< |d dksüt‚|d dk�st‚| jd d dk�s&t‚| jd d dk�s>t‚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   r0   Úrowr   r   r   Útest_rowg   s$    

zTestTableItems.test_rowc                 C   s’   |  |j¡| _g dt g ¡fD ]n}| j| }|r4t‚t|ƒdksDt‚|d  |jd ¡s\t‚|d  |jd ¡stt‚|d  |jd ¡st‚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#   Úarrayr   Ú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¡sJt‚|d  	|jd ¡sbt‚|d  	|jd ¡szt‚|d  	|jd ¡s’t‚d|d d< t | jd t 
dddg¡k¡sÂt‚|j| jjksÔt‚|j| jjksæt‚t||j ƒsöt‚dS )	z%Table slice returns REFERENCE to datar   r-   r
   r   r   r'   r   N)r   r   r   r   r   r#   r$   ÚDATAr   r   r4   ÚmaskedÚ_column_classr   )r   r   r7   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¡sPt	‚|d  
|jd ¡sht	‚|d  
|jd ¡s€t	‚|d  
|jd ¡s˜t	‚d|d d< t | j ¡ |jk¡s¾t	‚t |d |jd | k¡sÞt	‚|j| jjksðt	‚|j| jjk�st	‚t||j ƒ�st	‚dS )z&Table fancy slice returns COPY of datar   r   r
   r   r   r'   N)r   r   r   r   r   r#   r4   r$   r9   r   r   Úas_arrayÚanyr:   r;   r   ©r   r   Úslicer7   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¡sJt‚|d  	|jd ¡sbt‚|d  	|jd ¡szt‚|d  	|jd ¡s’t‚d|d d< t | j 
¡ |jk¡s¸t‚t |d |jd | k¡sØt‚|j| jjksêt‚|j| jjksüt‚t||j ƒ�st‚dS )z+Table list index slice returns COPY of datar   r   r
   r   r   r'   N)r   r   r   r   r   r#   r$   r9   r   r   r=   r>   r:   r;   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¡sNt‚t |d |jd k¡sjt‚|d  	|jd ¡s‚t‚|d  	|jd ¡sšt‚d|d d< t | j 
¡ |jk¡sÀt‚t |d |jd k¡sÜt‚|j| jjksît‚|j| jjks$t‚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$   r9   r   r   r=   r>   r:   r;   )r   r   r   r7   r   r   r   Útest_select_columnsÆ   s    

z"TestTableItems.test_select_columnsc              	   C   s|   |  |j¡| _t t¡�}| jdg  W 5 Q R X dt|jƒksBt‚t t¡�}| jddg  W 5 Q R X dt|jƒksxt‚dS )z+Selecting a column that doesn't exist failsZxxxxz'xxxx'ZyyyyN)	r   r   r   ÚpytestÚraisesÚKeyErrorÚstrÚvaluer   )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@t‚t |d ddgk¡sZt‚t||j ƒsjt‚t |d dk¡}|| }t|ƒd	ks”t‚t||j ƒs¤t‚d
S )z$Select rows using output of np.wherer
   g      ø?r   r-   r   r)   é   éd   r   N)r   r   r#   Úwherer$   r   r   r5   )r   r   r   Úrowsr7   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#   ÚrandomÚrandintr5   )r   r   r   Zidxsr   r   r   Útest_np_integersõ   s    zTestTableItems.test_np_integersc              	   C   s<   |  |j¡| _| jj| _t t¡� | jd  W 5 Q R X dS )z&Select column name that does not exist)r
   r   N)r   r   r   r   r   rD   rE   Ú
ValueErrorr   r   r   r   Útest_select_bad_columnþ   s    
z%TestTableItems.test_select_bad_columnN)r   r   r   rD   ÚmarkZparametrizer#   Zint64r4   r1   r3   r8   r<   rA   rB   rC   rJ   rO   rS   rU   r   r   r   r   r/   Z   s   


	r/   )	Ú__doc__Únumpyr#   rD   rV   Zusefixturesr   r	   r/   r   r   r   r   Ú<module>   s   

H
