a
    ߙfb                    @   s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl
Z
d dlZd dlmZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlm Z  d dl!m"Z" d dl!m#Z$ d dl%m&Z&m'Z' ddl(m)Z)m*Z* d dl+m,Z, G dd dZ-e
j./dG dd de-Z0e
j./dG dd dZ1e
j./dG dd dZ2e
j./dG dd dZ3e
j./dG dd dZ4e
j./dG dd  d Z5e
j./dG d!d" d"e-Z6e
j./dG d#d$ d$e-Z7e
j./dG d%d& d&e-Z8e
j./dG d'd( d(e-Z9e
j./dG d)d* d*e-Z:e
j./dG d+d, d,e-Z;e
j./dG d-d. d.e-Z<e
j./dG d/d0 d0e-Z=e
j./dG d1d2 d2e-Z>e
j./dG d3d4 d4e-Z?e
j./dG d5d6 d6e-Z@e
j./dG d7d8 d8ZAe
j./dG d9d: d:ZBe
j./dG d;d< d<ZCe
j./dG d=d> d>ZDdd@dAZEdBdC ZFdDdE ZGdFdG ZHdHdI ZIdJdK ZJdLdM ZKdNdO ZLe
j.jMdPdQ ZNG dRdS dSeZOdTdU ZPdVdW ZQe
j.RdXdYdZgd[d\ ZSd]d^ ZTd_d` ZUdadb ZVe
j.WdcG ddde deZXe
j./dG dfdg dge-ZYG dhdi diZZG djdk dkZ[G dldm dmZ\dndo Z]dpdq Z^drds Z_dtdu Z`dvdw Zadxdy Zbdzd{ Zcd|d} Zdd~d Zedd Zfdd Zgdd Zhdd Zidd Zjdd ZkG dd deZldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd ZdS )    )MetaBaseTestN)StringIO)OrderedDict)assert_allcloseassert_array_equal)fits)TableQTableColumnMaskedColumnTableReplaceWarningTableAttribute)!assert_follows_unicode_guidelines)SkyCoord)get_pkg_data_filename)AstropyUserWarning)tableunits)Time	TimeDelta   )MaskedTable
MIXIN_COLS)
HAS_PANDASc                   @   s\   e Zd Zdd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
dS )	SetupDatac                 C   s   |j | _|j| _d S N)r   _table_typer
   _column_typeselftable_types r"   =lib/python3.9/site-packages/astropy/table/tests/test_table.py_setup!   s    zSetupData._setupc                 C   s>   | j d ur:t| ds4| j g ddddg did| _| jS d S )N_ar         a%daar   r   r'   r(      nameformatmeta)r   hasattrr%   r    r"   r"   r#   r)   %   s    



zSetupData.ac                 C   s:   | j d ur6t| ds0| j g dddddid| _| jS d S )N_br-         br*   r+   r   r.   r   r2   r4   r3   r"   r"   r#   r8   .   s    

zSetupData.bc                 C   s0   | j d ur,t| ds&|  g dd| _| jS d S )N_c      	   cr   r2   r:   r3   r"   r"   r#   r?   6   s    

zSetupData.cc                 C   s0   | j d ur,t| ds&|  g dd| _| jS d S )N_d)r<   r=   r<   dr   r2   rA   r3   r"   r"   r#   rB   =   s    

zSetupData.dc                 C   s4   | j d ur0t| ds*| j g dddd| _| jS d S )N_obj)r   stringr(   objOdtype)r   r2   rD   r3   r"   r"   r#   rF   D   s    

zSetupData.objc                 C   s2   | j d ur.t| ds(|  | j| jg| _| jS d S N_t)r   r2   r)   r8   rK   r3   r"   r"   r#   tK   s    

zSetupData.tN)__name__
__module____qualname__r$   propertyr)   r8   r?   rB   rF   rL   r"   r"   r"   r#   r       s   




r   r!   c                   @   s\   e Z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d ZdS )TestSetTableColumnc                 C   s   |  | || j| jg}d|d< |d d dks8J |d d dksLJ |d d dks`J |d d d	kstJ |d d d
ksJ |d d dksJ dS )z Set a row from a tuple of values)      r   r)   r   rR   r'   r(   r8   r-   rS   r7   Nr$   r   r)   r8   r    r!   rL   r"   r"   r#   test_set_rowV   s    
zTestSetTableColumn.test_set_rowc                 C   sT   |  | || j| jg}|d |d< |d d dks<J |d d dksPJ dS )z#Set a row from another existing rowr   r   r'   r6   NrT   rU   r"   r"   r#   test_set_row_existingb   s
    
z(TestSetTableColumn.test_set_row_existingc                 C   s   |  | || j| jg}tt d|d< W d   n1 sD0    Y  tt d|d< W d   n1 sv0    Y  dS )z:Set a row from an incorrectly-sized or typed set of values)rR   rS      r   Nr   r$   r   r)   r8   pytestraises
ValueErrorrU   r"   r"   r#   test_set_row_fail_1j   s    
&z&TestSetTableColumn.test_set_row_fail_1c                 C   sR   |  | || j| jg}tt d|d< W d   n1 sD0    Y  dS )z3Set a row from an incorrectly-typed tuple of values)abcdefr   NrY   rU   r"   r"   r#   test_set_row_fail_2s   s    
z&TestSetTableColumn.test_set_row_fail_2c                 C   sH   |  | | }| j|d< t|d | jks4J |jdgksDJ dS )z?Create a new column in empty table using the item access syntaxr+   N)r$   r   r)   npallcolnamesrU   r"   r"   r#   test_set_new_col_new_tablez   s
    

z-TestSetTableColumn.test_set_new_col_new_tablec                 C   s   |  | | }tg dtj |d< t|d tg dksJJ |d jtjks^J dtj |d< t|d dksJ |d jtjksJ dS )zQCreate a new column (from a quantity) in empty table using the item access syntaxr&   r+   r(   bbN)r$   r   ra   arrayumrb   unitrU   r"   r"   r#   #test_set_new_col_new_table_quantity   s    
 z6TestSetTableColumn.test_set_new_col_new_table_quantityc                 C   s8  |  | || jg}| j|d< t|d | jks:J |jddgksLJ |d j| jjksbJ |d j| jjksxJ |d |d< t|d |d ksJ |jg dksJ |d j|d jksJ |d j|d jksJ |	t
dddd|d< |d jd	ksJ |d d
 dks(J g d|d< t|d tg dksVJ g d|d< t|d tg dksJ d|d< t|d dksJ tg dtj |d< t|d jtg dksJ |d jtjksJ dtj |d< t|d jdksJ |d jtjks4J dS )ECreate a new column in an existing table using the item access syntaxre   r)   r?   )r)   re   r?      r(   r'   rB   )r(   r'   r'   )r   r   r   r   )hellotheworlde)ro   rm   rn   
   fr&   gN)r$   r   r)   r8   ra   rb   rc   r1   r0   r
   arangeZreshapeshaperf   rg   rh   datari   rU   r"   r"   r#   test_set_new_col_existing_table   s6    

""$z2TestSetTableColumn.test_set_new_col_existing_tablec                 C   sL   |  | || jg}tjdg dd}||d< t|d |ksHJ dS rk   r8   r&   r/   rv   N)r$   r   r)   r   r
   ra   rb   r    r!   rL   r8   r"   r"   r#   (test_set_new_unmasked_col_existing_table   s
    
z;TestSetTableColumn.test_set_new_unmasked_col_existing_tablec                 C   sL   |  | || jg}tjdg dd}||d< t|d |ksHJ dS rx   )r$   r   r)   r   r   ra   rb   rz   r"   r"   r#   &test_set_new_masked_col_existing_table   s
    
z9TestSetTableColumn.test_set_new_masked_col_existing_tablec                 C   sR   |  | || jg}tt ddg|d< W d   n1 sD0    Y  dS )zHGenerate failure when creating a new column using the item access syntaxr   r'   r8   N)r$   r   r)   rZ   r[   r\   rU   r"   r"   r#   $test_set_new_col_existing_table_fail   s    
z7TestSetTableColumn.test_set_new_col_existing_table_failN)rM   rN   rO   rV   rW   r]   r`   rd   rj   rw   r{   r|   r}   r"   r"   r"   r#   rQ   S   s   		.rQ   c                   @   sD   e Z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 )TestEmptyDatac                 C   s6   |  }||jdtdd t|d dks2J d S )Nr)   d   )r/   rI   lengthr   
add_columnr
   intlenrU   r"   r"   r#   test_1   s    zTestEmptyData.test_1c                 C   s8   |  }||jdtddd t|d dks4J d S )Nr)   )r(   r   r/   rI   ru   r   r   rU   r"   r"   r#   test_2   s    zTestEmptyData.test_2c                 C   s4   |  }||jdtd t|d dks0J d S )Nr)   r/   rI   r   r   rU   r"   r"   r#   test_3   s    zTestEmptyData.test_3c                 C   s6   |  }||jdtdd t|d dks2J d S )Nr)   r(   r-   )r/   rI   ru   r   r   rU   r"   r"   r#   test_4   s    zTestEmptyData.test_4c                 C   s2   |  }||jdd t|d dks.J d S )Nr)   r/   r   )r   r   r
   r   rU   r"   r"   r#   test_5   s    zTestEmptyData.test_5c                 C   sD   |  }tjtdd |d W d   n1 s60    Y  dS )zTest related to #3811 where setting empty tables to scalar values
        should raise an error instead of having an error raised when accessing
        the table.z2Empty table cannot have column set to scalar valuematchr   N)r   rZ   r[   	TypeErrorr   rU   r"   r"   r#   test_scalar   s    zTestEmptyData.test_scalarc                 C   s:   |  }|g d|d< |dd }|j|jks6J dS )zTest related to #3023 where a MaskedColumn is created with name=None
        and then gets changed to name='a'.  After PR #2790 this test fails
        without the #3023 fix.r&   r)   N)r   r
   rc   r    r!   rL   t2r"   r"   r#   test_add_via_setitem_and_slice   s    z,TestEmptyData.test_add_via_setitem_and_sliceN)
rM   rN   rO   r   r   r   r   r   r   r   r"   r"   r"   r#   r~      s   r~   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestNewFromColumnsc                 C   s   |j dg dd|j dg dtjdg}||}t|d jtg dksTJ t|d jtjg dtjdks|J t|d d tju sJ d S )	Nr)   r&   ry   r8   r5   r/   rv   rI   rH   r   )r
   ra   float32r   rb   rv   rf   typer    r!   colsrL   r"   r"   r#   test_simple  s    
"(zTestNewFromColumns.test_simplec                 C   s   |j dtjg dtjdtjd|j dtjg dtjddg}||}t|d tjg dtjdkspJ t|d tjg dtjdksJ t|d d tju sJ t|d d tju sJ d S )	Nr)   r&   rH   r   r8   r5   ry   r   )	r
   ra   rf   int64Zfloat64r   r   rb   r   r   r"   r"   r#   test_from_np_array  s    
&&z%TestNewFromColumns.test_from_np_arrayc                 C   s\   |j dg dd|j dg ddg}tt || W d    n1 sN0    Y  d S )Nr)   r&   ry   r8   r-   r6   r7   r<   )r
   rZ   r[   r\   r   )r    r!   r   r"   r"   r#   test_size_mismatch  s
    z%TestNewFromColumns.test_size_mismatchc                 C   sj   |j ddgdd}|j ddgd}|j||gdd	}|jdd
gksFJ |||g}|jddgksfJ dS )zHColumn with name=None can init a table whether or not names are suppliedr   r'   r?   )rv   r/   r(   r-   )rv   NrB   namesrB   col1N)r
   r   rc   )r    r!   r?   rB   rL   r"   r"   r#   test_name_none   s    z!TestNewFromColumns.test_name_noneN)rM   rN   rO   r   r   r   r   r"   r"   r"   r#   r     s   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestReversec                 C   sL  | g dg dg}|  t|d tg dks>J t|d tg dks^J |j |dd}t|d tg dksJ t|d tg dksJ |j |d	d}t|d tg dksJ t|d tg dksJ |d t|d tg dks&J t|d tg dksHJ d S )
Nr&   )r)   r8   cccol0r(   r'   r   r   )r   r8   r)   FcopyT)r   reversera   rb   rf   sortr   r"   r"   r#   test_reverse-  s    
      
"zTestReverse.test_reversec                 C   sp   t d}|d }|j||gdd}|  t |d |d d d ksLJ t |d |d d d kslJ d S )N'  r   xyr   r   r   )ra   rt   r   r   rb   )r    r!   r   r   rL   r"   r"   r#   test_reverse_big@  s    
 zTestReverse.test_reverse_bigc                 C   st   t ddgddgdd}tddg|gddgd	}|  t|d ddgksPJ t|d jdddgspJ d
S )z?Test reverse for a mixin with no item assignment, fix for #9836r   r'   r(   r-   degri   r)   scr   N)r   r   r   ra   rb   allcloserato_value)r    r   rL   r"   r"   r#   test_reverse_mixinH  s
    zTestReverse.test_reverse_mixinN)rM   rN   rO   r   r   r   r"   r"   r"   r#   r   *  s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	TestRoundc                 C   sv   | g dg dg dg}|  t|d g dks>J t|d g dksXJ t|d g dksrJ d S )	Nr)   r8   r?   )g(\?gffffff@      @gl?g<,Ԛ@h|?5@r   r         ?       @r   col2)r   r         @r   roundra   rb   rU   r"   r"   r#   test_round_intT  s    
zTestRound.test_round_intc                 C   s~   | g dg dg dg}|ddd t|d g dksFJ t|d g d	ks`J t|d
 g dkszJ d S )Nr   )      ?      @gǘ@r   r   r(   )r   r   r   r   )r   r   r   r   )g+?gCl@r   r   rU   r"   r"   r#   test_round_dict]  s    
zTestRound.test_round_dictc                 C   sL   | g dg}tjtdd |d W d    n1 s>0    Y  d S )Nr&   z,'decimals' argument must be an int or a dictr   g      ?)r   rZ   r[   r\   r   rU   r"   r"   r#   test_round_invalidg  s    zTestRound.test_round_invalidc                 C   sh   dD ]^}t jddg|d}t|g}|d }|jdd t |d dd	gksRJ |d |u sJ qd S )
NZbBhHiIlLqQpPefdgFDGr-      rH   r   r   )Zdecimalsr   rR   )ra   rf   r   r   rb   )r    r!   typecodearrrL   r   r"   r"   r#   test_round_kindl  s    
zTestRound.test_round_kindN)rM   rN   rO   r   r   r   r   r"   r"   r"   r#   r   Q  s   	
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestColumnAccessc                 C   s>   |  }tt |d  W d    n1 s00    Y  d S )Nr)   )r   rZ   r[   KeyErrorrU   r"   r"   r#   r   y  s    zTestColumnAccess.test_1c                 C   sv   |  }||jdg dd t|d tg dks@J tt |d  W d    n1 sh0    Y  d S )Nr)   r&   ry   r8   )	r   r   r
   ra   rb   rf   rZ   r[   r   rU   r"   r"   r#   r   ~  s
     zTestColumnAccess.test_2c                 C   s\   g d}|j dgdgdgg|d}t|| D ]&\}}||jksFJ t||js0J q0d S )Nr   r   r'   r(   r   )r   zipitercolsr/   
isinstancer
   )r    r!   r   rL   r/   colr"   r"   r#   test_itercols  s
    zTestColumnAccess.test_itercolsN)rM   rN   rO   r   r   r   r"   r"   r"   r#   r   v  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestAddLengthc                 C   s(   |  | || jg}|| j d S r   )r$   r   r)   r   r8   rU   r"   r"   r#   test_right_length  s    
zTestAddLength.test_right_lengthc                 C   s^   |  | || jg}tt( ||jdg dd W d    n1 sP0    Y  d S )Nr8   r   ry   r$   r   r)   rZ   r[   r\   r   r
   rU   r"   r"   r#   test_too_long  s    
zTestAddLength.test_too_longc                 C   s^   |  | || jg}tt( ||jdddgd W d    n1 sP0    Y  d S )Nr8   r-   r6   ry   r   rU   r"   r"   r#   test_too_short  s    
zTestAddLength.test_too_shortN)rM   rN   rO   r   r   r   r"   r"   r"   r#   r     s   r   c                   @   sT   e Z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 )TestAddPositionc                 C   s$   |  | | }|| jd d S Nr   r$   r   r   r)   rU   r"   r"   r#   r     s    
zTestAddPosition.test_1c                 C   s$   |  | | }|| jd d S Nr   r   rU   r"   r"   r#   r     s    
zTestAddPosition.test_2c                 C   s$   |  | | }|| jd d S )Nr   r   rU   r"   r"   r#   r     s    
zTestAddPosition.test_3c                 C   sJ   |  | | }tt |d W d    n1 s<0    Y  d S )Nr8   )r$   r   rZ   r[   r\   index_columnrU   r"   r"   r#   r     s    
zTestAddPosition.test_5c                 C   s@   |  | | }|| j || j |jddgks<J d S Nr)   r8   )r$   r   r   r)   r8   rc   rU   r"   r"   r#   test_6  s
    
zTestAddPosition.test_6c                 C   sB   |  | || jg}|| j|d |jddgks>J d S r   r$   r   r)   r   r8   r   rc   rU   r"   r"   r#   test_7  s    
zTestAddPosition.test_7c                 C   sF   |  | || jg}|| j|dd  |jddgksBJ d S )Nr)   r   r8   r   rU   r"   r"   r#   test_8  s    
zTestAddPosition.test_8c                 C   s`   |  | | }|| j || j|dd  || j|d |jg dks\J d S )Nr)   r   r8   )r)   r?   r8   )r$   r   r   r)   r8   r   r?   rc   rU   r"   r"   r#   test_9  s    
zTestAddPosition.test_9c                 C   s^   |  | | }|| j |d}|| j|d  || j| |jg dksZJ d S )Nr)   r   )r?   r)   r8   )r$   r   r   r)   r   r8   r?   rc   )r    r!   rL   Ziar"   r"   r#   test_10  s    

zTestAddPosition.test_10N)rM   rN   rO   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestAddNamec                 C   s   |  | | }|j| jdd |j| jdd |jddgksDJ | jjjdksVJ | jjjdkshJ | }|j|d dd |jdgksJ |jddgksJ |g d}|j|dd |jg dksJ d S )Nr8   r   r)   r?   r&   )r8   r)   r?   )	r$   r   r   r)   r8   rc   infor/   r
   )r    r!   rL   r   r   r"   r"   r#   test_override_name  s    
zTestAddName.test_override_namec                 C   s4   |  }|g d}|| |jdgks0J d S )Nr&   r   )r   r
   r   rc   )r    r!   rL   r   r"   r"   r#   test_default_name  s    
zTestAddName.test_default_nameN)rM   rN   rO   r   r   r"   r"   r"   r#   r     s   r   c                   @   s   e Zd Zdd ZdS )TestInitFromTablec                 C   s  |  | | j}|j}||d |d | jg}| }||d  ||d  || j d|d d< d|d d< ||fD ]0}d|d d< d|d d< d	|d
 d< d|jd jd d< t|d t	g dksJ t|d t	g dksJ t|d t	g dks J t|d t	g dksBJ t|d
 t	g dksdJ |d j
dksxJ |jd jd d dksJ |jd jd d dksJ qdS )zREnsure that using cols from an existing table gives
        a clean copy.
        r)   r8   rR   r   rS   rq   r'      rl   r?   r+   r(   )r   rR   r(   )r-   rS   r7   )r   r'   rq   )r-   r6   r   )r<   r=   rl   N)r$   rL   columnsr   r?   r   r1   ra   rb   rf   r/   )r    r!   rL   r   Zt2aZt2br   r"   r"   r#   test_from_table_cols  s.    
  """z&TestInitFromTable.test_from_table_colsN)rM   rN   rO   r   r"   r"   r"   r#   r     s   r   c                   @   sT   e Z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 )TestAddColumnsc                 C   s>   |  | | }|| j| j| jg |jg dks:J d S )Nr   r$   r   add_columnsr)   r8   r?   rc   rU   r"   r"   r#   test_add_columns1(  s    
z TestAddColumns.test_add_columns1c                 C   sd   |  | || j| jg}|| j| jg |jg dks@J t	|d t
g dks`J d S )Nr)   r8   r?   rB   r?   r;   )r$   r   r)   r8   r   r?   rB   rc   ra   rb   rf   rU   r"   r"   r#   test_add_columns2.  s
    
z TestAddColumns.test_add_columns2c                 C   sL   |  | || j| jg}|j| j| jgddgd |jg dksHJ d S )Nr   r   Zindexes)rB   r)   r?   r8   r$   r   r)   r8   r   r?   rB   rc   rU   r"   r"   r#   test_add_columns35  s    
z TestAddColumns.test_add_columns3c                 C   sL   |  | || j| jg}|j| j| jgddgd |jg dksHJ d S )Nr   r   )r?   rB   r)   r8   r   rU   r"   r"   r#   test_add_columns4;  s    
z TestAddColumns.test_add_columns4c                 C   sL   |  | || j| jg}|j| j| jgddgd |jg dksHJ d S )Nr'   r   r   r   rU   r"   r"   r#   test_add_columns5A  s    
z TestAddColumns.test_add_columns5c                 C   sF   |  | | }|j| j| j| jgg dd |jg dksBJ dS )z(Check that we can override column names.)r8   r?   r)   r   Nr   rU   r"   r"   r#   test_add_columns6G  s    
z TestAddColumns.test_add_columns6c                 C   sH   |  }|g d}|g d}|||g |jddgksDJ dS )z3Check that default names are used when appropriate.r&   )r-   r6   r(   r   r   N)r   r
   r   rc   )r    r!   rL   r   r   r"   r"   r#   test_add_columns7N  s
    z TestAddColumns.test_add_columns7c                 C   s  |  | | }|| j tt( ||jdg dd W d    n1 sV0    Y  |j|jdg dddd || j || j	 |j
g dksJ |j|jdg dddd |j
g dksJ | }|| j tt ||d  W d    n1 s0    Y  |j|d dd d|d d	< |j
g d
ksTJ |j
dgksfJ |d d	 | jd	 ksJ |j|jdg dddd |j
g dksJ d S )Nr)   r   r   r'   ry   TZrename_duplicate)r)   a_1r8   r?   )r)   r   r8   r?   a_2r   r   )r)   r   r8   r?   r   a_3r  q)r)   r   r8   r?   r   r  r  )r$   r   r   r)   rZ   r[   r\   r
   r8   r?   rc   )r    r!   rL   t1r"   r"   r#   test_add_duplicate_columnV  s8    
6.z(TestAddColumns.test_add_duplicate_columnc                 C   s   |  | || j| j| jg}tt: ||j	dg dd|j	dg ddg W d    n1 sj0    Y  |j|j	dg dd|j	dg ddgdd |
| j |jg dksJ d S )Nr)   r   ry   r8   Tr   )r)   r8   r?   r   Zb_1rB   )r$   r   r)   r8   r?   rZ   r[   r\   r   r
   r   rB   rc   rU   r"   r"   r#   test_add_duplicate_columnsx  s    
$z)TestAddColumns.test_add_duplicate_columnsN)rM   rN   rO   r   r   r   r   r   r   r   r  r  r"   r"   r"   r#   r   %  s   "r   c                   @   s   e Zd Zedd Zedd Zedd Ze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d Zdd Zdd  Zd!d" Zd#d$ Zd%S )&
TestAddRowc                 C   s2   | j d ur.t| ds(| j dg dd| _| jS d S )Nr4   r8   )r   ffffff@@ry   r9   r3   r"   r"   r#   r8     s    

zTestAddRow.bc                 C   s2   | j d ur.t| ds(| j dg dd| _| jS d S )Nr:   r?   )789ry   r@   r3   r"   r"   r#   r?     s    

zTestAddRow.cc                 C   s@   | j d ur<t| ds6| j dddgddgddggd	| _| jS d S )
NrA   rB   r   r'   r(   r-   r6   r7   ry   rC   r3   r"   r"   r#   rB     s    

"zTestAddRow.dc                 C   s6   | j d ur2t| ds,|  | j| j| jg| _| jS d S rJ   )r   r2   r)   r8   r?   rK   r3   r"   r"   r#   rL     s    

zTestAddRow.tc                 C   s   |  | |jddd}|  t|d d ddgks>J |d d dksRJ |d d dksfJ |  t|d d	 ddgksJ |d d	 dksJ |d d	 dksJ d S )
Nr   )(2,)iZS4rG   r   rI   r)   r   r8    r?   r   r$   r   add_rowra   rb   rU   r"   r"   r#   test_add_none_to_empty_table  s    
z'TestAddRow.test_add_none_to_empty_tablec                 C   s   |  | |jddd}|ddgddg t|d d	 ddgksJJ |d
 d	 dks^J |d d	 dksrJ |  t|d d d	d	gksJ |d
 d dksJ |d d d	ksJ d S )N)r)   r8   rF   )r  ZS8rG   r  r   r'   rm   ro   r)   r   r8   rF   r  r  rU   r"   r"   r#   test_add_stuff_to_empty_table  s    
z(TestAddRow.test_add_stuff_to_empty_tablec              
   C   s   |  | | j}| j|d< || j| j| j| jg}||d  t|dksRJ t	
|d t	g dksrJ t	|d t	g dsJ t	
|d t	g d	ksJ t	
|d t	d
dgddgddgd
dggksJ d S )NrB   r   r-   r)   r   r'   r(   r   r8   r   r  r  r   r?   r	  r
  r  r	  r   r'   r(   r6   r7   )r$   rL   rB   r   r)   r8   r?   r  r   ra   rb   rf   r   r   r"   r"   r#   test_add_table_row  s    

  zTestAddRow.test_add_table_rowc                 C   s   |  | || j| j| jg}|dddgg t|dksBJ t|d t	g dksbJ t
|d t	g dsJ t|d	 tj	dd
ddggddksJ d S )Nr   r   rq   r-   r)   r  r8   r  rF   rE   r(   rG   rH   )r$   r   r)   r8   rF   r  r   ra   rb   rf   r   rU   r"   r"   r#   test_add_table_row_obj  s    
 z!TestAddRow.test_add_table_row_objc                 C   sj   ddgddggt j }t|g}|ddgt j f t|d ddgddgdd	ggt j ksfJ d S )
Nr   r'   r(   r-   r6   r7   r   i  ip  )rg   rh   r   r	   r  Zkmra   rb   )r    r  qtr"   r"   r#   $test_add_qtable_row_multidimensional  s    z/TestAddRow.test_add_qtable_row_multidimensionalc                 C   s   |  | | j}|d t|dks*J t|d tg dksJJ t|d tg dshJ t|d tg dksJ d S )	N)r-   @1r-   r)   r   r'   r(   r-   r8   r   r  r  r  r?   )r	  r
  r  r  r$   rL   r  r   ra   rb   rf   r   rU   r"   r"   r#   test_add_with_tuple  s    

 zTestAddRow.test_add_with_tuplec                 C   s   |  | | j}|g d t|dks.J t|d tg dksNJ t|d tg dslJ t|d tg dksJ d S )	N)r-   r  10r-   r)   r  r8   r  r?   )r	  r
  r  r   r  rU   r"   r"   r#   test_add_with_list  s    
 zTestAddRow.test_add_with_listc                 C   s   |  | | j}|ddd t|dks0J t|d tg dksPJ t|d tg dsnJ |jrt|d tg d	ksJ n t|d tg d
ksJ d S )Nr-   r  r)   r8   r)   r  r8   r  r?   r  r	  r
  r  r  )	r$   rL   r  r   ra   rb   rf   r   maskedrU   r"   r"   r#   test_add_with_dict  s    
 "zTestAddRow.test_add_with_dictc                 C   s   |  | | j}|  t|dks(J t|d jtg dksJJ t|d tg dshJ t|d jtg dksJ d S )Nr-   r)   )r   r'   r(   r   r8   )r   r  r          r?   r#  )	r$   rL   r  r   ra   rb   rv   rf   r   rU   r"   r"   r#   test_add_with_none  s    
"zTestAddRow.test_add_with_nonec                 C   sL   |  | | j}tt |ddi W d    n1 s>0    Y  d S )NZ
bad_columnr   r$   rL   rZ   r[   r\   r  rU   r"   r"   r#   test_add_missing_column   s    
z"TestAddRow.test_add_missing_columnc                 C   sH   |  | | j}tt |d W d    n1 s:0    Y  d S )Nr   r'   r(  rU   r"   r"   r#   test_wrong_size_tuple  s    
z TestAddRow.test_wrong_size_tuplec                 C   sH   |  | | j}tt |d W d    n1 s:0    Y  d S r   )r$   rL   rZ   r[   r   r  rU   r"   r"   r#   test_wrong_vals_type  s    
zTestAddRow.test_wrong_vals_typec                 C   s   |  | | j}|j|dd}z|g d W n tyB   Y n0 t|dksTJ t| | ksnJ z|g d W n ty   Y n0 t|dksJ t| | ksJ d S )NTr   r  r(   )Zoner'   r(   )	r$   rL   r   r  r\   r   ra   rb   as_array)r    r!   rL   Zt_copyr"   r"   r#   test_add_row_failures  s    
z TestAddRow.test_add_row_failuresc              	   C   s.  |  | dddddgf}tddD ]}ttd|d}|| j| j| j| j	g}|
 }|| ||| |jD ]P}|| jjdkrt|| | || sJ qzt|| | || kszJ qzq$d	D ]V}|| j| j| j| j	g}tt ||| W d
   q1 s0    Y  qd
S )z
        Light testing of Table.insert_row() method.  The deep testing is done via
        the add_row() tests which calls insert_row(index=len(self), ...), so
        here just test that the added index parameter is handled correctly.
        rq   g      D@r   rR   r-   r(   rr   )r-   N)r$   rangera   insertrt   r   r)   r8   r?   rB   r   r  Z
insert_rowrc   rI   kindr   rb   rZ   r[   
IndexError)r    r!   rowindexindicesrL   r   r/   r"   r"   r#   test_insert_table_row%  s     


"z TestAddRow.test_insert_table_rowN)rM   rN   rO   rP   r8   r?   rB   rL   r  r  r  r  r  r  r!  r%  r'  r)  r+  r,  r.  r8  r"   r"   r"   r#   r    s,   



				r  c                   @   s   e Zd Zdd ZdS )TestTableColumnc                 C   s:   |  | | j}|jd }d|d< |d d dks6J d S )Nr)   rq   r'   )r$   rL   r   )r    r!   rL   r)   r"   r"   r#   test_column_viewB  s
    

z TestTableColumn.test_column_viewN)rM   rN   rO   r:  r"   r"   r"   r#   r9  ?  s   r9  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestArrayColumnsc                 C   s`   |  | |jdtddd}|| jg}|| |d jdksFJ |d d jdks\J d S )Nr8   r'   r(   r   r(   r'   r   r$   r
   r   r   r)   r   ru   r    r!   r8   rL   r"   r"   r#   test_1dM  s    

zTestArrayColumns.test_1dc                 C   s`   |  | |jdtddd}|| jg}|| |d jdksFJ |d d jdks\J d S )Nr8   )r'   r-   r(   r   )r(   r'   r-   r   r>  r?  r"   r"   r#   test_2dU  s    

zTestArrayColumns.test_2dc                 C   s`   |  | || jg}|jdtddd}|| |d jdksFJ |d d jdks\J d S )Nr8   )r'   r-   r7   r(   r   )r(   r'   r-   r7   r   )r$   r   r)   r
   r   r   ru   rz   r"   r"   r#   test_3d]  s    

zTestArrayColumns.test_3dN)rM   rN   rO   r@  rA  rB  r"   r"   r"   r#   r;  J  s   r;  c                   @   s   e Zd Zedd Ze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d Zdd Zejdddgeddg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.S )/
TestRemovec                 C   s.   | j d ur*t| ds$|  | jg| _| jS d S rJ   )r   r2   r)   rK   r3   r"   r"   r#   rL   i  s    

zTestRemove.tc                 C   s6   | j d ur2t| ds,|  | j| j| jg| _| jS d S )N_t2)r   r2   r)   r8   r?   rD  r3   r"   r"   r#   r   p  s    

zTestRemove.t2c                 C   sr   |  | | jd | jjg ks&J | j jdks:J | jrDJ t| jd ktjsZJ | jd kjdksnJ d S Nr)   r   )	r$   rL   remove_columnsrc   r-  sizer   ra   ndarrayr   r"   r"   r#   r   w  s    

zTestRemove.test_1c                 C   sn   |  | | j| j | jd | jjdgks6J | jjjdksHJ t	| jd t
g dksjJ d S )Nr)   r8   r8   r5   )r$   rL   r   r8   rF  rc   rI   r   ra   rb   rf   r   r"   r"   r#   r     s    
zTestRemove.test_2c                 C   sR   |  | | jd | jd< d| jj v s.J | jd d| jj vsNJ dS )z}Check remove_columns works for a single column with a name of
        more than one character.  Regression test against #2699r)   Z
new_columnN)r$   rL   r   keysrF  r   r"   r"   r#   r     s
    
zTestRemove.test_3c                 C   sD   |  | tt | jd W d    n1 s60    Y  d S Nr-   )r$   rZ   r[   r4  rL   
remove_rowr   r"   r"   r#   test_remove_nonexistent_row  s    
z&TestRemove.test_remove_nonexistent_rowc                 C   sl   |  | | j| j | j| j | jd | jjg dksFJ t| jd t	ddgkshJ d S )Nr   r   r8   r6   r7   
r$   rL   r   r8   r?   rL  rc   ra   rb   rf   r   r"   r"   r#   test_remove_row_0  s    
zTestRemove.test_remove_row_0c                 C   sl   |  | | j| j | j| j | jd | jjg dksFJ t| jd t	ddgkshJ d S Nr   r   r)   r(   rN  r   r"   r"   r#   test_remove_row_1  s    
zTestRemove.test_remove_row_1c                 C   sl   |  | | j| j | j| j | jd | jjg dksFJ t| jd t	ddgkshJ d S )Nr'   r   r?   r<   r=   rN  r   r"   r"   r#   test_remove_row_2  s    
zTestRemove.test_remove_row_2c                 C   sr   |  | | j| j | j| j | jtddd | jjg dksNJ t	| jd t
dgksnJ d S )Nr   r'   r   r   r?   r>   )r$   rL   r   r8   r?   remove_rowsslicerc   ra   rb   rf   r   r"   r"   r#   test_remove_row_slice  s    
z TestRemove.test_remove_row_slicec                 C   sn   |  | | j| j | j| j | jddg | jjg dksJJ t| jd t	dgksjJ d S )Nr   r'   r   r?   r=   )
r$   rL   r   r8   r?   rS  rc   ra   rb   rf   r   r"   r"   r#   test_remove_row_list  s    
zTestRemove.test_remove_row_listc                 C   sb   |  | | j| j | jddg | jd jdg diksDJ | jjtddgks^J d S )Nr   r'   r)   r+   r,   )r)   r   )r8   r   )r$   rL   r   r8   rS  r1   rI   ra   r   r"   r"   r#   test_remove_row_preserves_meta  s    
z)TestRemove.test_remove_row_preserves_metac                 C   sh   |  | | j| j | j| j | jd= | jjg dksBJ t| jd tddgksdJ d S rP  	r$   rL   r   r8   r?   rc   ra   rb   rf   r   r"   r"   r#   test_delitem_row  s    
zTestRemove.test_delitem_rowidxr   r'   c                 C   sf   |  | | j| j | j| j | j|= | jjg dksBJ t| jd tdgksbJ d S )Nr   r?   r=   rX  )r    r!   rZ  r"   r"   r#   test_delitem_row_list  s    
z TestRemove.test_delitem_row_listc                 C   sj   |  | | j| j | j| j | jdd= | jjg dksFJ t| jd tdgksfJ d S )Nr   r'   r   r?   r>   rX  r   r"   r"   r#   test_delitem_row_slice  s    
z!TestRemove.test_delitem_row_slicec                 C   s@   |  | tt | jd= W d    n1 s20    Y  d S rK  r$   rZ   r[   r4  rL   r   r"   r"   r#   test_delitem_row_fail  s    
z TestRemove.test_delitem_row_failc                 C   s@   |  | tt | jd= W d    n1 s20    Y  d S )Nr   r]  r   r"   r"   r#   test_delitem_row_float  s    
z!TestRemove.test_delitem_row_floatc                 C   sn   |  | | jd= | jjg ks"J | j jdks6J | jr@J t| jd ktjsVJ | jd kjdksjJ d S rE  )r$   rL   rc   r-  rG  r   ra   rH  r   r"   r"   r#   test_delitem1  s    

zTestRemove.test_delitem1c                 C   s*   |  | | jd= | jjddgks&J d S )Nr8   r)   r?   r$   r   rc   r   r"   r"   r#   test_delitem2  s    
zTestRemove.test_delitem2c                 C   s(   |  | | jd= | jjdgks$J d S )Nr"  r?   ra  r   r"   r"   r#   test_delitems  s    
zTestRemove.test_delitemsc                 C   s@   |  | tt | jd= W d    n1 s20    Y  d S r   )r$   rZ   r[   r   rL   r   r"   r"   r#   test_delitem_fail  s    
zTestRemove.test_delitem_failN)rM   rN   rO   rP   rL   r   r   r   r   rM  rO  rQ  rR  rU  rV  rW  rY  rZ   markparametrizera   rf   r[  r\  r^  r_  r`  rb  rc  rd  r"   r"   r"   r#   rC  f  s0   


	

rC  c                   @   s   e Zd Zdd Zdd ZdS )TestKeepc                 C   sx   |  | || j| jg}|g  |jg ks4J | jdksFJ |rNJ t|d kt	j
sbJ |d kjdkstJ d S r   )r$   r   r)   r8   keep_columnsrc   r-  rG  r   ra   rH  rU   r"   r"   r#   r     s    

zTestKeep.test_1c                 C   sj   |  | || j| jg}|d |jdgks6J |jjdksFJ t	|d t
g dksfJ d S )Nr8   rI  r5   )r$   r   r)   r8   rh  rc   rI   r   ra   rb   rf   rU   r"   r"   r#   r     s    

zTestKeep.test_2N)rM   rN   rO   r   r   r"   r"   r"   r#   rg    s   rg  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TestRenamec                 C   sh   |  | || jg}|dd |jdgks4J |jjdksDJ t|d t	g dksdJ d S )Nr)   r8   rI  r&   )
r$   r   r)   rename_columnrc   rI   r   ra   rb   rf   rU   r"   r"   r#   r     s    
zTestRename.test_1c                 C   s   |  | || j| jg}|dd |dd |jddgksFJ |jjdksVJ |jrn|j	jjdksnJ t
|d t
g dksJ t
|d t
g dksJ d S )Nr)   r?   r8   r?   r)   r&   r5   )r$   r   r)   r8   rj  rc   rI   r   r$  maskra   rb   rf   rU   r"   r"   r#   r   &  s    
 zTestRename.test_2c                 C   s   |  | || j| jg}d|d _d|d _|jddgksBJ |jjdksRJ t	|d t
g dksrJ t	|d t
g dksJ d S )Nr?   r)   r8   rk  r&   r5   )r$   r   r)   r8   r/   rc   rI   r   ra   rb   rf   rU   r"   r"   r#   test_rename_by_attr2  s    


 zTestRename.test_rename_by_attrc                 C   s   |  | || j| j| jg}|dd |jg dks>J |ddgddg |jg dksdJ tt	 |dd	g W d    n1 s0    Y  tt
" |d	gddg W d    n1 s0    Y  d S )
Nr   )r+   re   r   re   r   r8   r?   )r+   r8   r?   r+   r)   )r$   r   r)   r8   r?   Zrename_columnsrc   rZ   r[   r   r\   rU   r"   r"   r#   test_rename_columns<  s    
,zTestRename.test_rename_columnsN)rM   rN   rO   r   r   rm  rn  r"   r"   r"   r#   ri    s   
ri  c                   @   s   e Zd Zdd Zejdddgdd Zdd	 Zejd
ddgdd Z	dd Z
dd Zdd Zdd Zdd Zejdddgdd Zdd Zdd Zdd Zd S )!TestSortc              	   C   s  |  }||jdg dd ||jdg dd ||jdg dd t|d tg dkspJ t|d tg dksJ |d t|d tg dksJ t|d tg d	ksJ t|d td
dgddgddggks
J |d t|d tg dks6J t|d tg dksXJ t|d tddgd
dgddggksJ d S )Nr)   r'   r   r(   ry   r8   r7   r6   r-   r?   r*  r   r-   r6   r&   )r6   r7   r-   r(   r-   r   r'   r6   )r(   r   r'   r5   r   r   r
   ra   rb   rf   r   rU   r"   r"   r#   test_singleL  s(      
  
""zTestSort.test_singlecreate_indexFTc              	   C   s  |  }||jdg dd ||jdg dd ||jdg dd t|d tg dkspJ t|d tg dksJ |jddd	 t|d tg d
ksJ t|d tg dksJ t|d tddgddgddggksJ |jddd	 t|d tg dks>J t|d tg dks`J t|d tddgddgddggksJ d S )Nr)   rp  ry   r8   rq  r?   rr  Tr   r   )r-   r7   r6   r-   r6   r   r'   r(   rt  )r    r!   rv  rL   r"   r"   r#   test_single_reverse`  s(        ""zTestSort.test_single_reversec                 C   sr   t d}t |}|j||gdd}|d t |}t |d || ksTJ t |d || ksnJ dS )z2Sort a big-ish table with a non-trivial sort orderr   r   r   r   r   N)ra   rt   Zsinr   r   argsortrb   )r    r!   r   r   rL   rZ  r"   r"   r#   test_single_bigu  s    



zTestSort.test_single_bigr   c                 C   s(   |j g g gddgd}|jd|d d S )NZf4ZU1rH   r   rw  )r   r   )r    r!   r   rL   r"   r"   r#   test_empty_reverse  s    zTestSort.test_empty_reversec                 C   sh  |  }||jdg dd ||jdg dd t|d tg dksXJ t|d tg dksxJ |ddg t|d tg dksJ t|d tg dksJ |ddg t|d tg dksJ t|d tg d	ksJ |d
 t|d tg dksBJ t|d tg dksdJ d S )Nr)   r'   r   r(   r'   r(   r   ry   r8   r7   r6   r-   r(   r6   r-   )r   r   r'   r'   r(   r(   )r-   r6   r(   r7   r-   r6   )r'   r   r(   r   r(   r'   )r(   r-   r-   r6   r6   r7   r"  rt  rU   r"   r"   r#   test_multiple  s         "
"zTestSort.test_multiplec                 C   st  |  }||jdg dd ||jdg dd t|d tg dksXJ t|d tg dksxJ |jddgdd t|d tg dksJ t|d tg d	ksJ |jddgdd t|d tg d
ksJ t|d tg dksJ |jddd t|d tg dksNJ t|d tg d	kspJ d S )Nr)   r|  ry   r8   r}  Trw  )r(   r(   r'   r'   r   r   )r6   r-   r7   r(   r6   r-   )r'   r(   r   r(   r   r'   )r7   r6   r6   r-   r-   r(   r"  rt  rU   r"   r"   r#   test_multiple_reverse  s         ""zTestSort.test_multiple_reversec                 C   s   |  }||jdg dd ||jdg dd ||jdg dd |ddg t|d tg dkgsJ t|d tg d	kgsJ t|d tg d
kgsJ d S )N	firstname   Max   Jo   Johnry   r/      Millerr     Jacksontelrl         )r  r  r  )r  r  r  r  r  rl   r   r   r
   r   ra   rb   rf   rU   r"   r"   r#   test_multiple_with_bytes  s    ""z!TestSort.test_multiple_with_bytesc                 C   s   |  }||jddd dD d ||jddd dD d ||jd	g d
d |ddg t|d tdd dD kgsJ t|d tdd dD kgsJ t|d	 tg dkgsJ d S )Nr  c                 S   s   g | ]}t |qS r"   str.0r   r"   r"   r#   
<listcomp>      z7TestSort.test_multiple_with_unicode.<locals>.<listcomp>MaxJoJohnry   r/   c                 S   s   g | ]}t |qS r"   r  r  r"   r"   r#   r    r  Millerr  Jacksonr  r  c                 S   s   g | ]}t |qS r"   r  r  r"   r"   r#   r    r  )r  r  r  c                 S   s   g | ]}t |qS r"   r  r  r"   r"   r#   r    r  )r  r  r  r  r  rU   r"   r"   r#   test_multiple_with_unicode  s$    z#TestSort.test_multiple_with_unicodec                 C   s   |  }||jdg dd ||jdg dd t| |  ksVJ |d}| jdgd}t|d | |d | ksJ |ddg}| jddgd}t|d | |d | ksJ t|d | |d | ksJ d S )Nr)   r|  ry   r8   r}  )order)r   r   r
   ra   rb   ry  r-  )r    r!   rL   i0i1r"   r"   r#   test_argsort  s    
""zTestSort.test_argsort	add_indexc                 C   s  |  }||jdg dd ||jdg dd |rF|d t|jddtg dksjJ |jddd}tg d	}t|d | |d | ksJ |jddgdd}tg d}t|d | |d | ksJ t|d | |d | ksJ d S )
Nr)   r|  ry   r8   r}  Trw  )r-   r'   r   r(   r   r6   )r-   r'   r(   r   r6   r   )r   r   r
   r  ra   rb   ry  rf   )r    r!   r  rL   r  r  r"   r"   r#   test_argsort_reverse  s    
$""zTestSort.test_argsort_reversec                 C   sz   |  }||jdg dd ||jdg dd ||jdg dd t|ddgtg dksvJ d S )	Nr  r  ry   r/   r  r  r  r'   r   r   r   r   r
   ra   rb   ry  rf   rU   r"   r"   r#   test_argsort_bytes  s
    zTestSort.test_argsort_bytesc                 C   s   |  }||jddd dD d ||jddd dD d ||jd	g d
d t|ddgtg dksJ d S )Nr  c                 S   s   g | ]}t |qS r"   r  r  r"   r"   r#   r    r  z1TestSort.test_argsort_unicode.<locals>.<listcomp>r  ry   r/   c                 S   s   g | ]}t |qS r"   r  r  r"   r"   r#   r    r  r  r  r  r  r  rU   r"   r"   r#   test_argsort_unicode  s    zTestSort.test_argsort_unicodec                 C   s   |j dggdd}|jdgks"J |jjdks2J |d |jdgksLJ |jjdks\J |dd |jdgksxJ |jjdksJ |d |jdgksJ |jjdksJ |dd |jdgksJ |jjd	ksJ d
S )z
        Issue #2039 where renaming fails after any method that calls
        _rebuild_table_column_view (this includes sort and add_row).
        r   )r)   r   r)   r<  r8   rI  r?   )r?   N)r   rc   rI   r   r  rj  r   rU   r"   r"   r#   $test_rebuild_column_view_then_rename  s    

z-TestSort.test_rebuild_column_view_then_renameN)rM   rN   rO   ru  rZ   re  rf  rx  rz  r{  r~  r  r  r  r  r  r  r  r  r"   r"   r"   r#   ro  I  s    




ro  c                   @   s   e Zd Zdd ZdS )TestIteratorc                 C   s   t jg dddgd}||}|jrbtt  |d |d k W d    q1 sV0    Y  n&t||D ]\}}t ||kslJ qld S )N))r'   r   )r(   r7   rs  )r)   i4)r8   r  rH   r   )	ra   rf   r   r$  rZ   r[   r\   r   rb   )r    r!   rB   rL   r5  Znp_rowr"   r"   r#   test_iterator  s    

0zTestIterator.test_iteratorN)rM   rN   rO   r  r"   r"   r"   r#   r    s   r  c                   @   s   e Zd Zdd ZdS )TestSetMetac                 C   sR   |j dd}d|jd< d|jd< d|jd< d|jd< t|j g dksNJ d S )	Nr"  r   r   r)   r8   r?   rB   r   )r   r1   listrJ  )r    r!   rB   r"   r"   r#   test_set_meta  s    



zTestSetMeta.test_set_metaN)rM   rN   rO   r  r"   r"   r"   r#   r    s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestConvertNumpyArrayc                 C   s   |j ddgddggdd}t|}|j turDt|| ksDJ || usTJ |jt|jj	ksjJ tj|dd}|j turt|| ksJ |jt|jj	ksJ t
t" tj|d	d
gd}W d    n1 s0    Y  d S )Nr   r'   r(   r-   r"  r   Fr   )r?   i8)rB   r  rH   )r   ra   rf   r   rb   r-  rc   r  rI   r   rZ   r[   r\   )r    r!   rB   Znp_datar"   r"   r#   test_convert_numpy_array*  s    


z.TestConvertNumpyArray.test_convert_numpy_arrayc                 C   s   d}|t jdk }|D ]}|jddgd|d d}||g}| }|d jj|dfv s^J |jd	d
}||kr|d jj|dfv sJ q|d jj|ksJ qdS )z5Test for https://github.com/astropy/astropy/pull/4080><littler   r   r)   f8r   =TZkeep_byteorderN)sys	byteorderr
   r   r-  rI   )r    r!   Zbyte_ordersZnative_orderr  r   rL   r   r"   r"   r#   test_as_array_byteswap;  s    z,TestConvertNumpyArray.test_as_array_byteswapc                 C   s   dt jdk }tdd}|j|}| }tt|jD ]}|j| j|ks:J q:t	j
|ddx}|d j}|jjD ]}	t||	 ||	 ksvJ qv|jdd}
|jjD ] }	||	 jj|
|	 jjksJ qW d	   n1 s0    Y  d	S )
z
        Test for https://github.com/astropy/astropy/pull/4080, demonstrating
        that FITS tables are converted to native byte order.
        r  r  zdata/tb.fitszastropy.io.fits.testsT)Zcharacter_as_bytesr   r  N)r  r  r   r   readr-  r1  r   rI   r   openrv   r   r   ra   rb   )r    r!   Znon_native_orderfilenamerL   r   rZ  Zhdulrv   ZcolnameZarr2r"   r"   r#   test_byteswap_fits_arrayL  s"    


z.TestConvertNumpyArray.test_byteswap_fits_arrayN)rM   rN   rO   r  r  r  r"   r"   r"   r#   r  '  s   r  Tc                 C   s   | j |j ksJ tj|  |  | j|jks6J t| j |j D ].\}}|rjt	||rzJ qLt	||sLJ qLd S r   )
rc   ra   Ztestingr   r-  r1   r   r   valuesZmay_share_memory)rL   r   deepr   r   r"   r"   r#   _assert_copiesg  s    r  c                  C   s4   t jg dg dgddgd} |  }t| | d S )Nr&   r'   r(   r-   r   r   r   )r   r   r   r  rL   r   r"   r"   r#   	test_copys  s    r  c                  C   sN   t jg dg dgddgdddid} | d jg d	k |  }t| | d S )
Nr&   r  r   r   Tr/   test)r   r$  r1   TFT)r   r   rl  r   r  r  r"   r"   r#   test_copy_maskedy  s    r  c                  C   sN   t jg dg dgddgd} t| }t| }t| |dd t| | d S )Nr&   r  r   r   r   F)r  )r   r   r   deepcopyr  )rL   r   t3r"   r"   r#   test_copy_protocol  s
    

r  c                  C   s   t  } tt | dk W d   n1 s00    Y  tt | dk  W d   n1 sb0    Y  tt | dk W d   n1 s0    Y  tt | dk W d   n1 s0    Y  dS )zQ
    Regression test for #828 - disallow comparison operators on whole Table
    r'   N皙?g      @g)r   r   rZ   r[   r   rL   r"   r"   r#   $test_disallow_inequality_comparisons  s    &&&r  c                  C   s0  ddg} ddg}ddg}t j| ||gg dd}t j| |gddgd}t j }| }tddgd	d
|d< | }tjj|d d< t j }g dt	j
 |d< t j }	tdddd|	d< |	|	}
|
 D ]}t|sJ qtjtdd || W d    n1 s0    Y  tjtdd || W d    n1 sL0    Y  tjtdd |d W d    n1 s0    Y  tjtdd |ddg W d    n1 s0    Y  ||}|jD ]"}t|| ddgksJ q||}|jD ]"}t|| ddgksJ q||}|jD ]"}t|| g dksFJ qF|d}|jD ]"}t|| ddgkszJ qz|ddg}|jD ]"}t|| ddgksJ qt jddgd}||d }t|d ddgksJ t|d ddgks,J d S )Nr   r'   r   r   r)   r8   r   r   cxcsecr0   timer   r   quantityr   r   Zskz1cannot compare tables with different column namesr   zunable to compare column azunable to compare column cT)TTTF)r   r)   )r   r8   rowsr   r   )r   r   table_helperssimple_tabler   r   ra   mar$  rg   rh   r   Zvalues_equalr   rb   rZ   r[   r\   rc   )r   r   Zcol3r  r   r  tmZtm1ZtqZtskZeqskr   eqZeq1Zeq2Zeq3Zeq4rL   r"   r"   r#   test_values_equal_part1  s\    



***.

 

 

 

 
 r  c                  C   s<  t jjg ddd} t| | ks&J t| | kr8J t| | d ktjg dtdks`J t| | d ktjg dtdksJ t jjg ddd}t| |ktjg d	tdksJ t| |ktjg d
tdksJ t| | ktjg d	tdksJ t|  |ktjg d	tdks8J d S )N	
 a b  c  d
 2 c 7.0 0
 2 b 5.0 1z
 2 b 6.0 2
 2 a 4.0 3z
 0 a 0.0 4
 1 b 3.0 5z
 1 a 2.0 6
 1 a 1.0 7asciir  r(   r   r   r   r   r   r   r   r   rH   r   r   r   r   r   r   r   r   	r  r  r  z
 3 b 6.0 2r  z
 0 a 1.0 4r  z
 1 c 2.0 6r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )	r   r   r  ra   rb   anyrf   boolr-  r  r"   r"   r#   test_rows_equal  s    	((	$$*r  c                  C   sz  t jjg ddd} t j| dd} t| | ks4J t| | krFJ t| | d ktjg dtdksnJ t| | d ktjg d	tdksJ t jjg d
dd}t| |ktjg dtdksJ t| |ktjg dtdksJ d| jd d< t| |ktjg dtdks&J t| |ktjg dtdksLJ t| |	 ktjg dtdksvJ d S )Nr  r  r  Tr$  r(   r  rH   r  r  r  r  r)   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )
r   r   r  ra   rb   r  rf   r  rl  r-  r  r"   r"   r#   test_equality_masked  s"    	((	$$&&r  c                  C   sb   t jjg ddd} t j| dd} t jjg ddd}t|  |ktjg dtdks^J d	S )
z
    This highlights a Numpy bug. Once it works, it can be moved into the
    test_equality_masked test. Related Numpy bug report:

      https://github.com/numpy/numpy/issues/3840
    r  r  r  Tr  r  r  rH   N)r   r   r  ra   rb   r-  rf   r  r  r"   r"   r#   test_equality_masked_bugB  s    			r  c                   @   s   e Zd ZejZdZdS )TestMetaTabler"   N)rM   rN   rO   r   r   Z
test_classargsr"   r"   r"   r#   r  k  s   r  c                  C   sZ   t dtrd S d} d}tj| dg|dggdd}| t|v s@J | dt|v sVJ d S )	Nr  u+   астрономическая питонаu*   миллиарды световых летr'   r(   r"  r   utf-8)r   bytesr   r   r  encode)Zstring_aZstring_br)   r"   r"   r#   test_unicode_contentp  s    
r  c                  C   s    t jjg ddd} t|  d S )Nr  r  r  )r   r   r  r   r  r"   r"   r#   test_unicode_policy  s    	
r  uniu   питонаr  c                 C   s  | d}| j|g|gdggdd}|d jjdks8J |d jjdksLJ |d	 jjd
ks`J d|d _d|d _d|d jd< d|d jd< | }|  |d jjdksJ |d jjdksJ |d	 jjd
ksJ |d jdksJ |d jdksJ |d jd dksJ |d jd dks2J t	|d d |ksNJ t	|d d |ksjJ t	|d	 d dksJ | }|
  |d jjdksJ |d jjdksJ |d	 jjd
ksJ |d jdksJ |d jdks J |d jd dksJ |d jd dks0J t	|d d |ksLJ t	|d d |kshJ t	|d	 d dksJ dS )ap  
    Test converting columns to all unicode or all bytestring.  This
    makes two columns, one which is unicode (str in Py3) and one which
    is bytes (UTF-8 encoded).  There are two code paths in the conversions,
    a faster one where the data are actually ASCII and a slower one where
    UTF-8 conversion is required.  This tests both via the ``uni`` param.
    r  r   )SUirH   r   r  r   r  r   r  Zval0valZval1r   N)r  r   rI   r3  descriptionr1   r   Zconvert_unicode_to_bytestringra   rf   Zconvert_bytestring_to_unicode)r!   r  ZbytrL   r  r"   r"   r#   "test_unicode_bytestring_conversion  sB    	


r  c                     s`   t   G  fdddtj} | dg di}t|}|d j|u sFJ ~t  | v s\J dS )zq
    Regression test for the reference cycle discussed in
    https://github.com/astropy/astropy/issues/2877
    c                       s   e Zd Z fddZdS )z&test_table_deletion.<locals>.TestTablec                    s     t|  d S r   )addidr3   Zdeletedr"   r#   __del__  s    z.test_table_deletion.<locals>.TestTable.__del__N)rM   rN   rO   r  r"   r  r"   r#   	TestTable  s   r   r)   r&   N)setr   r   r  Zparent_tablegcZcollect)r   rL   Zthe_idr"   r  r#   test_table_deletion  s    r  c                  C   sX   t jddggdgd} g }| D ]$}| D ]}||d |d f q&q|g dksTJ dS )zZ
    Regression test for issue 3358 where nested iteration over a single table fails.
    r   r   r)   r   ))r   r   )r   r   )r   r   )r   r   N)r   r   append)rL   outZr1Zr2r"   r"   r#   test_nested_iteration  s    r  c                 C   s   |  tg }t|jdks"J tt  |  td}W d    n1 sR0    Y  |  tg d}t|jdksJ d S )Nr   r&   r(   )r   ra   rf   r   r   rZ   r[   r\   )r!   rL   r"   r"   r#   &test_table_init_from_degenerate_arrays  s    .r  znot HAS_PANDASc                   @   s   e Zd Zdd Zejdddgejdg ddd	 Zd
d Zdd Z	ejdddgdd Z
dd Zdd Zejdddgdd Zdd Zdd ZdS )
TestPandasc           
      C   s6  t  }dD ]R}dD ]H}dD ]>}t|| | }tjg d|d}||||| | < qqqg d|d< g d|d< | }|jD ]}|dkrt|d tg dksJ || jtd	ksJ q|dkrt|d tg dksJ || jtd	ksxJ qt|| || ks.J || jj	rX|| j|| jksxJ q|| j|| 
  jksJ q|d
dg  |ddg  t j|}	|jD ]}|dv rt|| |	| ksJ nt|| |	|  || jj	r|| j|	| jks.J n"|| 
  j|	| jksJ qd S )N)r  r  r  )rr   r  )24r
  r&   rH   r   rg   srG   <i4z>i4z<f4z>f4)rg   r  )r   r   ra   rI   rf   newbyteorder	to_pandasr   rb   Zisnativebyteswapfrom_pandasr   )
r    rL   Zendianr3  ZbyterI   r   rB   columnr   r"   r"   r#   r     s>    
 
 "

zTestPandas.test_simpleunsignedrg   r  bits)r=   r       @   c           	      C   s   | d| }t ddgddg|d}t|g}| }|ddd	d
}t|d j|ks`J t|}t|d j|ksJ t|d j	ddgksJ t|d |ksJ d S )Nr   r   r'   FT)rl  rI   r  Irg   r  r   )
r   r   r  replacer  rI   r  ra   rb   rl  )	r    r  r  Znp_dtyper?   rL   dfZpd_dtyper   r"   r"   r#   test_nullable_int2  s    

zTestPandas.test_nullable_intc                 C   s\   t  }g d|d< td|d< tjtdd |  W d    n1 sN0    Y  d S )Nr&   r)   r=  r8   z4Cannot convert a table with multidimensional columnsr   )r   r   ra   ZonesrZ   r[   r\   r  r    rL   r"   r"   r#   rA  @  s    zTestPandas.test_2dc                 C   s  t  }ttD ]}|dst| ||< qtg ddd|d< | }t j|}t	
|d g dslJ t	
|d g d	sJ t	
|d
 g dsJ t	
|d g dsJ t	
|d g dsJ t	
|d g dsJ t	
|d g dsJ t	j
|d g ddddsJ t|d ts0J t	
|d jg dsLJ t	|d jg dksjJ |d jdks~J t|d tsJ t	
|d jg dsJ |d jdksJ d S )NrH  )r   r'   r-   r7   secr  dtr  )r   r   r'   r(   Z	longitude)r&  r         @      @Zlatitude)r  r  g      $@g      &@zskycoord.razskycoord.decZ	arraywrapZ	arrayswapzearthlocation.y)r   it iZ i	 r   r   ZrtolZatolr  )i  i    i  )z2000-01-01T12:00:00.000z2000-12-31T18:00:00.000z2002-01-01T00:00:00.000z2003-01-01T06:00:00.000isot)r   r	   sortedr   
startswithr   r  r   r  ra   r   r   r   jyearrb   r!  r0   value)r    rL   r/   tpr   r"   r"   r#   test_mixin_pandasJ  s,    
 zTestPandas.test_mixin_pandasuse_IndexedTableFTc                 C   s  ddl }G dd dtj}|ddd}|jddgd	d
dd}tddgdd}ddg}|r^|ntj}|||gd
dgd}	|	 }
|st|
j	|ksJ |	jd
d}
t|
j	|ksJ |	
d
 |	 }
t|
j	|ksJ |	d
 jjsJ |	jdd}
t|
j	|ksJ |	jdd}
t|
j	|ks2J tt}|	jdd W d   n1 s`0    Y  dt|jv s~J dS )zTest to_pandas() with different indexing options.

        This also tests the fix for #12014. The exception seen there is
        reproduced here without the fix.
        r   Nc                       s    e Zd ZdZ fddZ  ZS )z5TestPandas.test_to_pandas_index.<locals>.IndexedTablezAlways index the first columnc                    s&   t  j|i | | | jd  d S r   )super__init__r  rc   )r    r  kwargs	__class__r"   r#   r*  w  s    z>TestPandas.test_to_pandas_index.<locals>.IndexedTable.__init__)rM   rN   rO   __doc__r*  __classcell__r"   r"   r,  r#   IndexedTableu  s   r0  r'   r   z
1998-01-01z
2002-01-01zdatetime64[ns]r  )rI   r/   Zfreq  r   r$  r  r   r   r6  TFznot a columnzindex must be None, False)pandasr   r	   Z
RangeIndexZDatetimeIndexr   r  ra   rb   r6  r  r   r7  rZ   r[   r\   r  r%  )r    r(  pdr0  Z	row_indexZtm_indexr  r   	table_clsrL   r&  errr"   r"   r#   test_to_pandas_indexl  s6    

,zTestPandas.test_to_pandas_indexc                 C   s  t g ddd}tg ddd}tjj|d< tjj|d< tj||gddgd}| }t|d 	 g d	kstJ t|d 	 g d	ksJ tj
|}t|d j|jksJ tjj|d j|jd
d
dsJ t|d j|jksJ tjj|d j|jd
d
dsJ d S )Nr&   r  r  r  r   r  r  r   FTFg+=r  )r   r   ra   r  r$  r   r	   r  rb   Zisnullr   r  rl  r   Zjd)r    r  r  rL   r&  r   r"   r"   r#   test_mixin_pandas_masked  s     z#TestPandas.test_mixin_pandas_maskedc                 C   s   t ddgdd}ddg}tj||gddgd	}|jdd
}tj|}|jdgksVJ tjj|dd
}|jddgksxJ t|d j|jsJ d S )Nr1  r   r$  r  r   r'   r  r   r   r2  T)	r   r   r   r  r  rc   ra   r   r$  )r    r  r   rL   r&  r   r"   r"   r#   test_from_pandas_index  s    z!TestPandas.test_from_pandas_indexuse_nullable_intc                 C   s  t jdd}g d|d< g d|d _g d|d< g d|d _g d	|d
< g d|d
 _g d	|d< g d|d _g d|d< g d|d _|r|j|d}n:tjtdd |j|d}W d    n1 s0    Y  t j|}|j	 D  ]\}}t
|j|| jksJ t|| drBt
|j|| jksBJ |jjdkrt
|jr||s||| jjdksJ n|| jjdksJ t|j|| j|j q|jjdv r|j|| jksJ q|  j|| jksJ qd S )NTr  r&   r)   r  r   r8   )FFTr   rg   r8  r  )l    * Dy l   + dx l    i s ZSource)FFF)r;  z/converted column 'a' from int(32|64) to float64r   rl  r  rr   )r  |)r   r   rl  r  rZ   warnsr   r  r   itemsra   rb   rv   r2   rI   r3  r  r   Zastyper  r  r  )r    r;  rL   rB   r   r/   r  r"   r"   r#   test_masking  s@    *zTestPandas.test_maskingc                 C   s(  dd l }dd lm} |g dg dd}tjj||j|jdd}|d j	|jksZJ |d j	|jksnJ t
t( tjj||j|jgd W d    n1 s0    Y  t
t.}tjj||j|j|jdd W d    n1 s0    Y  t|d	ks
J d
|d jjd v s$J d S )Nr   r&   )g?333333?g?)r   rL   r   r   rL   )r   rL   r   r   z{'y'})r3  Zastropy.unitsr   Z	DataFramer   r   r  rh   r  ri   rZ   r[   r   r=  UserWarningr   messager  )r    r4  rg   r  rL   recordr"   r"   r#   
test_units  s    6<zTestPandas.test_unitsc                 C   sZ   g dg dd}t j|dd}|d g d|d _| }|d jd	 d
ksVJ d S )Nr   rq   r   rl   )rv   r6  T)rv   r$  r6  )r   r   r   rv   r   r'   )r   r   r  rl  r  Ziloc)r    rv   rL   r  r"   r"   r#   *test_to_pandas_masked_int_data_with__index  s    
z5TestPandas.test_to_pandas_masked_int_data_with__indexN)rM   rN   rO   r   rZ   re  rf  r  rA  r'  r7  r9  r:  r?  rD  rF  r"   r"   r"   r#   r    s   4
"
.
2r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestReplaceColumnc                 C   s   |  | || j| jg}tjtdd g d|jd< W d   n1 sN0    Y  tjtdd  |dg d W d   n1 s0    Y  tjtdd  |dd	d
g W d   n1 s0    Y  dS )zFRaise exception when trying to replace column via table.columns objectz?Cannot replace column 'a'.  Use Table.replace_column.. instead.r   r&   r)   Nz)column name not there is not in the tablez	not therez,length of new column must match table lengthr   r'   )	r$   r   r)   r8   rZ   r[   r\   r   replace_columnrU   r"   r"   r#   test_fail_replace_column  s    
,.z*TestReplaceColumn.test_fail_replace_columnc                 C   s  |  | || j| jg}|d }|d }g d}||||j|dd|j|ddfD ]|}|d| t|d |ksJ |d |usJ |d |u sJ |jddgksJ |d j	i ksJ |d j
du sZJ qZ|d= t|dksJ ddg|d< t|dksJ dS )	z)Replace existing column with a new columnr)   r8   )r@  g333333@gffffff@r   Nr(   r   r'   )r$   r   r)   r8   r
   rH  ra   rb   rc   r1   r0   r   )r    r!   rL   tatbvalsr   r"   r"   r#   test_replace_column   s*    
z%TestReplaceColumn.test_replace_columnc                 C   sx   |  | || j| jg}|d tt }|dg d W d   n1 sV0    Y  |j	j
d dkstJ dS )z4Replace index column and generate expected exceptionr)   r&   Nr   z#cannot replace a table index column)r$   r   r)   r8   r  rZ   r[   r\   rH  r%  r  )r    r!   rL   r6  r"   r"   r#   test_replace_index_column:  s    

.z+TestReplaceColumn.test_replace_index_columnc                 C   sz   t ddgddggddgd}tdd	g}|jd|d
d |d d |d ksRJ d|d d< |d d |d ksvJ d S )Nr   r'   r(   r-   r)   r8   r   r   r   Fr   r   rq   )r   ra   rf   rH  )r    rL   r)   r"   r"   r#   test_replace_column_no_copyD  s    z-TestReplaceColumn.test_replace_column_no_copyN)rM   rN   rO   rI  rM  rN  rO  r"   r"   r"   r#   rG    s   
rG  c                   @   s   e Zd Zdd Zdd ZdS )%TestQTableColumnConversionCornerCasesc                 C   sH   t ddgddggddgd}tdd	gd
d|d< t|d tjsDJ dS )z%This is a small regression from #8902r   r'   r(   r-   r)   r8   r   r6   r7   rh   r   N)r	   r   r   rg   Quantityr  r"   r"   r#   1test_replace_with_masked_col_with_units_in_qtableN  s    zWTestQTableColumnConversionCornerCases.test_replace_with_masked_col_with_units_in_qtablec                 C   sj   t dtj gg}tjtdd$ tdgtjd|d< W d    n1 sJ0    Y  t|d tsfJ d S )Nr   zconvert it to Quantity failedr   r)   r   )r	   rg   rh   rZ   r=  r   r
   r   r  r"   r"   r#   6test_do_not_replace_string_column_with_units_in_qtableT  s    2z\TestQTableColumnConversionCornerCases.test_do_not_replace_string_column_with_units_in_qtableN)rM   rN   rO   rR  rS  r"   r"   r"   r#   rP  M  s   rP  c                   @   s6   e Zd ZdZG dd dZdd Zdd Zdd	 Zd
S )Test__Astropy_Table__z
    Test initializing a Table subclass from a table-like object that
    implements the __astropy_table__ interface method.
    c                   @   s   e Zd Zdd Zdd ZdS )z!Test__Astropy_Table__.SimpleTablec                 C   s:   g dg dg dt j g| _g d| _tddg| _d S )Nr&   r5   r;   r   )r)   r   )r8   r'   )rg   rh   r   r   r   r1   r3   r"   r"   r#   r*  b  s    
z*Test__Astropy_Table__.SimpleTable.__init__c           	      K   sV   | j \}}}d|j_tj|ddtj|dd|g}dd |D }|||||pP| jdS )Nr?   r)   r   r8   c                 S   s   g | ]}|j jqS r"   )r   r/   r  r   r"   r"   r#   r  o  r  zGTest__Astropy_Table__.SimpleTable.__astropy_table__.<locals>.<listcomp>)r   r   r1   )r   r   r/   r   r
   r   r1   )	r    clsr   r+  r)   r8   r?   r   r   r"   r"   r#   __astropy_table__i  s    z3Test__Astropy_Table__.SimpleTable.__astropy_table__N)rM   rN   rO   r*  rW  r"   r"   r"   r#   SimpleTablea  s   rX  c                 C   sv  t jt jfD ]b}|t ju r"tjnt j}dD ]@}|  }|||dd}|jg dksZJ |jddikslJ t	
|d |jd ksJ t	
|d |jd	 ksJ |t ju r|d
 jn|d
 }t	
|jd j|ksJ t|d t jsJ t|d t jsJ t|d
 |sJ |d
 jtju s.J t||u s@J d|d d< |rf|jd d d	ks,nds,J q,qdS )zEMake a SimpleTable and convert to Table, QTable with copy=False, True)FTextra!)r   
extra_metar   rZ  r)   r   r8   r   r?   r'   rq   N)r   r   r	   rg   rQ  r
   rX  rc   r1   ra   rb   r   r%  r   r   ri   rh   r   )r    r5  Zcol_c_classZcpystrL   rL  r"   r"   r#   test_simple_1r  s$    
z#Test__Astropy_Table__.test_simple_1c                 C   s   |   }tjtjtjg}g d}tdg}tj||||d}|j|ksJJ t	dd t
|j |D slJ |j|jks|J |j|ksJ dS )zATest converting a SimpleTable and changing column names and typesr   )r?   r(   )rI   r   r1   c                 s   s   | ]\}}|j j|u V  qd S r   )rI   r   )r  r   rI   r"   r"   r#   	<genexpr>  s   z6Test__Astropy_Table__.test_simple_2.<locals>.<genexpr>N)rX  ra   Zint32r   Zfloat16r   r   r   rc   rb   r   r   r  r1   )r    r[  Zdtypesr   r1   rL   r"   r"   r#   test_simple_2  s    
z#Test__Astropy_Table__.test_simple_2c                 C   sR   t t"}tjdggdd W d   n1 s20    Y  dt|jv sNJ dS )zgIf extra kwargs provided but without initializing with a table-like
        object, exception is raisedr   rY  )rZ  Nz*__init__() got unexpected keyword argument)rZ   r[   r   r   r   r  r%  )r    r6  r"   r"   r#   test_kwargs_exception  s    0z+Test__Astropy_Table__.test_kwargs_exceptionN)rM   rN   rO   r.  rX  r\  r^  r_  r"   r"   r"   r#   rT  [  s
   rT  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
TestUpdatec                 C   s<   t ddd| _t ddd| _t ddd| _t dd	d| _d S )
Nr&   r)   r   r5   r8   r;   r?   rE  rB   )r
   r)   r8   r?   rB   r3   r"   r"   r#   r$     s    zTestUpdate._setupc                 C   s   |    t| jg}t| jd d g}d}tjt|d || W d    n1 sZ0    Y  |jdgkstJ t	
|d | jksJ |jdgksJ t	
|d | jd d ksJ d S )Nr   z Inconsistent data column lengthsr   r)   r8   r$   r   r)   r8   rZ   r[   r\   updaterc   ra   rb   )r    r  r   msgr"   r"   r#   test_different_lengths  s    (z!TestUpdate.test_different_lengthsc                 C   s   |    t| jg}| jdgd}d}tjt|d || W d    n1 sT0    Y  |jdgksnJ t	
|d | jksJ || jdgdksJ d S )Nr   )r8   r?   z(Inconsistent data column lengths: {1, 3}r   r)   ra  )r    rL   rB   rc  r"   r"   r#   test_invalid_inputs  s    (zTestUpdate.test_invalid_inputsc                 C   s|   |    t| jgddgddd}t| jgddgdd}t|j}|| |jdddgddksjJ |j|ksxJ d S )Nr   Tr   r1   r   r"  )r$   r   r)   r8   r   r  r1   rb  )r    r  r   Zt2metar"   r"   r#   test_metadata_conflict  s    
z!TestUpdate.test_metadata_conflictc                 C   s  |    t| j| jg}t| j| jg}|d  d7  < || |jg dksTJ t|d | jkslJ t|d | jd ksJ t|d | jksJ |jddgksJ t|d | jd ksJ t|d | jksJ t	| jt	| j
d}t|}|| |jg dks$J t|d | jks>J t|d | jksXJ t|d | j
ksrJ ||ksJ |jg dksJ t|d | jksJ t|d | jd ksJ t|d | jksJ d S )	Nr8   r   r   r)   r?   r8   rB   r8   r?   rB   rB   )r$   r   r)   r8   r?   rb  rc   ra   rb   r  rB   r   r  )r    r  r   rB   Zdcr"   r"   r#   test_update  s0    


zTestUpdate.test_updatec                 C   sD  |    t| j| jg}t| j| jg}|j|dd |d  d8  < |jg dksXJ t|d | jkspJ t|d | jd ksJ t|d | jksJ t	| jt	| j
d}|j|dd |d  d	9  < |jg d
ksJ t|d d	| j ksJ t|d | jks&J t|d | j
ks@J d S )NFr   r8   r   r   r)   r?   rh  r'   ri  rB   )r$   r   r)   r8   r?   rb  rc   ra   rb   rf   rB   )r    r  r   rB   r"   r"   r#   test_update_without_copy  s     z#TestUpdate.test_update_without_copyN)	rM   rN   rO   r$   rd  re  rg  rj  rk  r"   r"   r"   r#   r`    s   
r`  c                  C   s  t dgg} dddgi}|| _| j|u s.J | dd }|j| jusJJ |j| jksZJ |jd | jd u srJ t j| dd}|j| jusJ |j| jksJ |jd | jd u sJ t j| dd}|j| jusJ |j| jksJ |jd | jd usJ dS )zk
    Test no copy vs light (key) copy vs deep copy of table meta for different
    situations.  #8404.
    r   r'   NFr   Tr   r   r1   )rL   r1   r   r"   r"   r#   test_table_meta_copy 	  s     rm  c                  C   s  dddgi} dddgi}t jdgg| dd}|j| u s:J t jdgg| d}|j| usZJ |j| kshJ t j||dd}|j|u sJ |j|jksJ t j||d}|j|usJ |j|jksJ t j|di d	}|ji ksJ t j|dd
d	}|j|jksJ t j| dd}|j| u s J |jd | d u s8J t j| d}|j| usTJ |j| ksdJ |jd | d us|J d
S )z
    Test no copy vs light (key) copy vs deep copy of table meta when meta is
    supplied as a table init argument.  #8404.
    r   r'   r(   r-   F)r1   r   rf  T)r   r1   Nrl  )r1   Zmeta2rL   r   r"   r"   r#   "test_table_meta_copy_with_meta_arg	  s0    rn  c                  C   s   g dt j } g d}tj| |gddgd}|d }|d }dg di|j_d|j_|d| d	 t	
|d |ks|J |d |usJ |d |u sJ |jddgksJ |d jjd
u sJ |d jjd
u sJ d
S )z>Replace existing Quantity column with a new column in a QTabler&   r5   r)   r8   r   r+   r,   z%fcmN)rg   rh   r   r	   r   r1   r0   rH  tora   rb   rc   )r)   r8   rL   rJ  rK  r"   r"   r#   test_replace_column_qtableN	  s    rq  c                  C   s   ddgt j } ddg}tj| |gddgd}t|d t js@J |d }dt j |d< t|d ddgt j ksvJ |d |u sJ dd	g|d< t|d dd	gksJ t|d tjsJ |d |usJ d
S )z
    Test table update like ``t['a'] = value``.  This leverages off the
    already well-tested ``replace_column`` and in-place update
    ``t['a'][:] = value``, so this testing is fairly light.
    r   r'   r(   r-   r)   r8   r   r6   r7   N)	rg   rh   r   r	   r   rQ  ra   rb   r
   )r)   r8   rL   rJ  r"   r"   r#   &test_replace_update_column_via_setitemb	  s     rr  c                  C   sh   t jg dg dgddgd} t jdg d$ d| d< g d	| d< W d
   n1 sZ0    Y  d
S )za
    Test warnings related to table replace change in #5556:
    Normal warning-free replace
    r&   r5   r)   r8   r   replace_warningsrefcount
attributesrT  r   rq   rR      N)r   r   confset_tempr  r"   r"   r#   6test_replace_update_column_via_setitem_warnings_normalz	  s    r{  c               	   C   s   t jg dg dgddgd} t jdg d | dd	 }d
|d< t| d g dks`J tjtdd}ddg|d< W d   n1 s0    Y  t	|dksJ W d   n1 s0    Y  dS )zc
    Test warnings related to table replace change in #5556:
    Replace a slice, one warning.
    r&   r5   r)   r8   r   rs  rt  Nr'   r   )r   r   r(   z3replaced column 'a' which looks like an array slicer   rq   rR   r   )
r   r   ry  rz  ra   rb   rZ   r=  r   r   )rL   r   wr"   r"   r#   5test_replace_update_column_via_setitem_warnings_slice	  s    *r}  c               	   C   s   t jg dg dgddgd} d| d _tjtddN}t jd	g d
 g d| d< W d   n1 sl0    Y  W d   n1 s0    Y  t|dksJ dS )zV
    Test warnings related to table replace change in #5556:
    Lost attributes.
    r&   r5   r)   r8   r   rh   z4replaced column 'a' and column attributes \['unit'\]r   rs  rt  rw  Nr   )	r   r   ri   rZ   r=  r   ry  rz  r   )rL   r|  r"   r"   r#   :test_replace_update_column_via_setitem_warnings_attributes	  s    
Hr~  c               	   C   s   t jg dg dgddgd} | d }tjtddN}t jdg d	 g d
| d< W d   n1 sj0    Y  W d   n1 s0    Y  t|dksJ dS )z^
    Test warnings related to table replace change in #5556:
    Reference count changes.
    r&   r5   r)   r8   r   z0replaced column 'a' and the number of referencesr   rs  rt  rw  Nr   )r   r   rZ   r=  r   ry  rz  r   )rL   rJ  r|  r"   r"   r#   8test_replace_update_column_via_setitem_warnings_refcount	  s    Hr  c               	   C   s   ddl m} m} tjg dg dgddgd}tjdd	g d|d< tjt	d
d&}||  }g d|d< W d   n1 s0    Y  t
|dksJ |d j|jd ksJ d|d jv sJ W d   n1 s0    Y  dS )z
    Test warnings related to table replace change in #5556:
    Test 'always' setting that raises warning for any replace.
    r   )currentframegetframeinfor&   r5   r)   r8   r   rs  alwayszreplaced column 'a'r   rw  Nr   Z
test_table)inspectr  r  r   r   ry  rz  rZ   r=  r   r   linenor  )r  r  rL   r|  Z	frameinfor"   r"   r#   6test_replace_update_column_via_setitem_warnings_always	  s    
*r  c               	   C   s   t jg dg dgddgd} | d }d| d _t jdd t jd	g d
^ d| d< || d u slJ g d| d< || d u sJ t| d g dksJ W d   n1 s0    Y  W d   n1 s0    Y  dS )zh
    Test the replace_inplace config option related to #5556.  In this
    case no replace is done.
    r&   r5   r)   r8   r   rh   Zreplace_inplaceTrs  )r  ru  rv  rT  r   rw  N)r   r   ri   ry  rz  ra   rb   )rL   rJ  r"   r"   r#   6test_replace_update_column_via_setitem_replace_inplace	  s    
r  c                  C   s   t jddgdd} | d | j}|d dks2J | dd }|  }t | }||jks^J ||jkslJ ||jkszJ | jd |jd ksJ | jd |jd ksJ | jd |jd ksJ dS )	zbTest whether a new Table inherits the primary_key attribute from
    its parent Table. Issue #4672)r'   r(   r'   r   )r=   r<   r7   r6   r"  r   r)   r   Nr   )r   r   r  Zprimary_keyr   Zloc)rL   Zoriginal_keyr   r  Zt4r"   r"   r#   test_primary_key_is_inherited	  s    

r  c                  C   sR   t jdggdd} t }| j|dd t jj| ddd}|d jdu sNJ dS )	zTest that a char column of a QTable is assigned no unit and not
    a dimensionless unit, otherwise conversion of reader output to
    QTable fails.ABr   z
ascii.ipacr  F)r0   ZguessN)r   r	   r   writer  getvalueri   )r  r  r   r"   r"   r#   1test_qtable_read_for_ipac_table_with_char_columns	  s
    r  c                  C   s<   t jdgdgd} | d }t |d }|d dks8J dS )z~Regression test for issue #8422: passing the last row of a table into
    Table should return a new table containing that row.r*  r   r   r   r   r'   N)r   r   )r  r5  r   r"   r"   r#    test_create_table_from_final_row
  s    r  c                  C   s   g d} t j| dddidd}tjg ddd	gd
}tjg ddgd
}t||jddgdsdJ t||jdgds~J d S )N))r   r   r   )r-   r  r   )r6   ffffff @zr   r/   zfirst table)r  r  S1)r  r   r1   rI   ))r   r   )r-   r  )r6   r  )r)   r  )r8   z<f8rH   ))   x)   y)   z)r?   r  r)   r8   r   r?   )r   r   ra   rf   Zarray_equalr-  )Z	data_rowsr  r)   r8   r"   r"   r#   test_key_values_in_as_array
  s    
r  c                  C   sd  t jg dg dg dgdd} | d  g dks8J t| d  g d | d  g d	ksfJ t| d  d
 tsJ t| d  d
 tsJ t| d  d
 tsJ t jddgddggddgddgggdd} | d  ddgddggksJ | d  ddgddggks J t| d  d
 d
 ts@J t| d  d
 d
 ts`J d S )Nr&   )r  g@gffffff
@)   foo   bar   hellor   r   r)   r8   r?   )foobarrm   r   r   r'   r(   r-   r  r  r  s   worldr)   r?   r  r  rm   ro   )r   r   tolistr   r   r   floatr  r  r"   r"   r#   test_tolist$
  s$     " r  c                   @   s&   e Zd Ze Zeg dZeddZdS )MyTable)defaultr   N)rM   rN   rO   r   r  r  bazr"   r"   r"   r#   r  9
  s   
r  c                  C   s  t tjdksJ tddgg} d| jvs.J | jd u s<J d| jvsJJ | jdksXJ d| jv sfJ | jd | jdgksJ | jdksJ d| _| jdksJ tt	| }|jd u sJ |jdksJ |jdgksJ d ddggfD ]B}t|dddd	}|jdksJ |jdks"J |jdksJ qt|}|jdksJJ |jdksZJ |jdksjJ t|d
dd}|jd
ksJ |jdksJ |jdksJ | `d| jd vsJ | `d| jvsJ d S )Nz#<TableAttribute name=baz default=1>r   r'   Z__attributes__r   r  r(   r  )r  r  r  r6   Zfubar)r  r  )
reprr  r  r1   r  r  r  pickleloadsdumps)rL   r&  rv   r   r  r"   r"   r#   test_table_attribute?
  sB    r  c                  C   sl   t ddggdgdd} t }| j|dd t j| dd}|jd u sJJ |jdgksZJ |jdkshJ d S )Nr   r'   r   r  )r  r  z
ascii.ecsvr  )r  r   r  r  r  r  r  r  )rL   r  r   r"   r"   r#   test_table_attribute_ecsvp
  s    r  c                  C   s   t jtdd  G dd dt} W d    n1 s40    Y  t jtdd  G dd dt}W d    n1 sr0    Y  d S )NzError calling __set_name__r   c                   @   s   e Zd Ze ZdS )z+test_table_attribute_fail.<locals>.MyTable2N)rM   rN   rO   r   descriptionsr"   r"   r"   r#   MyTable2
  s   r  c                   @   s   e Zd Ze ZdS )z+test_table_attribute_fail.<locals>.MyTable3N)rM   rN   rO   r   rc   r"   r"   r"   r#   MyTable3
  s   r  )rZ   r[   RuntimeErrorr   )r  r  r"   r"   r#   test_table_attribute_fail{
  s    .r  c                  C   s   ddgddgg} t jtdd  t| tjgd W d    n1 sD0    Y  t jtdd" t| d	tjid W d    n1 s0    Y  d S )
Nr   r   r+   re   z4sequence of unit values must match number of columnsr   r   z0invalid column name c for setting unit attributer?   )rZ   r[   r\   r   rg   rh   )datr"   r"   r#   test_set_units_fail
  s
    .r  c                  C   s   ddgddgddgg} t jd d f}ttfD ]}t jdd|fD ]}|| |g d	d
}|tu rt|d t jspJ t|d tjsJ t|d tjsJ t|	 |D ]\}}|j
j|u sJ qq>q*d S )Nr   r   r+   re   r(   r-   r  r  r   )r   r   r)   r8   r?   )rg   rh   r   r	   r   rQ  r   r
   r   r   r   ri   )r  Z	exp_unitsrV  r   r  r   ri   r"   r"   r#   test_set_units
  s    r  c                  C   sr   ddgddgg} d}t tfD ]P}ddi|fD ]>}|| |ddgd	}t| |D ]\}}|jj|ksPJ qPq,qd S )
Nr   r   r+   re   )my descriptionNr)   r  r8   )r  r   )r   r	   r   r   r   r  )r  Zexp_descriptionsrV  r  r  r   r  r"   r"   r#   test_set_descriptions
  s    r  c                  C   sn   g d} t j| ddddd }t j| dd|d}t|tjs@J |d jjd u sTJ |d	 jjtju sjJ d S )
N)za,bz,sz1,2z3,4r  r   r'   )r0   
data_startZdata_endr   )r0   r  r   r)   r8   )	r   r  r   r   ZRowr   ri   rg   r  )textr   rL   r"   r"   r#   test_set_units_from_row
  s    r  c                  C   s   t tfD ]z} | jddgdtjtjgddgd}|d jjtju sDJ |d jjtju sZJ |d jjdksnJ |d jjdksJ qd	S )
zTest setting units and descriptions via Table.read.  The test here
    is less comprehensive because the implementation is exactly the same
    as for Table.__init__ (calling Table._set_column_attribute) za bz1 2r  hiZthere)r0   r   r  r)   r8   N)	r   r	   r  rg   rh   r  r   ri   r  )rV  rL   r"   r"   r#    test_set_units_descriptions_read
  s    

r  c                  C   s   t ddgg} ddgg| d< d| d< dg| d< t| d ddgddggksRJ t| d ddgkslJ t| d ddgksJ d	| d d< t| d dd	gksJ d
S )zAExplicitly check re-work of code related to broadcasting in #8933r   r'   r(   r-   r)   r6   r8   r?   rq   N)r   r   ra   rb   r  r"   r"   r#   test_broadcasting_8933
  s    
"r  c                     sj  G dd dt jG dd d} G dd dt j G dd d }G  fd	d
d
t j}t dg}t jdgdgd}dgdgd}|dg}| dgdgd}||||||gg dd}| }	||	d< ||	d< ||	d< ||	d< ||	d< ||	fD ]p}
t|
d  u sJ t|
d u s$J t|
d u s:J t|
d |u sPJ t|
d | u sJ qdS )zTest the refactor and change in column upgrades introduced
    in 95902650f.  This fixes a regression introduced by #8789
    (Change behavior of Table regarding masked columns).c                   @   s   e Zd ZdS )zDtest_custom_masked_column_in_nonmasked_table.<locals>.MyMaskedColumnNrM   rN   rO   r"   r"   r"   r#   MyMaskedColumn
  s   r  c                   @   s   e Zd ZdS )zGtest_custom_masked_column_in_nonmasked_table.<locals>.MySubMaskedColumnNr  r"   r"   r"   r#   MySubMaskedColumn
  s   r  c                   @   s   e Zd ZdS )z>test_custom_masked_column_in_nonmasked_table.<locals>.MyColumnNr  r"   r"   r"   r#   MyColumn
  s   r  c                   @   s   e Zd ZdS )zAtest_custom_masked_column_in_nonmasked_table.<locals>.MySubColumnNr  r"   r"   r"   r#   MySubColumn
  s   r  c                       s   e Zd Z ZZdS )z=test_custom_masked_column_in_nonmasked_table.<locals>.MyTableN)rM   rN   rO   r
   r   r"   r  r  r"   r#   r  
  s   r  r   r'   Trl  r(   r-   r6   )r)   r8   r?   rB   rp   r   r)   r8   r?   rB   rp   N)r   r   r
   r   r   )r  r  r  r)   r8   r?   rB   rp   r  r   rL   r"   r  r#   ,test_custom_masked_column_in_nonmasked_table
  s.    
r  c                  C   s  t ddgtddgddgddgd	d
gd} d	ddgi}| d	 }| d
 }|| d
 j_| d	 t| d	 ddgksvJ t| d
 j	t
jddgsJ t| d
 j	t
jddgsJ | d	 |u sJ | d
 |u sJ d| d
 jjd	 d< |d	 d dksJ dS )zqTest sorting a table that has a mutable column such as SkyCoord.

    In this case the sort is done in-place
    r'   r   r-   r(   r7   r6   zdeg,degr   r)   r   r   r   r   N)r   r   r   r1   r   ra   rb   r   r   r   rg   r   Zdec)rL   r1   rJ  Ztscr"   r"   r#   test_sort_with_mutable_skycoord
  s    *
""r  c                  C   s   t ddgddggddgd} | d }| d }| d jdd	 dddgi}|| d j_| d t| d ddgksxJ t| d ddgksJ || d u sJ || d usJ d
| d jjd d< |d d dksJ dS )z8Test sorting a table that has a non-mutable column.
    r'   r   r(   r-   r)   r8   r   F)r  r   r   N)r   Zsetflagsr   r1   r   ra   rb   )rL   rJ  rK  r1   r"   r"   r#   test_sort_with_non_mutable  s    
r  c                  C   sf  t jjg dg dd} t jjg dg dd}| |g}tj|gdgd}|| g|d< |d jd	kshJ t |d d
 | ksJ t |d d |ksJ t |d d
 j| jksJ t |d d j|jksJ |d jd	ksJ t |d d
 |ksJ t |d d | ks"J t |d d
 j|jksBJ t |d d j| jksbJ dS )zTest the fix for #8977r   r  r  )r(   r-   r6   r8  r)   r   r8   )r'   r(   r   r   N)ra   r  rf   r   r   ru   rb   rl  )Zm0m1ZmcrL   r"   r"   r#   $test_init_with_list_of_masked_arrays(  s     r  c                  C   s^   t ddgg} d| d< td| d< t| d ddgks@J t| d ddgksZJ dS )zcTest the update to how data_to_col works (#8972), using the regression
    example from #8971.
    r   r   r)   r'   r8   N)r   r   ra   r   rb   r  r"   r"   r#   !test_data_to_col_convert_strategyA  s
    r  c                     s  t ddgdd} ddgtj }dtj dg ddtj gd|d | d fd|d | d fg}tj|d|d |d gd< | d | d gd<  d	< d
< td |ksJ td | ksJ td |ksJ td | ksJ t fddtdD sJ tfddtdD sBJ td	 tj	u sZJ d	 j
t
tu stJ td
 tj	u sJ d
 j
t
tu sJ dD ]}| qt dddg}t|dggddd dS )zTest for #9165 to allow adding a list of mixin objects.
    Also test for fix to #9357 where group_by() failed due to
    mixin object not having info.indices set to [].
    r   r'   r  r  r   r  r)   r8   r  m2r   r   c                 3   s"   | ]}d  |  | kV  qdS )r  Nr"   r  Zii)mixed1rL   r"   r#   r]  a  r  z(test_rows_with_mixins.<locals>.<genexpr>c                 3   s"   | ]}d  |  | kV  qdS )r  Nr"   r  )mixed2rL   r"   r#   r]  b  r  )r   r   r   r)   r8   i  mjdZgbt)r  obsr   r  N)r   rg   rh   r   r	   ra   rb   r1  r   r
   rI   objectZgroup_byr   )r  r  r  r/   Zmjdsr"   )r  r  rL   r#   test_rows_with_mixinsL  s6    $$r  c                  C   s   g d} t j| dd}g }g }|ddD ]\}}|| || q*t|d |ks^J t|d |kstJ dd | D }|| ksJ tjtdd	 |d
 W d    n1 s0    Y  d S )Nr&   r5   )r<   r=   r7   r   r  r   r?   r)   c                 S   s   g | ]}|qS r"   r"   )r  r5  r"   r"   r#   r    r  z!test_iterrows.<locals>.<listcomp>zd is not a valid column namer   rB   )	r   r   Ziterrowsr  ra   rb   rZ   r[   r\   )r  rL   Zc_sZa_sr?   r)   r  r"   r"   r#   test_iterrowst  s    
r  c                  C   s   g d} t j| dd}t| tt  s2J t|j tt  sPJ t|j tt  snJ | D ]}t|t jj	svJ qvd S )Nr  r   r  )
r   r   r   r  r   r   r   rJ  r  r
   r  rL   r  r"   r"   r#   test_values_and_types  s    r  c                  C   sX   g d} t j| dd}t| tti  s4J t| D ]}t|ts@J q@d S )N)r&   r5   r;   r   r  )r   r   r   r>  r   r   r  tupler  r"   r"   r#   
test_items  s
    r  c                  C   sl   t  } tt d| _W d    n1 s.0    Y  tt d| _W d    n1 s^0    Y  d S )NZ	fake_readZ
fake_write)r   r   rZ   r[   AttributeErrorr  r  r  r"   r"   r#   test_read_write_not_replaceable  s
    $r  c                  C   s6   t jd} | dd | jD  | jdgks2J d S )Nr   c                 s   s   | ]}|d kr|V  qdS r)   Nr"   rU  r"   r"   r#   r]    r  z3test_keep_columns_with_generator.<locals>.<genexpr>r)   )r   r  r  rh  rc   r  r"   r"   r#    test_keep_columns_with_generator  s    r  c                  C   s8   t jd} | dd | jD  | jddgks4J d S )Nr   c                 s   s   | ]}|d kr|V  qdS r  r"   rU  r"   r"   r#   r]    r  z5test_remove_columns_with_generator.<locals>.<genexpr>r8   r?   )r   r  r  rF  rc   r  r"   r"   r#   "test_remove_columns_with_generator  s    r  c                  C   s   t jd} tjtdd | ddg W d    n1 s>0    Y  tjtdd | g d W d    n1 sz0    Y  d S Nr   zcolumn "d" does not existr   r?   rB   z%columns {'[de]', '[de]'} do not exist)r?   rB   rp   )r   r  r  rZ   r[   r   rh  r  r"   r"   r#   (test_keep_columns_invalid_names_messages  s    ,r  c                  C   s   t jd} tjtdd | ddg W d    n1 s>0    Y  tjtdd | g d W d    n1 sz0    Y  d S r  )r   r  r  rZ   r[   r   rF  r  r"   r"   r#   *test_remove_columns_invalid_names_messages  s    ,r  )T)Z!astropy.utils.tests.test_metadatar   r  r  r   ior   collectionsr   r  rZ   Znumpyra   Znumpy.testingr   r   Z
astropy.ior   Zastropy.tabler   r	   r
   r   r   r   Zastropy.tests.helperr   Zastropy.coordinatesr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   Zastropyr   r   rg   Zastropy.timer   r   Zconftestr   r   Z"astropy.utils.compat.optional_depsr   r   re  ZusefixturesrQ   r~   r   r   r   r   r   r   r   r   r   r  r9  r;  rC  rg  ri  ro  r  r  r  r  r  r  r  r  r  r  r  Zxfailr  r  r  r  rf  r  r  r  r  Zskipifr  rG  rP  rT  r`  rm  rn  rq  rr  r{  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r"   r"   r#   <module>   s
   3
 
-
$
&
$


<
!
#
_
 :



 

-
 B


?

@.5
(
8
  
>G^/	1
+(		