U
    e»{j#¯ ã                   @   s  d dl Z d dlZd dl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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mZmZmZmZmZ d d
lm Z  d dl!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/m0Z0 ej1dd„ ƒZ2G dd„ dƒZ3ej4 5d¡G dd„ de3ƒƒZ6ej4 5d¡G dd„ dƒƒZ7ej4 5d¡G dd„ dƒƒZ8ej4 5d¡G dd„ dƒƒZ9ej4 5d¡G d d!„ d!ƒƒZ:ej4 5d¡G d"d#„ d#ƒƒZ;ej4 5d¡G d$d%„ d%e3ƒƒZ<ej4 5d¡G d&d'„ d'e3ƒƒZ=ej4 5d¡G d(d)„ d)e3ƒƒZ>ej4 5d¡G d*d+„ d+e3ƒƒZ?ej4 5d¡G d,d-„ d-e3ƒƒZ@ej4 5d¡G d.d/„ d/e3ƒƒZAej4 5d¡G d0d1„ d1e3ƒƒZBej4 5d¡G d2d3„ d3e3ƒƒZCej4 5d¡G d4d5„ d5e3ƒƒZDej4 5d¡G d6d7„ d7e3ƒƒZEej4 5d¡G d8d9„ d9e3ƒƒZFej4 5d¡G d:d;„ d;ƒƒZGej4 Hd<i d=d>id=d?ig¡d@dA„ ƒZIej4 5d¡G dBdC„ dCƒƒZJej4 5d¡G dDdE„ dEƒƒZKej4 5d¡G dFdG„ dGƒƒZLdÏdIdJ„ZMdKdL„ ZNdMdN„ ZOdOdP„ ZPdQdR„ ZQdSdT„ ZRdUdV„ ZSdWdX„ ZTej4jUdYdZ„ ƒZVG d[d\„ d\e-ƒZWd]d^„ ZXd_d`„ ZYej4 Hdadbdcg¡ddde„ ƒZZdfdg„ Z[dhdi„ Z\djdk„ Z]ej4j^e' dldm�G dndo„ doƒƒZ_ej4 5d¡G dpdq„ dqe3ƒƒZ`G drds„ dsƒZaG dtdu„ duƒZbG dvdw„ dwƒZcdxdy„ Zddzd{„ Zed|d}„ Zfd~d„ Zgd€d�„ Zhd‚dƒ„ Zid„d…„ Zjd†d‡„ Zkdˆd‰„ ZldŠd‹„ ZmdŒd�„ ZndŽd�„ Zod�d‘„ Zpd’d“„ Zqd”d•„ ZrG d–d—„ d—eƒZsd˜d™„ Ztdšd›„ Zudœd�„ ZvdždŸ„ Zwd d¡„ Zxd¢d£„ Zyd¤d¥„ Zzd¦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ÄdÅ„ ZŠdÆdÇ„ Z‹ej4 HdÈdÉdÊg¡dËdÌ„ ƒZŒdÍdÎ„ Z�dS )Ðé    N)ÚOrderedDict)ÚStringIO)Úassert_allcloseÚassert_array_equal)Útable©Úunits)ÚSkyCoord)Úfits)ÚColumnÚMaskedColumnÚQTableÚTableÚTableAttributeÚTableReplaceWarning)Ú!assert_follows_unicode_guidelines)ÚTimeÚ	TimeDelta)ÚNUMPY_LT_1_25)Ú
HAS_PANDAS)Úget_pkg_data_filename)ÚAstropyUserWarning)ÚMetaBaseTesté   )Ú
MIXIN_COLSÚMaskedTablec                 C   s$   |   dt|ƒ¡ |   dt|ƒ¡ dS )zÂ
    Pytest fixture to run a test case with tilde-prefixed paths.

    In the tilde-path case, environment variables are temporarily
    modified so that '~' resolves to the temp directory.
    ÚHOMEÚUSERPROFILEN)ZsetenvÚstr)ZmonkeypatchZtmp_path© r   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_table.pyÚhome_is_tmpdir'   s    	r!   c                   @   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_typesr   r   r    Ú_setup6   s    zSetupData._setupc              
   C   sF   | j d k	rBt| dƒs<| j dddgdddddddd	gid
�| _| jS d S )NÚ_ar   é   é   Úaú%dÚaar   é   ©ÚnameÚformatÚmeta)r%   Úhasattrr*   ©r'   r   r   r    r-   :   s    

   ÿzSetupData.ac                 C   s<   | j d k	r8t| dƒs2| j dddgddddid	�| _| jS d S )
NÚ_br0   é   é   Úbr.   r/   r   r1   ©r%   r5   r7   r6   r   r   r    r:   C   s    

   ÿzSetupData.bc                 C   s2   | j d k	r.t| dƒs(|   dddgd¡| _| jS d S )NÚ_cé   é   é	   Úc©r%   r5   r<   r6   r   r   r    r@   L   s    

zSetupData.cc                 C   s2   | j d k	r.t| dƒs(|   dddgd¡| _| jS d S )NÚ_dr=   r>   Úd©r%   r5   rB   r6   r   r   r    rC   S   s    

zSetupData.dc                 C   s6   | j d k	r2t| dƒs,| j dddgddd�| _| jS d S )NÚ_objr   Ústringr,   ÚobjÚO©Údtype)r%   r5   rE   r6   r   r   r    rG   Z   s    

zSetupData.objc                 C   s2   | j d k	r.t| dƒs(|   | j| jg¡| _| jS d S ©NÚ_t)r$   r5   r-   r:   rL   r6   r   r   r    Úta   s    

zSetupData.tN)Ú__name__Ú
__module__Ú__qualname__r)   Úpropertyr-   r:   r@   rC   rG   rM   r   r   r   r    r"   5   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s8t‚|d d dksLt‚|d d dks`t‚|d d d	kstt‚|d d d
ksˆt‚|d d dksœt‚dS )z Set a row from a tuple of values)é   é   r   r-   r   rS   r+   r,   r:   r0   rT   r9   N©r)   r   r-   r:   ÚAssertionError©r'   r(   rM   r   r   r    Útest_set_rowk   s    
zTestSetTableColumn.test_set_rowc                 C   sT   |   |¡ | | j| jg¡}|d |d< |d d dks<t‚|d d dksPt‚dS )z#Set a row from another existing rowr   r   r+   r8   NrU   rW   r   r   r    Útest_set_row_existingw   s
    
z(TestSetTableColumn.test_set_row_existingc              	   C   s\   |   |¡ | | j| jg¡}t t¡� d|d< W 5 Q R X t t¡� d|d< W 5 Q R X dS )z:Set a row from an incorrectly-sized or typed set of values)rS   rT   é   r   r   N©r)   r   r-   r:   ÚpytestÚraisesÚ
ValueErrorrW   r   r   r    Útest_set_row_fail_1   s    
z&TestSetTableColumn.test_set_row_fail_1c              	   C   s>   |   |¡ | | j| jg¡}t t¡� d|d< W 5 Q R X dS )z3Set a row from an incorrectly-typed tuple of values)ÚabcÚdefr   Nr[   rW   r   r   r    Útest_set_row_fail_2ˆ   s    
z&TestSetTableColumn.test_set_row_fail_2c                 C   sH   |   |¡ | ¡ }| j|d< t |d | jk¡s4t‚|jdgksDt‚dS )z?Create a new column in empty table using the item access syntaxr/   N)r)   r   r-   ÚnpÚallrV   ÚcolnamesrW   r   r   r    Útest_set_new_col_new_table�   s
    

z-TestSetTableColumn.test_set_new_col_new_tablec                 C   sž   |   |¡ | ¡ }t dddg¡tj |d< t |d t dddg¡k¡sNt‚|d jtjksbt‚dtj |d< t |d dk¡s†t‚|d jtjksšt‚dS )zQCreate a new column (from a quantity) in empty table using the item access syntaxr   r+   r,   r/   ÚbbN)	r)   r   rc   ÚarrayÚuÚmrd   rV   ÚunitrW   r   r   r    Ú#test_set_new_col_new_table_quantity˜   s    
"z6TestSetTableColumn.test_set_new_col_new_table_quantityc                 C   sF  |   |¡ | | jg¡}| j|d< t |d | jk¡s:t‚|jddgksLt‚|d j| jjksbt‚|d j	| jj	ksxt‚|d |d< t |d |d k¡sžt‚|jdddgks²t‚|d j|d jksÊt‚|d j	|d j	ksât‚| 
t d¡ ddd¡¡|d< |d jdk�st‚|d d	 d
k�s*t‚dddg|d< t |d t dddg¡k¡�s\t‚dddg|d< t |d t dddg¡k¡�sŽt‚d|d< t |d dk¡�s®t‚t d
ddg¡tj |d< t |d jt d
ddg¡k¡�sît‚|d jtjk�st‚dtj |d< t |d jdk¡�s,t‚|d jtjk�sBt‚dS )úECreate a new column in an existing table using the item access syntaxrg   r-   r@   é   r,   r+   rC   )r,   r+   r+   )r   r   r   r   ÚhelloZtheÚworldÚeé
   ÚfÚgN)r)   r   r-   r:   rc   rd   rV   re   r4   r3   r   ÚarangeZreshapeÚshaperh   ri   rj   Údatark   rW   r   r   r    Útest_set_new_col_existing_table¥   s6    

$$&z2TestSetTableColumn.test_set_new_col_existing_tablec                 C   sN   |   |¡ | | jg¡}tjddddgd�}||d< t |d |k¡sJt‚dS ©rm   r:   r   r+   r,   ©r2   rw   N)r)   r   r-   r   r   rc   rd   rV   ©r'   r(   rM   r:   r   r   r    Ú(test_set_new_unmasked_col_existing_tableÓ   s
    
z;TestSetTableColumn.test_set_new_unmasked_col_existing_tablec                 C   sN   |   |¡ | | jg¡}tjddddgd�}||d< t |d |k¡sJt‚dS ry   )r)   r   r-   r   r   rc   rd   rV   r{   r   r   r    Ú&test_set_new_masked_col_existing_tableÛ   s
    
z9TestSetTableColumn.test_set_new_masked_col_existing_tablec              	   C   s>   |   |¡ | | jg¡}t t¡� ddg|d< W 5 Q R X dS )zHGenerate failure when creating a new column using the item access syntaxr   r+   r:   N)r)   r   r-   r\   r]   r^   rW   r   r   r    Ú$test_set_new_col_existing_table_failã   s    
z7TestSetTableColumn.test_set_new_col_existing_table_failN)rN   rO   rP   rX   rY   r_   rb   rf   rl   rx   r|   r}   r~   r   r   r   r    rR   i   s   		.rR   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s2t‚d S )Nr-   éd   )r2   rJ   Úlength©r   Ú
add_columnr   ÚintÚlenrV   rW   r   r   r    Útest_1î   s    zTestEmptyData.test_1c                 C   s8   |  ¡ }| |jdtddd�¡ t|d ƒdks4t‚d S )Nr-   )r,   r€   ©r2   rJ   rv   r�   r‚   rW   r   r   r    Útest_2ó   s    zTestEmptyData.test_2c                 C   s4   |  ¡ }| |jdtd�¡ t|d ƒdks0t‚d S )Nr-   ©r2   rJ   r   r‚   rW   r   r   r    Útest_3ø   s    zTestEmptyData.test_3c                 C   s6   |  ¡ }| |jdtdd�¡ t|d ƒdks2t‚d S )Nr-   ©r,   r0   )r2   rJ   rv   r   r‚   rW   r   r   r    Útest_4ý   s    zTestEmptyData.test_4c                 C   s2   |  ¡ }| |jdd�¡ t|d ƒdks.t‚d S )Nr-   ©r2   r   )r   rƒ   r   r…   rV   rW   r   r   r    Útest_5  s    zTestEmptyData.test_5c              	   C   s0   |  ¡ }tjtdd�� | d¡ W 5 Q R X dS )z£Test 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   r\   r]   Ú	TypeErrorrƒ   rW   r   r   r    Útest_scalar  s     ÿzTestEmptyData.test_scalarc                 C   s<   |  ¡ }| dddg¡|d< |dd… }|j|jks8t‚dS )z®Test 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+   r,   r-   N)r   r   re   rV   ©r'   r(   rM   Út2r   r   r    Útest_add_via_setitem_and_slice  s    z,TestEmptyData.test_add_via_setitem_and_sliceN)
rN   rO   rP   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dddgd�|j dddd	gtjd
�g}| |¡}t |d jt dddg¡k¡sZt‚t |d jtjddd	gtjd�k¡s„t‚t|d d ƒtjksžt‚d S )Nr-   r   r+   r,   rz   r:   r0   r8   r9   ©r2   rw   rJ   rI   )	r   rc   Úfloat32r   rd   rw   rh   rV   Útype©r'   r(   ÚcolsrM   r   r   r    Útest_simple  s    þ
$*zTestNewFromColumns.test_simplec                 C   sÖ   |j dtjdddgtjd�tjd�|j dtjdd	d
gtjd�d�g}| |¡}t |d tjdddgtjd�k¡svt‚t |d tjdd	d
gtjd�k¡sžt‚t	|d d ƒtjks¸t‚t	|d d ƒtjksÒt‚d S )Nr-   r   r+   r,   rI   r—   r:   r0   r8   r9   rz   )
r   rc   rh   Úint64Zfloat64r˜   r   rd   rV   r™   rš   r   r   r    Útest_from_np_array'  s      ÿü
((z%TestNewFromColumns.test_from_np_arrayc              	   C   sN   |j ddddgd�|j dddd	d
gd�g}t t¡� | |¡ W 5 Q R X d S )Nr-   r   r+   r,   rz   r:   r0   r8   r9   r=   )r   r\   r]   r^   r   )r'   r(   r›   r   r   r    Útest_size_mismatch4  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sFt‚| ||g¡}|jddgksft‚dS )zHColumn with name=None can init a table whether or not names are suppliedr   r+   r@   )rw   r2   r,   r0   )rw   ©NrC   ©ÚnamesrC   Úcol1N)r   r   re   rV   )r'   r(   r@   rC   rM   r   r   r    Útest_name_none<  s    z!TestNewFromColumns.test_name_noneN)rN   rO   rP   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   sb  |  dddgdddgg¡}| ¡  t |d t dddg¡k¡sDt‚t |d t dddg¡k¡sft‚|j |d	d
�}t |d t dddg¡k¡s–t‚t |d t dddg¡k¡s¸t‚|j |dd
�}t |d t dddg¡k¡sèt‚t |d t dddg¡k¡�st‚| d¡ t |d t dddg¡k¡�s:t‚t |d t dddg¡k¡�s^t‚d S )Nr   r+   r,   r-   r:   ÚccÚcol0r£   F©ÚcopyT)r   Úreverserc   rd   rh   rV   Úsortr“   r   r   r    Útest_reverseH  s"    þÿ"""""$
$zTestReverse.test_reversec                 C   sp   t  d¡}|d }|j||gdd�}| ¡  t  |d |d d d… k¡sLt‚t  |d |d d d… k¡slt‚d S )Né'  r   ©ÚxÚyr¡   r¯   éÿÿÿÿr°   )rc   ru   r   rª   rd   rV   )r'   r(   r¯   r°   rM   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¡sPt‚t |d j d¡ddg¡spt‚d
S )z?Test reverse for a mixin with no item assignment, fix for #9836r   r+   r,   r0   Údeg©rk   r-   Úscr¡   N)	r	   r   rª   rc   rd   rV   ÚallcloseÚraÚto_value)r'   rµ   rM   r   r   r    Útest_reverse_mixing  s
    zTestReverse.test_reverse_mixinN)rN   rO   rP   r¬   r²   r¹   r   r   r   r    r¥   F  s   r¥   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	TestRoundc                 C   s‚   |  dddgdddgddd	gg¡}| ¡  t |d
 dddgk¡sFt‚t |d dddgk¡sbt‚t |d dddgk¡s~t‚d S )Nr-   r:   r@   gÃõ(\�Âñ?gffffff@ç      @çlë§ÿ¬ùñ?çŸ<,Ôšæ@çh‘í|?5@r§   r£   ç      ð?ç       @Úcol2ç      @©r   Úroundrc   rd   rV   rW   r   r   r    Útest_round_intr  s    ýÿzTestRound.test_round_intc                 C   sŠ   |  dddgdddgddd	gg¡}| d
ddœ¡ t |d dddgk¡sNt‚t |d dddgk¡sjt‚t |d ddd	gk¡s†t‚d S )Nr-   r:   r@   ç      ø?ç      @g‚âÇ˜»@r¼   r½   r¾   r   r,   )r£   rÁ   r§   r£   rÀ   r»   rÁ   g+‡ÙÎ÷ñ?g�•C‹lç@rÃ   rW   r   r   r    Útest_round_dict  s    ýÿzTestRound.test_round_dictc              	   C   s:   |  dddgg¡}tjtdd�� | d¡ W 5 Q R X d S )Nr   r+   r,   z,'decimals' argument must be an int or a dictr�   g      à?)r   r\   r]   r^   rÄ   rW   r   r   r    Útest_round_invalid�  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¡sRt‚|d |kst‚qd S )
NZbBhHiIlLqQpPefdgFDGr0   é   rI   r§   r±   )Zdecimalsr   rS   )rc   rh   r   rÄ   rd   rV   )r'   r(   ÚtypecodeÚarrrM   r§   r   r   r    Útest_round_kind”  s    
zTestRound.test_round_kindN)rN   rO   rP   rÅ   rÈ   rÉ   rÍ   r   r   r   r    rº   p  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 5 Q R X d S )Nr-   )r   r\   r]   ÚKeyErrorrW   r   r   r    r†      s    zTestColumnAccess.test_1c              	   C   sf   |  ¡ }| |jddddgd�¡ t |d t dddg¡k¡sDt‚t t	¡� |d  W 5 Q R X d S )Nr-   r   r+   r,   rz   r:   )
r   rƒ   r   rc   rd   rh   rV   r\   r]   rÏ   rW   r   r   r    rˆ   ¥  s
    "zTestColumnAccess.test_2c                 C   s^   dddg}|j dgdgdgg|d�}t|| ¡ ƒD ]&\}}||jksHt‚t||jƒs2t‚q2d S )Nr-   r:   r@   r   r+   r,   r¡   )r   ÚzipÚitercolsr2   rV   Ú
isinstancer   )r'   r(   r¢   rM   r2   Úcolr   r   r    Útest_itercols¬  s
    
zTestColumnAccess.test_itercolsN)rN   rO   rP   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 )ÚTestAddLengthc                 C   s(   |   |¡ | | jg¡}| | j¡ d S r#   )r)   r   r-   rƒ   r:   rW   r   r   r    Útest_right_length¶  s    
zTestAddLength.test_right_lengthc              	   C   sN   |   |¡ | | jg¡}t t¡�" | |jdddddgd�¡ W 5 Q R X d S )Nr:   r0   r8   r9   r=   rz   ©r)   r   r-   r\   r]   r^   rƒ   r   rW   r   r   r    Útest_too_long»  s    
ÿzTestAddLength.test_too_longc              	   C   sJ   |   |¡ | | jg¡}t t¡� | |jdddgd�¡ W 5 Q R X d S )Nr:   r0   r8   rz   r×   rW   r   r   r    Útest_too_shortÃ  s    
zTestAddLength.test_too_shortN)rN   rO   rP   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-   rW   r   r   r    r†   Ì  s    
zTestAddPosition.test_1c                 C   s$   |   |¡ | ¡ }| | jd¡ d S ©Nr   rÜ   rW   r   r   r    rˆ   Ñ  s    
zTestAddPosition.test_2c                 C   s$   |   |¡ | ¡ }| | jd¡ d S )Nr±   rÜ   rW   r   r   r    rŠ   Ö  s    
zTestAddPosition.test_3c              	   C   s6   |   |¡ | ¡ }t t¡� | d¡ W 5 Q R X d S )Nr:   )r)   r   r\   r]   r^   Úindex_columnrW   r   r   r    rŽ   Û  s    
zTestAddPosition.test_5c                 C   s@   |   |¡ | ¡ }| | j¡ | | j¡ |jddgks<t‚d S ©Nr-   r:   )r)   r   rƒ   r-   r:   re   rV   rW   r   r   r    Útest_6á  s
    
zTestAddPosition.test_6c                 C   sB   |   |¡ | | jg¡}| | j| d¡¡ |jddgks>t‚d S rß   ©r)   r   r-   rƒ   r:   rÞ   re   rV   rW   r   r   r    Útest_7è  s    
zTestAddPosition.test_7c                 C   sF   |   |¡ | | jg¡}| | j| d¡d ¡ |jddgksBt‚d S )Nr-   r   r:   rá   rW   r   r   r    Útest_8î  s    
zTestAddPosition.test_8c                 C   sb   |   |¡ | ¡ }| | j¡ | | j| d¡d ¡ | | j| d¡¡ |jdddgks^t‚d S )Nr-   r   r:   r@   )	r)   r   rƒ   r-   r:   rÞ   r@   re   rV   rW   r   r   r    Útest_9ô  s    
zTestAddPosition.test_9c                 C   s`   |   |¡ | ¡ }| | j¡ | d¡}| | j|d ¡ | | j|¡ |jdddgks\t‚d S )Nr-   r   r@   r:   )	r)   r   rƒ   r-   rÞ   r:   r@   re   rV   )r'   r(   rM   Úiar   r   r    Útest_10ü  s    

zTestAddPosition.test_10N)rN   rO   rP   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sDt‚| jjjdksVt‚| jjjdksht‚| ¡ }|j|d dd� |jdgks’t‚|jddgks¤t‚| 	dddg¡}|j|dd� |jdddgksÖt‚d S )Nr:   r�   r-   r@   r   r+   r,   )
r)   r   rƒ   r-   r:   re   rV   Úinfor2   r   )r'   r(   rM   r”   rÓ   r   r   r    Útest_override_name  s    
zTestAddName.test_override_namec                 C   s6   |  ¡ }| dddg¡}| |¡ |jdgks2t‚d S )Nr   r+   r,   r§   )r   r   rƒ   re   rV   )r'   r(   rM   rÓ   r   r   r    Útest_default_name   s    
zTestAddName.test_default_nameN)rN   rO   rP   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 �]<}d|d d< d|d d< d	|d
 d< d|jd jd d< t |d t 	dddg¡k¡sàt
‚t |d t 	dddg¡k¡�st
‚t |d t 	dddg¡k¡�s(t
‚t |d t 	dddg¡k¡�sLt
‚t |d
 t 	ddd	g¡k¡�spt
‚|d jdk�s„t
‚|jd jd d dk�s¢t
‚|jd jd d dks€t
‚q€dS )zREnsure that using cols from an existing table gives
        a clean copy.
        r-   r:   rS   r   rT   rr   r+   é   rn   r@   r/   r,   r0   r9   r8   r=   r>   N)r)   rM   Úcolumnsr   r@   rƒ   r4   rc   rd   rh   rV   r2   )r'   r(   rM   r›   Zt2aZt2br”   r   r   r    Útest_from_table_cols)  s.    
"$$$$z&TestInitFromTable.test_from_table_colsN)rN   rO   rP   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dddgks<t‚d S )Nr-   r:   r@   ©r)   r   Úadd_columnsr-   r:   r@   re   rV   rW   r   r   r    Útest_add_columns1L  s    
z TestAddColumns.test_add_columns1c                 C   sj   |   |¡ | | j| jg¡}| | j| jg¡ |jddddgksDt‚t	 
|d t	 dddg¡k¡sft‚d S )Nr-   r:   r@   rC   r=   r>   r?   )r)   r   r-   r:   rñ   r@   rC   re   rV   rc   rd   rh   rW   r   r   r    Útest_add_columns2R  s
    
z TestAddColumns.test_add_columns2c                 C   sP   |   |¡ | | j| jg¡}|j| j| jgddgd� |jddddgksLt‚d S )Nr   r   ©ZindexesrC   r-   r@   r:   ©	r)   r   r-   r:   rñ   r@   rC   re   rV   rW   r   r   r    Útest_add_columns3Y  s    
z TestAddColumns.test_add_columns3c                 C   sP   |   |¡ | | j| jg¡}|j| j| jgddgd� |jddddgksLt‚d S )Nr   rô   r@   rC   r-   r:   rõ   rW   r   r   r    Útest_add_columns4_  s    
z TestAddColumns.test_add_columns4c                 C   sP   |   |¡ | | j| jg¡}|j| j| jgddgd� |jddddgksLt‚d S )Nr+   rô   r-   r:   r@   rC   rõ   rW   r   r   r    Útest_add_columns5e  s    
z TestAddColumns.test_add_columns5c                 C   sJ   |   |¡ | ¡ }|j| j| j| jgdddgd� |jdddgksFt‚dS )z(Check that we can override column names.r:   r@   r-   r¡   Nrð   rW   r   r   r    Útest_add_columns6k  s    
 z TestAddColumns.test_add_columns6c                 C   sL   |  ¡ }| dddg¡}| dddg¡}| ||g¡ |jddgksHt‚dS )	z3Check that default names are used when appropriate.r   r+   r,   r0   r8   r§   r£   N)r   r   rñ   re   rV   )r'   r(   rM   r§   r£   r   r   r    Útest_add_columns7r  s
    z TestAddColumns.test_add_columns7c              	   C   s°  |   |¡ | ¡ }| | j¡ t t¡�  | |jddddgd�¡ W 5 Q R X |j|jddddgd�dd� | | j¡ | | j	¡ |j
ddd	d
gksšt‚|j|jddddgd�dd� |j
ddd	d
dgksÐt‚| ¡ }| | j¡ t t¡� | |d ¡ W 5 Q R X |j|d dd� d|d d< |j
ddd	d
ddgk�sBt‚|j
dgk�sTt‚|d d | jd k�spt‚|j|jddddgd�dd� |j
ddd	d
dddgk�s¬t‚d S )Nr-   r   r   r+   rz   T©Zrename_duplicateÚa_1r:   r@   Za_2r€   Za_3Úq)r)   r   rƒ   r-   r\   r]   r^   r   r:   r@   re   rV   )r'   r(   rM   Út1r   r   r    Útest_add_duplicate_columnz  s>    
$ ÿ ÿ ÿz(TestAddColumns.test_add_duplicate_columnc              	   C   sÀ   |   |¡ | | j| j| jg¡}t t¡�4 | |j	ddddgd�|j	ddddgd�g¡ W 5 Q R X |j|j	ddddgd�|j	ddddgd�gdd� | 
| j¡ |jddd	d
ddgks¼t‚d S )Nr-   r   r   r+   rz   r:   Trû   r@   rü   Zb_1rC   )r)   r   r-   r:   r@   r\   r]   r^   rñ   r   rƒ   rC   re   rV   rW   r   r   r    Útest_add_duplicate_columnsŸ  s     
þÿþûz)TestAddColumns.test_add_duplicate_columnsN)rN   rO   rP   rò   ró   rö   r÷   rø   rù   rú   rÿ   r   r   r   r   r    rï   J  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   s4   | j d k	r0t| dƒs*| j ddddgd�| _| jS d S )Nr7   r:   rÂ   çffffff@çÍÌÌÌÌÌ@rz   r;   r6   r   r   r    r:   ¶  s    

zTestAddRow.bc                 C   s4   | j d k	r0t| dƒs*| j ddddgd�| _| jS d S )Nr<   r@   Ú7Ú8Ú9rz   rA   r6   r   r   r    r@   ½  s    

zTestAddRow.cc                 C   s@   | j d k	r<t| dƒs6| j dddgddgddggd	�| _| jS d S )
NrB   rC   r   r+   r,   r0   r8   r9   rz   rD   r6   r   r   r    rC   Ä  s    

"zTestAddRow.dc                 C   s6   | j d k	r2t| dƒs,|   | j| j| jg¡| _| jS d S rK   )r$   r5   r-   r:   r@   rL   r6   r   r   r    rM   Ë  s    

zTestAddRow.tc                 C   s¸   |   |¡ |jddd�}| ¡  t |d d ddgk¡s>t‚|d d dksRt‚|d d dksft‚| ¡  t |d d	 ddgk¡sŒt‚|d d	 dks t‚|d d	 dks´t‚d S )
N©r-   r:   r@   )ú(2,)iZS4rH   ©r¢   rJ   r-   r   r:   Ú r@   r   ©r)   r   Úadd_rowrc   rd   rV   rW   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¡sJt‚|d
 d	 dks^t‚|d d	 dksrt‚| ¡  t |d d d	d	gk¡s˜t‚|d
 d dks¬t‚|d d d	ksÀt‚d S )N)r-   r:   rG   )r  ZS8rH   r	  r   r+   ro   rp   r-   r   r:   rG   r
  r  rW   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sRt	‚t
 |d t
 ddddg¡k¡svt	‚t
 |d t
 d	d
dd	g¡¡s˜t	‚t
 |d t
 ddddg¡k¡s¼t	‚t
 |d t
 ddgddgddgddgg¡k¡sðt	‚d S )NrC   r   r0   r-   r   r+   r,   r:   rÂ   r  r  r@   r  r  r  r8   r9   )r)   rM   rC   r   r-   r:   r@   r  r…   rV   rc   rd   rh   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sBt‚t 	|d t 
ddddg¡k¡sft‚t |d t 
dd	d
dg¡¡sˆt‚t 	|d tj
ddddggdd�k¡s²t‚d S )Nr   rÂ   rr   r0   r-   r+   r,   r:   r  r  rG   rF   rH   rI   )r)   r   r-   r:   rG   r  r…   rV   rc   rd   rh   r¶   rW   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¡sft‚d S )
Nr   r+   r,   r0   r8   r9   r§   iˆ  ip  )	ri   rj   r   r   r  Úkmrc   rd   rV   )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*t‚t |d t ddddg¡k¡sNt‚t |d t dd	d
dg¡¡spt‚t |d t ddddg¡k¡s”t‚d S )N)r0   çÍÌÌÌÌÌ@Ú1r0   r-   r   r+   r,   r:   rÂ   r  r  r  r@   r  r  r  r  ©	r)   rM   r  r…   rV   rc   rd   rh   r¶   rW   r   r   r    Útest_add_with_tuple  s    

$"zTestAddRow.test_add_with_tuplec              	   C   sž   |   |¡ | j}| dddg¡ t|ƒdks0t‚t |d t ddddg¡k¡sTt‚t |d t d	d
ddg¡¡svt‚t |d t ddddg¡k¡sšt‚d S )Nr0   r  Ú10r-   r   r+   r,   r:   rÂ   r  r  r@   r  r  r  r  rW   r   r   r    Útest_add_with_list  s    
$"zTestAddRow.test_add_with_listc              	   C   sÊ   |   |¡ | j}| dddœ¡ t|ƒdks0t‚t |d t ddddg¡k¡sTt‚t |d t d	d
ddg¡¡svt‚|j	r¢t |d t ddddg¡k¡sÆt‚n$t |d t ddddg¡k¡sÆt‚d S )Nr0   r  ©r-   r:   r-   r   r+   r,   r:   rÂ   r  r  r@   r  r  r  r
  )
r)   rM   r  r…   rV   rc   rd   rh   r¶   ÚmaskedrW   r   r   r    Útest_add_with_dict  s    
$"&zTestAddRow.test_add_with_dictc              	   C   sš   |   |¡ | j}| ¡  t|ƒdks(t‚t |d jt ddddg¡k¡sNt‚t 	|d t dd	d
dg¡¡spt‚t |d jt ddddg¡k¡s–t‚d S )Nr0   r-   r   r+   r,   r   r:   rÂ   r  r  ç        r@   r  r  r  r
  )
r)   rM   r  r…   rV   rc   rd   rw   rh   r¶   rW   r   r   r    Útest_add_with_none%  s    
&"zTestAddRow.test_add_with_nonec              	   C   s8   |   |¡ | j}t t¡� | ddi¡ W 5 Q R X d S )NZ
bad_columnr   ©r)   rM   r\   r]   r^   r  rW   r   r   r    Útest_add_missing_column.  s    
z"TestAddRow.test_add_missing_columnc              	   C   s4   |   |¡ | j}t t¡� | d¡ W 5 Q R X d S )N©r   r+   r  rW   r   r   r    Útest_wrong_size_tuple4  s    
z TestAddRow.test_wrong_size_tuplec              	   C   s4   |   |¡ | j}t t¡� | d¡ W 5 Q R X d S rÝ   )r)   rM   r\   r]   r‘   r  rW   r   r   r    Útest_wrong_vals_type:  s    
zTestAddRow.test_wrong_vals_typec                 C   sÌ   |   |¡ | j}|j|dd�}z| ddddg¡ W n tk
rH   Y nX t|ƒdksZt‚t | 	¡ | 	¡ k¡stt‚z| dddg¡ W n tk
rœ   Y nX t|ƒdks®t‚t | 	¡ | 	¡ k¡sÈt‚d S )NTr¨   r   r+   r,   r0   Úone)
r)   rM   r   r  r^   r…   rV   rc   rd   Úas_array)r'   r(   rM   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r¬t || | || ¡sÊt‚qzt || | || k¡szt‚qzq$d	D ]@}| | j| j| j| j	g¡}t t¡� | ||¡ W 5 Q R X qÒd
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.
        rr   g      D@r¯   rS   éýÿÿÿr0   r,   rs   )éüÿÿÿr0   N)r)   Úrangerc   Úinsertru   r   r-   r:   r@   rC   r©   r  Z
insert_rowre   rJ   Úkindr¶   rV   rd   r\   r]   Ú
IndexError)r'   r(   ÚrowÚindexÚindicesrM   r”   r2   r   r   r    Útest_insert_table_rowS  s     


"z TestAddRow.test_insert_table_rowN)rN   rO   rP   rQ   r:   r@   rC   rM   r  r  r  r  r  r  r  r  r  r   r"  r#  r&  r0  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s6t‚d S )Nr-   rr   r+   )r)   rM   rí   rV   )r'   r(   rM   r-   r   r   r    Útest_column_viewo  s
    

z TestTableColumn.test_column_viewN)rN   rO   rP   r2  r   r   r   r    r1  m  s   r1  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sFt‚|d d jdks\t‚d S )Nr:   ©r+   r,   r‡   ©r,   r+   r   ©r)   r   r„   r   r-   rƒ   rv   rV   ©r'   r(   r:   rM   r   r   r    Útest_1dy  s    

zTestArrayColumns.test_1dc                 C   s`   |   |¡ |jdtddd�}| | jg¡}| |¡ |d jdksFt‚|d d jdks\t‚d S )Nr:   )r+   r0   r,   r‡   )r,   r+   r0   r   r6  r7  r   r   r    Útest_2d�  s    

zTestArrayColumns.test_2dc                 C   s`   |   |¡ | | jg¡}|jdtddd�}| |¡ |d jdksFt‚|d d jdks\t‚d S )Nr:   )r+   r0   r9   r,   r‡   )r,   r+   r0   r9   r   )r)   r   r-   r   r„   rƒ   rv   rV   r{   r   r   r    Útest_3d‰  s    

zTestArrayColumns.test_3dN)rN   rO   rP   r8  r9  r:  r   r   r   r    r3  w  s   r3  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 k	r*t| dƒs$|   | jg¡| _| jS d S rK   )r$   r5   r-   rL   r6   r   r   r    rM   ”  s    

zTestRemove.tc                 C   s6   | j d k	r2t| dƒs,|   | j| j| jg¡| _| jS d S )NÚ_t2)r$   r5   r-   r:   r@   r<  r6   r   r   r    r”   ›  s    

zTestRemove.t2c                 C   sr   |   |¡ | j d¡ | jjg ks&t‚| j ¡ jdks:t‚| jrDt‚t| jd ktj	ƒsZt‚| jd kjdksnt‚d S ©Nr-   r   )
r)   rM   Úremove_columnsre   rV   r%  ÚsizerÒ   rc   Úndarrayr&   r   r   r    r†   ¢  s    

zTestRemove.test_1c                 C   sp   |   |¡ | j | j¡ | j d¡ | jjdgks6t‚| jjjdksHt‚t	 
| jd t	 dddg¡k¡slt‚d S )Nr-   r:   ©r:   r0   r8   r9   )r)   rM   rƒ   r:   r>  re   rV   rJ   r¢   rc   rd   rh   r&   r   r   r    rˆ   ¬  s    
zTestRemove.test_2c                 C   sR   |   |¡ | jd | jd< d| jj ¡ ks.t‚| j d¡ d| jj ¡ ksNt‚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)   rM   rí   ÚkeysrV   r>  r&   r   r   r    rŠ   ´  s
    
zTestRemove.test_3c              	   C   s0   |   |¡ t t¡� | j d¡ W 5 Q R X d S ©Nr0   )r)   r\   r]   r,  rM   Ú
remove_rowr&   r   r   r    Útest_remove_nonexistent_row½  s    
z&TestRemove.test_remove_nonexistent_rowc                 C   sn   |   |¡ | j | j¡ | j | j¡ | j d¡ | jjdddgksHt‚t 	| jd t 
ddg¡k¡sjt‚d S )Nr   r-   r:   r@   r8   r9   ©r)   rM   rƒ   r:   r@   rD  re   rV   rc   rd   rh   r&   r   r   r    Útest_remove_row_0Â  s    
zTestRemove.test_remove_row_0c                 C   sn   |   |¡ | j | j¡ | j | j¡ | j d¡ | jjdddgksHt‚t 	| jd t 
ddg¡k¡sjt‚d S ©Nr   r-   r:   r@   r,   rF  r&   r   r   r    Útest_remove_row_1Ê  s    
zTestRemove.test_remove_row_1c                 C   sn   |   |¡ | j | j¡ | j | j¡ | j d¡ | jjdddgksHt‚t 	| jd t 
ddg¡k¡sjt‚d S )Nr+   r-   r:   r@   r=   r>   rF  r&   r   r   r    Útest_remove_row_2Ò  s    
zTestRemove.test_remove_row_2c                 C   st   |   |¡ | j | j¡ | j | j¡ | j tdddƒ¡ | jjdddgksPt‚t	 
| jd t	 dg¡k¡spt‚d S )Nr   r+   r   r-   r:   r@   r?   )r)   rM   rƒ   r:   r@   Úremove_rowsÚslicere   rV   rc   rd   rh   r&   r   r   r    Útest_remove_row_sliceÚ  s    
z TestRemove.test_remove_row_slicec                 C   sp   |   |¡ | j | j¡ | j | j¡ | j ddg¡ | jjdddgksLt‚t 	| jd t 
dg¡k¡slt‚d S )Nr   r+   r-   r:   r@   r>   )r)   rM   rƒ   r:   r@   rK  re   rV   rc   rd   rh   r&   r   r   r    Útest_remove_row_listâ  s    
zTestRemove.test_remove_row_listc                 C   sh   |   |¡ | j | j¡ | j ddg¡ | jd jddddddgiksJt‚| jjt dd	g¡ksdt‚d S )
Nr   r+   r-   r/   r   r,   r0   )r-   r„   )r:   r„   )	r)   rM   rƒ   r:   rK  r4   rV   rJ   rc   r&   r   r   r    Útest_remove_row_preserves_metaê  s
    
"z)TestRemove.test_remove_row_preserves_metac                 C   sj   |   |¡ | j | j¡ | j | j¡ | jd= | jjdddgksDt‚t | jd t 	ddg¡k¡sft‚d S rH  ©
r)   rM   rƒ   r:   r@   re   rV   rc   rd   rh   r&   r   r   r    Útest_delitem_rowñ  s    
zTestRemove.test_delitem_rowÚidxr   r+   c                 C   sh   |   |¡ | j | j¡ | j | j¡ | j|= | jjdddgksDt‚t | jd t 	dg¡k¡sdt‚d S )Nr-   r:   r@   r>   rP  )r'   r(   rR  r   r   r    Útest_delitem_row_listù  s    
z TestRemove.test_delitem_row_listc                 C   sl   |   |¡ | j | j¡ | j | j¡ | jdd…= | jjdddgksHt‚t | jd t 	dg¡k¡sht‚d S )Nr   r+   r-   r:   r@   r?   rP  r&   r   r   r    Útest_delitem_row_slice  s    
z!TestRemove.test_delitem_row_slicec              	   C   s,   |   |¡ t t¡� | jd= W 5 Q R X d S rC  ©r)   r\   r]   r,  rM   r&   r   r   r    Útest_delitem_row_fail
  s    
z TestRemove.test_delitem_row_failc              	   C   s,   |   |¡ t t¡� | jd= W 5 Q R X d S )Nr¿   rU  r&   r   r   r    Útest_delitem_row_float  s    
z!TestRemove.test_delitem_row_floatc                 C   sn   |   |¡ | jd= | jjg ks"t‚| j ¡ jdks6t‚| jr@t‚t| jd ktjƒsVt‚| jd kjdksjt‚d S r=  )	r)   rM   re   rV   r%  r?  rÒ   rc   r@  r&   r   r   r    Útest_delitem1  s    

zTestRemove.test_delitem1c                 C   s*   |   |¡ | jd= | jjddgks&t‚d S )Nr:   r-   r@   ©r)   r”   re   rV   r&   r   r   r    Útest_delitem2  s    
zTestRemove.test_delitem2c                 C   s(   |   |¡ | jd= | jjdgks$t‚d S )Nr  r@   rY  r&   r   r   r    Útest_delitems#  s    
zTestRemove.test_delitemsc              	   C   s,   |   |¡ t t¡� | jd= W 5 Q R X d S r    )r)   r\   r]   rÏ   rM   r&   r   r   r    Útest_delitem_fail(  s    
zTestRemove.test_delitem_failN)rN   rO   rP   rQ   rM   r”   r†   rˆ   rŠ   rE  rG  rI  rJ  rM  rN  rO  rQ  r\   ÚmarkÚparametrizerc   rh   rS  rT  rV  rW  rX  rZ  r[  r\  r   r   r   r    r;  ’  s0   


	

r;  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestKeepc                 C   sx   |   |¡ | | j| jg¡}| g ¡ |jg ks4t‚| ¡ jdksFt‚|rNt‚t	|d kt
jƒsbt‚|d kjdkstt‚d S rÛ   )r)   r   r-   r:   Úkeep_columnsre   rV   r%  r?  rÒ   rc   r@  rW   r   r   r    r†   0  s    

zTestKeep.test_1c                 C   sl   |   |¡ | | j| jg¡}| d¡ |jdgks6t‚|jjdksFt‚t	 
|d t	 dddg¡k¡sht‚d S )Nr:   rA  r0   r8   r9   )r)   r   r-   r:   r`  re   rV   rJ   r¢   rc   rd   rh   rW   r   r   r    rˆ   ;  s    

zTestKeep.test_2N)rN   rO   rP   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 )
Ú
TestRenamec                 C   sj   |   |¡ | | jg¡}| dd¡ |jdgks4t‚|jjdksDt‚t 	|d t 
dddg¡k¡sft‚d S )Nr-   r:   rA  r   r+   r,   )r)   r   r-   Úrename_columnre   rV   rJ   r¢   rc   rd   rh   rW   r   r   r    r†   F  s    
zTestRename.test_1c                 C   s¶   |   |¡ | | j| jg¡}| dd¡ | dd¡ |jddgksFt‚|jjdksVt‚|j	rn|j
jjdksnt‚t |d t dddg¡k¡s�t‚t |d t dd	d
g¡k¡s²t‚d S )Nr-   r@   r:   ©r@   r-   r   r+   r,   r0   r8   r9   )r)   r   r-   r:   rb  re   rV   rJ   r¢   r  Úmaskrc   rd   rh   rW   r   r   r    rˆ   N  s    
"zTestRename.test_2c                 C   sš   |   |¡ | | j| jg¡}d|d _d|d _|jddgksBt‚|jjdksRt‚t	 
|d t	 dddg¡k¡stt‚t	 
|d t	 dd	d
g¡k¡s–t‚d S )Nr@   r-   r:   rc  r   r+   r,   r0   r8   r9   )r)   r   r-   r:   r2   re   rV   rJ   r¢   rc   rd   rh   rW   r   r   r    Útest_rename_by_attrZ  s    


"zTestRename.test_rename_by_attrc              	   C   s¸   |   |¡ | | j| j| jg¡}| dd¡ |jdddgks@t‚| ddgddg¡ |jdddgksht‚t 	t
¡� | ddg¡ W 5 Q R X t 	t¡� | dgddg¡ W 5 Q R X d S )	Nr  )r/   rg   r¦   r/   rg   r¦   r:   r@   r-   )r)   r   r-   r:   r@   Zrename_columnsre   rV   r\   r]   r‘   r^   rW   r   r   r    Útest_rename_columnsd  s    
zTestRename.test_rename_columnsN)rN   rO   rP   r†   rˆ   re  rf  r   r   r   r    ra  D  s   
ra  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dddgd�¡ | |jdddd	gd�¡ | |jd
dddgd�¡ t |d t dddg¡k¡sxt‚t |d t ddd	g¡k¡sšt‚| d¡ t |d t dddg¡k¡sÆt‚t |d t ddd	g¡k¡sèt‚t |d
 t dd	gddgd	dgg¡k¡�st‚| d¡ t |d t dddg¡k¡�sFt‚t |d t d	ddg¡k¡�sjt‚t |d
 t d	dgdd	gddgg¡k¡�sšt‚d S )Nr-   r+   r   r,   rz   r:   r9   r8   r0   r@   r!  r‹   ©r0   r8   ©r   rƒ   r   rc   rd   rh   rV   r«   rW   r   r   r    Útest_singles  sP    ýþÿ
""
""ýÿÿÿ


$$ýÿÿÿzTestSort.test_singleÚcreate_indexFTc              	   C   s¦  |  ¡ }| |jddddgd�¡ | |jdddd	gd�¡ | |jd
dddgd�¡ t |d t dddg¡k¡sxt‚t |d t ddd	g¡k¡sšt‚|jddd� t |d t dddg¡k¡sÊt‚t |d t d	ddg¡k¡sìt‚t |d
 t d	dgddgdd	gg¡k¡�st‚|jddd� t |d t dddg¡k¡�sNt‚t |d t ddd	g¡k¡�srt‚t |d
 t ddgdd	gd	dgg¡k¡�s¢t‚d S )Nr-   r+   r   r,   rz   r:   r9   r8   r0   r@   r!  r‹   rh  T©rª   ri  )r'   r(   rk  rM   r   r   r    Útest_single_reversež  s    """"0$$zTestSort.test_single_reversec                 C   sr   t  d¡}t  |¡}|j||gdd�}| d¡ t  |¡}t  |d || k¡sTt‚t  |d || k¡snt‚dS )z2Sort a big-ish table with a non-trivial sort orderr­   r®   r¡   r°   r¯   N)rc   ru   Úsinr   r«   Úargsortrd   rV   )r'   r(   r¯   r°   rM   rR  r   r   r    Útest_single_big¯  s    



zTestSort.test_single_bigrª   c                 C   s(   |j g g gddgd�}|jd|d� d S )NZf4ZU1rI   r£   rl  )r   r«   )r'   r(   rª   rM   r   r   r    Útest_empty_reverse¹  s    zTestSort.test_empty_reversec                 C   sº  |  ¡ }| |jdddddddgd�¡ | |jdddd	ddd	gd�¡ t |d t ddddddg¡k¡spt‚t |d t ddd	ddd	g¡k¡s˜t‚| ddg¡ t |d t ddddddg¡k¡sÎt‚t |d t d	dddd	dg¡k¡söt‚| ddg¡ t |d t ddddddg¡k¡�s.t‚t |d t dd	d	dddg¡k¡�sXt‚| d
¡ t |d t ddddddg¡k¡�sŒt‚t |d t d	dddd	dg¡k¡�s¶t‚d S )Nr-   r+   r   r,   rz   r:   r9   r8   r0   r  ri  rW   r   r   r    Útest_multiple¾  s      ((((**
*zTestSort.test_multiplec                 C   sÆ  |  ¡ }| |jdddddddgd�¡ | |jdddd	ddd	gd�¡ t |d t ddddddg¡k¡spt‚t |d t ddd	ddd	g¡k¡s˜t‚|jddgd
d� t |d t ddddddg¡k¡sÒt‚t |d t dd	dddd	g¡k¡sút‚|jddgd
d� t |d t ddddddg¡k¡�s6t‚t |d t dddd	d	dg¡k¡�s`t‚|jdd
d� t |d t ddddddg¡k¡�s˜t‚t |d t dd	dddd	g¡k¡�sÂt‚d S )Nr-   r+   r   r,   rz   r:   r9   r8   r0   Trl  r  ri  rW   r   r   r    Útest_multiple_reverseÎ  s      ((((***zTestSort.test_multiple_reversec                 C   sÔ   |  ¡ }| |jddddgd�¡ | |jddddgd�¡ | |jd	d
ddgd�¡ | ddg¡ t |d t dddg¡kg¡sˆt‚t |d t dddg¡kg¡s¬t‚t |d	 t ddd
g¡kg¡sÐt‚d S )NÚ	firstnameó   Maxó   Joó   Johnrz   r2   ó   Milleró   JacksonÚtelrn   é   é   ©r   rƒ   r   r«   rc   rd   rh   rV   rW   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	d
ddgd�¡ | ddg¡ t |d t dd„ dD ƒ¡kg¡s”t‚t |d t dd„ dD ƒ¡kg¡s¼t‚t |d	 t ddd
g¡kg¡sàt‚d S )Nrt  c                 S   s   g | ]}t |ƒ‘qS r   ©r   ©Ú.0r¯   r   r   r    Ú
<listcomp>ò  s     z7TestSort.test_multiple_with_unicode.<locals>.<listcomp>©ÚMaxÚJoÚJohnrz   r2   c                 S   s   g | ]}t |ƒ‘qS r   r  r€  r   r   r    r‚  ÷  s     ©ÚMillerrˆ  ÚJacksonrz  rn   r{  r|  c                 S   s   g | ]}t |ƒ‘qS r   r  r€  r   r   r    r‚  ý  s     )r†  r…  r„  c                 S   s   g | ]}t |ƒ‘qS r   r  r€  r   r   r    r‚     s     )r‰  rˆ  rˆ  r}  rW   r   r   r    Útest_multiple_with_unicodeì  s,     ÿÿ ÿÿÿÿz#TestSort.test_multiple_with_unicodec              
   C   s  |  ¡ }| |jdddddddgd�¡ | |jdddd	ddd	gd�¡ t | ¡ | ¡  ¡ k¡sft‚| d¡}| ¡ jdgd
�}t |d | |d | k¡s¤t‚| ddg¡}| ¡ jddgd
�}t |d | |d | k¡sèt‚t |d | |d | k¡�st‚d S )Nr-   r+   r   r,   rz   r:   r9   r8   r0   )Úorder)r   rƒ   r   rc   rd   ro  r%  rV   )r'   r(   rM   Úi0Úi1r   r   r    Útest_argsort  s      
""zTestSort.test_argsortÚ	add_indexc                 C   s<  |  ¡ }| |jdddddddgd�¡ | |jdddd	ddd	gd�¡ |rV| d¡ t |jd
d�t d	dddddg¡k¡s‚t‚|jdd
d�}t d	dddddg¡}t |d | |d | k¡sÈt‚|jddgd
d�}t d	dddddg¡}t |d | |d | k¡�st‚t |d | |d | k¡�s8t‚d S )Nr-   r+   r   r,   rz   r:   r9   r8   r0   Trl  r   )	r   rƒ   r   r�  rc   rd   ro  rh   rV   )r'   r(   r�  rM   rŒ  r�  r   r   r    Útest_argsort_reverse  s      
,"$zTestSort.test_argsort_reversec                 C   s‚   |  ¡ }| |jddddgd�¡ | |jddddgd�¡ | |jd	d
ddgd�¡ t | ddg¡t dddg¡k¡s~t‚d S )Nrt  ru  rv  rw  rz   r2   rx  ry  rz  rn   r{  r|  r+   r   r   ©r   rƒ   r   rc   rd   ro  rh   rV   rW   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	d
ddgd�¡ t | ddg¡t dddg¡k¡s†t‚d S )Nrt  c                 S   s   g | ]}t |ƒ‘qS r   r  r€  r   r   r    r‚  2  s     z1TestSort.test_argsort_unicode.<locals>.<listcomp>rƒ  rz   r2   c                 S   s   g | ]}t |ƒ‘qS r   r  r€  r   r   r    r‚  7  s     r‡  rz  rn   r{  r|  r+   r   r   r‘  rW   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"t‚|jjdks2t‚| d¡ |jdgksLt‚|jjdks\t‚| dd¡ |jdgksxt‚|jjdksˆt‚| d¡ |jdgks¢t‚|jjdks²t‚| dd¡ |jdgksÎt‚|jjd	ksÞt‚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-   r4  r:   rA  r@   )r@   N)r   re   rV   rJ   r¢   r  rb  r«   rW   r   r   r    Ú$test_rebuild_column_view_then_rename=  s    

z-TestSort.test_rebuild_column_view_then_renameN)rN   rO   rP   rj  r\   r]  r^  rm  rp  rq  rr  rs  r~  rŠ  rŽ  r�  r’  r“  r”  r   r   r   r    rg  q  s    +



rg  Úkwargsr+  ZstableZ	quicksortc                 C   sl   t ƒ }ddddddg|d< ddddddg|d< | ¡ }|jddgf| Ž t | ¡ tj|f| Žk¡sht‚d S )	Nr+   r   r,   r-   r9   r8   r0   r:   )r   r%  r«   rc   rd   rV   )r•  rM   Zt_structr   r   r    Útest_sort_kindW  s    r–  c                   @   s   e Zd Zdd„ ZdS )ÚTestIteratorc              	   C   sz   t jdddgddgd�}| |¡}|jrPt t¡� |d |d k W 5 Q R X n&t||ƒD ]\}}t  ||k¡sZt	‚qZd S )N)r+   r   )r,   r9   rh  )r-   Úi4)r:   r˜  rI   r   )
rc   rh   r   r  r\   r]   r^   rÐ   rd   rV   )r'   r(   rC   rM   r-  Znp_rowr   r   r    Útest_iteratord  s    ýú
zTestIterator.test_iteratorN)rN   rO   rP   r™  r   r   r   r    r—  b  s   r—  c                   @   s   e Zd Zdd„ ZdS )ÚTestSetMetac                 C   sV   |j dd�}d|jd< d|jd< d|jd< d|jd< t|j ¡ ƒddddgksRt‚d S )Nr  r¡   r   r-   r:   r@   rC   )r   r4   ÚlistrB  rV   )r'   r(   rC   r   r   r    Útest_set_metax  s    



zTestSetMeta.test_set_metaN)rN   rO   rP   rœ  r   r   r   r    rš  v  s   rš  c                   @   s4   e Zd Zdd„ Zd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k	rDt || ¡ k¡sDt‚|| ¡ k	sTt‚|jt|j	j
ƒksjt‚tj|dd�}|j tk	r˜t || ¡ k¡s˜t‚|jt|j	j
ƒks®t‚t t¡� tj|d	d
gd�}W 5 Q R X d S )Nr   r+   r,   r0   r  r¡   Fr¨   )r@   Úi8)rC   rž  rI   )r   rc   rh   r   rd   r%  rV   re   r›  rJ   r¢   r\   r]   r^   )r'   r(   rC   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ks^t‚|jd	d
�}||krŒ|d jj|dfks t‚q|d jj|kst‚qdS )z5Test for https://github.com/astropy/astropy/pull/4080©ú>ú<Úlittler¿   rÀ   r-   Úf8r‰   ú=T©Zkeep_byteorderN)ÚsysÚ	byteorderr   r   r%  rJ   rV   )r'   r(   Zbyte_ordersZnative_orderr‹  rÓ   rM   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:t	‚q:t
j|dd��n}|d j}|jjD ]}	t ||	 ||	 k¡svt	‚qv|jdd�}
|jjD ] }	||	 jj|
|	 jjksªt	‚qªW 5 Q R X 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%  r)  r…   rJ   rV   r
   Úopenrw   rí   r¢   rc   rd   )r'   r(   Znon_native_orderÚfilenamerM   rÌ   rR  Zhdulrw   ZcolnameZarr2r   r   r    Útest_byteswap_fits_array¥  s    

z.TestConvertNumpyArray.test_byteswap_fits_arrayc                 C   sL   |j ddgddggdd�}tj|td�}t|tjƒs8t‚|d |ksHt‚d S )	Nr   r+   r,   r0   r  r¡   rI   r   )r   rc   rh   ÚobjectrÒ   r@  rV   )r'   r(   rC   Znp_dr   r   r    Útest_convert_numpy_object_array½  s    z5TestConvertNumpyArray.test_convert_numpy_object_arrayc                    sj   ˆj ddgddggdd�‰ ˆ ˆ ˆ g}tj|td�}t‡fdd	„|D ƒƒsLt‚t‡ fd
d	„|D ƒƒsft‚d S )Nr   r+   r,   r0   r  r¡   rI   c                    s   g | ]}t |ˆ jƒ‘qS r   )rÒ   r   ©r�  rM   )r(   r   r    r‚  É  s     zNTestConvertNumpyArray.test_convert_list_numpy_object_array.<locals>.<listcomp>c                    s   g | ]}t  |ˆ ¡‘qS r   )rc   Úarray_equalr°  )rC   r   r    r‚  Ê  s     )r   rc   rh   r®  rd   rV   )r'   r(   ZdsZnp_dsr   )rC   r(   r    Ú$test_convert_list_numpy_object_arrayÅ  s
    
z:TestConvertNumpyArray.test_convert_list_numpy_object_arrayN)rN   rO   rP   rŸ  r©  r­  r¯  r²  r   r   r   r    r�  �  s
   r�  Tc                 C   s€   | j |j kst‚tj |  ¡ | ¡ ¡ | j|jks6t‚t| j 	¡ |j 	¡ ƒD ].\}}|rjt 
||¡rzt‚qLt 
||¡sLt‚qLd S r#   )re   rV   rc   Ztestingr   r%  r4   rÐ   rí   ÚvaluesZmay_share_memory)rM   r”   ÚdeeprÓ   rÁ   r   r   r    Ú_assert_copiesÍ  s    rµ  c                  C   s8   t jdddgdddggddgd�} |  ¡ }t| |ƒ d S )Nr   r+   r,   r0   r¯   r°   r¡   )r   r   r©   rµ  ©rM   r”   r   r   r    Ú	test_copyÙ  s    "r·  c                  C   sT   t jdddgdddggddgddd	id
�} | d jdddgk |  ¡ }t| |ƒ d S )Nr   r+   r,   r0   r¯   r°   Tr2   Útest)r¢   r  r4   F)r   r   rd  r©   rµ  r¶  r   r   r    Útest_copy_maskedß  s       ÿr¹  c                  C   sR   t jdddgdddggddgd�} t | ¡}t | ¡}t| |dd	� t| |ƒ d S )
Nr   r+   r,   r0   r¯   r°   r¡   F)r´  )r   r   r©   Údeepcopyrµ  )rM   r”   Út3r   r   r    Útest_copy_protocolè  s
    "

r¼  c               	   C   s„   t  ¡ } t t¡� | dk W 5 Q R X t t¡� | dk  W 5 Q R X t t¡� | dk W 5 Q R X t t¡� | dk W 5 Q R X dS )zQ
    Regression test for #828 - disallow comparison operators on whole Table
    r+   çš™™™™™ñ?g      @gš™™™™™ñ¿N)r   r   r\   r]   r‘   ©rM   r   r   r    Ú$test_disallow_inequality_comparisonsò  s    r¿  c               	   C   sR  ddg} ddg}ddg}t j| ||gdddgd�}t j| |gddgd�}t j ¡ }| ¡ }tddgd	d
�|d< | ¡ }tjj|d d< t j ¡ }dddgt	j
 |d< t j ¡ }	tdddd�|	d< |	 |	¡}
|
 ¡ D ]}t |¡sÒt‚qÒtjtdd�� | |¡ W 5 Q R X tjtdd�� | |¡ W 5 Q R X t�r‚tjtdd�� | d¡ W 5 Q R X tjtdd�� | ddg¡ W 5 Q R X nl| d¡}|jD ]"}t || ddgk¡�s’t‚�q’| ddg¡}|jD ]"}t || ddgk¡�sÊt‚�qÊ| |¡}|jD ]"}t || ddgk¡�sþt‚�qþ| |¡}|jD ]"}t || ddgk¡�s2t‚�q2| |¡}|jD ]$}t || dddgk¡�sft‚�qf| d¡}|jD ]"}t || ddgk¡�sœt‚�qœ| ddg¡}|jD ]"}t || ddgk¡�sÔt‚�qÔt jddgd�}| |d ¡}t |d ddgk¡�s2t‚t |d ddgk¡�sNt‚d S )Nr   r+   r¿   rÀ   r-   r:   r@   r¡   Úcxcsec©r3   Útimer   r»   Úquantityr³   r´   Úskz1cannot compare tables with different column namesr�   zunable to compare column azunable to compare column cFT)r   r-   )r   r:   ©Úrowsr§   r£   )r   r   Útable_helpersÚsimple_tabler©   r   rc   Úmar  ri   rj   r	   Zvalues_equalrÑ   rd   rV   r\   r]   r^   r   re   )r£   rÁ   Zcol3rþ   r”   r»  ÚtmZtm1ZtqZtskZeqskrÓ   ÚeqZeq1Zeq2Zeq3Zeq4rM   r   r   r    Útest_values_equal_part1  sl    



 ÿ

 
 

 

 

"

 
 rÌ  c                  C   s¤  t jjddddddddd	g	d
d�} t | | k¡s4t‚t | | k¡rFt‚t | | d ktjddddddddgtd�k¡szt‚t | | d ktjddddddddgtd�k¡s®t‚t jjddddddddd	g	d
d�}t | |ktjddddddddgtd�k¡�st‚t | |ktjddddddddgtd�k¡�s4t‚t | | 	¡ ktjddddddddgtd�k¡�sjt‚t |  	¡ |ktjddddddddgtd�k¡�s t‚d S )Nú
 a b  c  dú
 2 c 7.0 0ú
 2 b 5.0 1ú
 2 b 6.0 2ú
 2 a 4.0 3ú
 0 a 0.0 4ú
 1 b 3.0 5ú
 1 a 2.0 6ú
 1 a 1.0 7ÚasciirÁ  r,   r   r   rI   ú
 3 b 6.0 2ú
 0 a 1.0 4ú
 1 c 2.0 6)
r   r   rª  rc   rd   rV   Úanyrh   Úboolr%  r¶  r   r   r    Útest_rows_equalO  sL    ÷ô44÷ô22(ÿ
(ÿrÜ  c                  C   sî  t jjddddddddd	g	d
d�} t j| dd�} t | | k¡sBt‚t | | k¡rTt‚t | | d ktjddddddddgtd�k¡sˆt‚t | | d ktjddddddddgtd�k¡s¼t‚t jjddddddddd	g	d
d�}t | |ktjddddddddgtd�k¡�st‚t | |ktjddddddddgtd�k¡�sBt‚d| j	d d< t | |ktjddddddddgtd�k¡�s‚t‚t | |ktjddddddddgtd�k¡�s´t‚t | | 
¡ ktjddddddddgtd�k¡�sêt‚d S )NrÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  rÁ  T©r  r,   r   r   rI   r×  rØ  rÙ  r-   )r   r   rª  rc   rd   rV   rÚ  rh   rÛ  rd  r%  r¶  r   r   r    Útest_equality_maskedˆ  sN    ÷ô44÷ô2222(ÿrÞ  c                  C   sŠ   t jjddddddddd	g	d
d�} t j| dd�} t jjddddddddd	g	d
d�}t |  ¡ |ktjddddddddgtd�k¡s†t‚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Ï  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  rÁ  TrÝ  r×  rØ  rÙ  r   r   rI   N)	r   r   rª  rc   rd   r%  rh   rÛ  rV   r¶  r   r   r    Útest_equality_masked_bugÆ  s<    	÷ô÷ô(ÿrß  c                   @   s   e Zd ZejZdZdS )ÚTestMetaTabler   N)rN   rO   rP   r   r   Z
test_classÚargsr   r   r   r    rà  ù  s   rà  c                  C   sZ   t dtƒrd S d} d}tj| dg|dggdd�}| t|ƒks@t‚|  d¡t|ƒksVt‚d S )	Nr
  u+   Ð°Ñ�Ñ‚Ñ€Ð¾Ð½Ð¾Ð¼Ð¸Ñ‡ÐµÑ�ÐºÐ°Ñ� Ð¿Ð¸Ñ‚Ð¾Ð½Ð°u*   Ð¼Ð¸Ð»Ð»Ð¸Ð°Ñ€Ð´Ñ‹ Ñ�Ð²ÐµÑ‚Ð¾Ð²Ñ‹Ñ… Ð»ÐµÑ‚r+   r,   r  r¡   úutf-8)rÒ   Úbytesr   r   r   rV   Úencode)Zstring_aZstring_br-   r   r   r    Útest_unicode_contentþ  s    
rå  c               
   C   s.   t jjddddddddd	g	d
d�} t| ƒ d S )NrÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  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s8t‚|d jjdksLt‚|d	 jjd
ks`t‚d|d _d|d _d|d jd< d|d jd< | ¡ }| ¡  |d jjdks´t‚|d jjdksÈt‚|d	 jjd
ksÜt‚|d jdksît‚|d jdk�st‚|d jd dk�st‚|d jd dk�s2t‚t	 
|d ¡d |k�sNt‚t	 
|d ¡d |k�sjt‚t	 
|d	 ¡d dk�s†t‚| ¡ }| ¡  |d jjdk�s¬t‚|d jjdk�sÂt‚|d	 jjd
k�sØt‚|d jdk�sìt‚|d jdk�s t‚|d jd dk�st‚|d jd dk�s0t‚t	 
|d ¡d |k�sLt‚t	 
|d ¡d |k�sht‚t	 
|d	 ¡d dk�s„t‚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ÚirI   r§   rè  r£   ré  rÁ   rê  Zval0ÚvalZval1r   N)rä  r   rJ   r+  rV   Údescriptionr4   r©   Zconvert_unicode_to_bytestringrc   rh   Zconvert_bytestring_to_unicode)r(   rç  ZbytrM   rþ   r   r   r    Ú"test_unicode_bytestring_conversion!  sB    	


rí  c                     sb   t ƒ ‰ G ‡ fdd„dtjƒ} | ddddgiƒ}t|ƒ}|d j|ksHt‚~t ¡  |ˆ ks^t‚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Úidr6   ©Zdeletedr   r    Ú__del__d  s    z.test_table_deletion.<locals>.TestTable.__del__N)rN   rO   rP   rñ  r   rð  r   r    Ú	TestTablec  s   rò  r-   r   r+   r,   N)Úsetr   r   rï  Zparent_tablerV   ÚgcZcollect)rò  rM   Zthe_idr   rð  r    Útest_table_deletionZ  s    rõ  c                  C   s\   t jddggdgd�} g }| D ]$}| D ]}| |d |d f¡ q&q|ddddgksXt‚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   ÚappendrV   )rM   ÚoutÚr1Úr2r   r   r    Útest_nested_iterations  s    rú  c              	   C   st   |   t g ¡¡}t|jƒdks"t‚t t¡� |   t d¡¡}W 5 Q R X |   t dddg¡¡}t|jƒdkspt‚d S )Nr   r   r+   r,   )	r   rc   rh   r…   rí   rV   r\   r]   r^   )r(   rM   r   r   r    Ú&test_table_init_from_degenerate_arrays  s    rû  zrequires pandas)Úreasonc                   @   s¨   e Zd Zdd„ Zej dddg¡ej dd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ej dddg¡dd„ ƒZdd„ Zdd „ Zd!S )"Ú
TestPandasc           
   	   C   sB  t  ¡ }dD ]T}dD ]J}dD ]@}t || | ¡}tjdddg|d�}| |¡||| | < qqqdd	d
g|d< dd	d
g|d< | ¡ }|jD ]ø}|dkrÔt |d t dd	d
g¡k¡sºt	‚|| jt d¡ksÒt	‚qŒ|dk�rt |d t dd	d
g¡k¡�st	‚|| jt d¡k�s„t	‚qŒt || || k¡�s:t	‚|| jj
�rd|| j|| jk�s„t	‚qŒ|| j||  ¡  ¡ jksŒt	‚qŒ|ddg  |ddg  t j |¡}	|jD ]Œ}|dk�rÜt || |	| k¡�sît	‚nt|| |	| ƒ || jj
�r|| j|	| jk�s:t	‚n"||  ¡  ¡ j|	| jk�s°t	‚�q°d S )N)r¢  r¡  r¥  )rs   rê  )Ú2Ú4r  r   r+   r,   rI   r-   r:   r@   ri   ÚsrH   ú<i4z>i4z<f4z>f4)ri   r   )r   r   rc   rJ   rh   ÚnewbyteorderÚ	to_pandasrí   rd   rV   ZisnativeÚbyteswapÚfrom_pandasr   )
r'   rM   Zendianr+  ÚbyterJ   r¯   rC   Úcolumnr”   r   r   r    rœ   Œ  s>    
"
$"

zTestPandas.test_simpleÚunsignedri   r
  Úbitsr>   rÊ   é    é@   c           	      C   s¶   |› d|› �}t ddgddg|d�}t|gƒ}| ¡ }| dd¡ d	d
¡}t|d jƒ|ks`t‚t |¡}t|d jƒ|ks€t‚t 	|d j
ddgk¡sœt‚t 	|d |k¡s²t‚d S )Nr„   r   r+   FT©rd  rJ   rê  ÚIri   ré  r§   )r   r   r  Úreplacer   rJ   rV   r  rc   rd   rd  )	r'   r  r	  Znp_dtyper@   rM   ÚdfZpd_dtyper”   r   r   r    Útest_nullable_int¿  s    

zTestPandas.test_nullable_intc              	   C   sJ   t  ¡ }dddg|d< t d¡|d< tjtdd�� | ¡  W 5 Q R X d S )	Nr   r+   r,   r-   r5  r:   z4Cannot convert a table with multidimensional columnsr�   )r   r   rc   Zonesr\   r]   r^   r  ©r'   rM   r   r   r    r9  Í  s     ÿzTestPandas.test_2dc                 C   sú  t  ¡ }ttƒD ]}| d¡st| ||< qtddddgdd�|d< | ¡ }t j |¡}t	 
|d	 dd
ddg¡stt‚t	 
|d ddddg¡s�t‚t	 
|d ddddg¡s¬t‚t	 
|d dd
ddg¡sÈt‚t	 
|d dd
ddg¡sät‚t	 
|d dd
ddg¡�st‚t	 
|d dd
ddg¡�s t‚t	j
|d ddddgdd
d��sDt‚t|d tƒ�sXt‚t	 
|d jddd d!g¡�sxt‚t	 |d jd"d#d$d%gk¡�sšt‚|d jd&k�s®t‚t|d tƒ�sÂt‚t	 
|d jddddg¡�sât‚|d jdk�söt‚d S )'Nr@  r   r+   r0   r9   ÚsecrÁ  ÚdtrÃ  r   r,   Z	longituder  r¿   ç      @g      @Zlatitudeg      $@g      &@zskycoord.razskycoord.decZ	arraywrapZ	arrayswapzearthlocation.yit° i­Z i¿ü	 ©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  rc   r¶   rV   rÒ   r   Újyearrd   r  r3   Úvalue)r'   rM   r2   Útpr”   r   r   r    Útest_mixin_pandas×  sF    
 
  ÿ üÿÿ
	 zTestPandas.test_mixin_pandasÚuse_IndexedTableFTc              	   C   sl  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�}	|	 ¡ }
|sÂt |
j	|k¡s˜t
‚|	jd
d�}
t |
j	|k¡s¸t
‚|	 d
¡ |	 ¡ }
t |
j	|k¡sÞt
‚|	d
 jjsît
‚|	jdd�}
t |
j	|k¡�st
‚|	jdd�}
t |
j	|k¡�s2t
‚t t¡�}|	jdd� W 5 Q R X dt|jƒk�sht
‚dS )z¬Test 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||Ž |  | jd ¡ d S rÛ   )ÚsuperÚ__init__r�  re   )r'   rá  r•  ©Ú	__class__r   r    r     s    z>TestPandas.test_to_pandas_index.<locals>.IndexedTable.__init__)rN   rO   rP   Ú__doc__r   Ú__classcell__r   r   r!  r    ÚIndexedTable	  s   r%  r+   r   z
1998-01-01z
2002-01-01zdatetime64[ns]rÊ  )rJ   r2   ÚfreqéÎ  r  r  rÁ  r¯   r¡   ©r.  TFznot a columnzindex must be None, False)Úpandasr   r   Z
RangeIndexZDatetimeIndexr   r  rc   rd   r.  rV   r�  rè   r/  r\   r]   r^   r   r  )r'   r  Úpdr%  Z	row_indexZtm_indexrÊ  r¯   Ú	table_clsrM   r  Úerrr   r   r    Útest_to_pandas_index   s:       ÿ
zTestPandas.test_to_pandas_indexc                 C   s   t dddgdd�}tdddgdd�}tjj|d< tjj|d< tj||gddgd	�}| ¡ }t |d  	¡ d
dd
gk¡szt
‚t |d  	¡ d
dd
gk¡sšt
‚tj |¡}t |d j|jk¡sÀt
‚tjj|d j|jddd�sàt
‚t |d j|jk¡sút
‚tjj|d j|jddd��st
‚d S )Nr   r+   r,   rÀ  rÁ  r  rÊ  r  r¡   FTg›+¡†›„=r  )r   r   rc   rÉ  r  r   r   r  rd   ZisnullrV   r   r  rd  r¶   Zjd)r'   rÊ  r  rM   r  r”   r   r   r    Útest_mixin_pandas_masked0  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sVt‚tjj|dd
�}|jddgksxt‚t |d j	|j	¡s�t‚d S )Nr'  r  r  rÁ  r   r+   rÊ  r¯   r¡   r(  T)
r   r   r   r  r  re   rV   rc   r¶   r  )r'   rÊ  r¯   rM   r  r”   r   r   r    Útest_from_pandas_indexC  s    z!TestPandas.test_from_pandas_indexÚuse_nullable_intc              
   C   sv  t jdd�}dddg|d< dddg|d _dd	d
g|d< dddg|d _dddg|d< dddg|d _dddg|d< dddg|d _dddg|d< dddg|d _|r´|j|d�}nŠdd l}ddlm} ||jƒ|dƒk }|�rtj	t
dd�� |j|d�}W 5 Q R X n6ddlm} tj|dd�� |j|d�}W 5 Q R X d S t j |¡}|j ¡ D �]\}	}
t |
j||	 jk¡�szt‚t||	 dƒ�r¦t |
j||	 jk¡�s¦t‚|
jjdk�r*t |
j¡�rà|�sà||	 jjdk�söt‚n||	 jjdk�söt‚tjdd��  t|
j||	 j |
j¡ƒ W 5 Q R X nD|
jjd k�rP|
j||	 jk�snt‚n|
 ¡  ¡ j||	 jk�sTt‚�qTd S )!NTrÝ  r   r+   r,   r-   Fr¿   rÀ   r»   r:   r@   ri   r   l    * Dyé l   €+ dxé l    i  sé ZSource)r0  r   )ÚVersionz2.0devz/converted column 'a' from int(32|64) to float64r�   )ÚIntCastingNaNErrorz9Cannot convert non-finite values \(NA or inf\) to integerrd  rê  rs   Úignore)Úinvalid)r¥  ú|)r   r   rd  r  r)  Zpackaging.versionr1  Ú__version__r\   Úwarnsr   Zpandas.core.dtypes.castr2  r]   r  rí   Úitemsrc   rd   rw   rV   r5   rJ   r+  rÚ  Zerrstater   Zastyper¨  r  r  )r'   r0  rM   rC   r)  r1  ZPANDAS_LT_2_0r2  r”   r2   r  r   r   r    Útest_maskingP  sV    þþ&zTestPandas.test_maskingc              	   C   s   dd l }dd lm} | dddgdddgdœ¡}tjj||j|jdœd	�}|d
 j	|jks^t
‚|d j	|jksrt
‚t t¡� tjj||j|jgd	� W 5 Q R X t t¡�$}tjj||j|j|jdœd	� W 5 Q R X t|ƒdksät
‚d|d jjd ksüt
‚d S )Nr   r   r+   r,   gÍÌÌÌÌÌô?ç333333ó?gÍÌÌÌÌÌü?)r¯   rM   r   r¯   rM   )r¯   rM   r°   z{'y'})r)  Zastropy.unitsr   Z	DataFramer   r   r  rj   r   rk   rV   r\   r]   r‘   r7  ÚUserWarningr…   Úmessagerá  )r'   r*  ri   r  rM   Úrecordr   r   r    Ú
test_units“  s    "(zTestPandas.test_unitsc                 C   s`   dddgdddgdœ}t j|dd	�}| d
¡ dddg|d _| ¡ }|d jd dks\t‚d S )Nr   r   r+   rr   rì   rn   )rw   r.  T)rw   r  r.  rw   r±   )r   r   r�  rd  r  ZilocrV   )r'   rw   rM   r  r   r   r    Ú*test_to_pandas_masked_int_data_with__index¨  s    
z5TestPandas.test_to_pandas_masked_int_data_with__indexN)rN   rO   rP   rœ   r\   r]  r^  r  r9  r  r-  r.  r/  r9  r>  r?  r   r   r   r    rý  Š  s   3
)
/
B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�� dddg|jd< W 5 Q R X tjtdd�� | ddddg¡ W 5 Q R X tjtd	d�� | dddg¡ W 5 Q R X 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+   r,   r-   z)column name not there is not in the tablez	not therez,length of new column must match table lengthN)	r)   r   r-   r:   r\   r]   r^   rí   Úreplace_columnrW   r   r   r    Útest_fail_replace_column¶  s"    
þ ÿ ÿz*TestReplaceColumn.test_fail_replace_columnc                 C   s  |   |¡ | | j| jg¡}|d }|d }dddg}|| |¡|j|dd�|j|dd�fD ]|}| d|¡ t |d |k¡s‚t‚|d |k	s’t‚|d |ks¢t‚|j	ddgks´t‚|d j
i ksÆt‚|d jdks\t‚q\|d= t|ƒdksðt‚d	d
g|d< t|ƒd
k�st‚dS )z)Replace existing column with a new columnr-   r:   r:  g333333@gffffff@r�   Nr,   r   r+   )r)   r   r-   r:   r   rA  rc   rd   rV   re   r4   r3   r…   )r'   r(   rM   ÚtaÚtbÚvalsrÓ   r   r   r    Útest_replace_columnË  s*    

üz%TestReplaceColumn.test_replace_columnc              	   C   sf   |   |¡ | | j| jg¡}| d¡ t t¡�}| ddddg¡ W 5 Q R X |j	j
d dksbt‚dS )z4Replace index column and generate expected exceptionr-   r   r+   r,   r   z#cannot replace a table index columnN)r)   r   r-   r:   r�  r\   r]   r^   rA  r  rá  rV   )r'   r(   rM   r,  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sRt‚d|d d< |d d |d ksvt‚d S )Nr   r+   r,   r0   r-   r:   r¡   rÆ   rÇ   Fr¨   r   rr   )r   rc   rh   rA  rV   )r'   rM   r-   r   r   r    Útest_replace_column_no_copyñ  s    z-TestReplaceColumn.test_replace_column_no_copyN)rN   rO   rP   rB  rF  rG  rH  r   r   r   r    r@  ´  s   
r@  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ƒsDt‚dS )z%This is a small regression from #8902r   r+   r,   r0   r-   r:   r¡   r8   r9   rj   r´   N)r   r   rÒ   ri   ÚQuantityrV   r  r   r   r    Ú1test_replace_with_masked_col_with_units_in_qtableû  s    zWTestQTableColumnConversionCornerCases.test_replace_with_masked_col_with_units_in_qtablec              	   C   sV   t dtj ggƒ}tjtdd�� tdgtjd�|d< W 5 Q R X t|d tƒsRt‚d S )Nr   zconvert it to Quantity failedr�   r-   r´   )	r   ri   rj   r\   r7  r   r   rÒ   rV   r  r   r   r    Ú6test_do_not_replace_string_column_with_units_in_qtable	  s    z\TestQTableColumnConversionCornerCases.test_do_not_replace_string_column_with_units_in_qtableN)rN   rO   rP   rK  rL  r   r   r   r    rI  ú  s   rI  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   sB   dddgdddgddd	gt j g| _d
ddg| _tddgƒ| _d S )Nr   r+   r,   r0   r8   r9   r=   r>   r?   r-   r:   r@   )r-   r   )r:   r+   )ri   rj   rí   r¢   r   r4   r6   r   r   r    r   	  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�   r:   c                 S   s   g | ]}|j j‘qS r   )rè   r2   ©r�  rÓ   r   r   r    r‚  	  s     zGTest__Astropy_Table__.SimpleTable.__astropy_table__.<locals>.<listcomp>)r¢   r©   r4   )rí   rè   r2   r   r   r   r4   )	r'   Úclsr©   r•  r-   r:   r@   r›   r¢   r   r   r    Ú__astropy_table__	  s
    z3Test__Astropy_Table__.SimpleTable.__astropy_table__N)rN   rO   rP   r   rP  r   r   r   r    ÚSimpleTable	  s   rQ  c                 C   sx  t jt jfD �]d}|t jkr"tjnt j}dD �]B}|  ¡ }|||dd�}|jdddgks\t‚|j	ddiksnt‚t
 |d |jd k¡sŠt‚t
 |d |jd	 k¡s¦t‚|t jkrº|d jn|d }t
 |jd
 j|k¡sÜt‚t|d t jƒsðt‚t|d t jƒ�st‚t|d |ƒ�st‚|d jtjk�s0t‚t|ƒ|k�sBt‚d|d d< |�rh|jd d d	ks,nds,t‚q,qdS )zEMake a SimpleTable and convert to Table, QTable with copy=False, True)FTúextra!)r©   Ú
extra_metar-   r:   r@   rS  r   r   r+   rr   N)r   r   r   ri   rJ  r   rQ  re   rV   r4   rc   rd   rí   r  rÒ   r   rk   rj   r™   )r'   r+  Zcol_c_classZcpyÚstrM   rE  r   r   r    Útest_simple_1	  s$    
z#Test__Astropy_Table__.test_simple_1c                 C   s�   |   ¡ }tjtjtjg}dddg}tdgƒ}tj||||d�}|j|ksLt	‚t
dd„ t|j ¡ |ƒD ƒƒsnt	‚|j|jks~t	‚|j|ksŒt	‚dS )	zATest converting a SimpleTable and changing column names and typesr-   r:   r@   )r@   r,   )rJ   r¢   r4   c                 s   s   | ]\}}|j j|kV  qd S r#   )rJ   r™   )r�  rÓ   rJ   r   r   r    Ú	<genexpr><	  s    z6Test__Astropy_Table__.test_simple_2.<locals>.<genexpr>N)rQ  rc   Zint32r˜   Zfloat16r   r   r   re   rV   rd   rÐ   rí   r³  r4   )r'   rT  Zdtypesr¢   r4   rM   r   r   r    Útest_simple_24	  s    

ÿz#Test__Astropy_Table__.test_simple_2c              	   C   s>   t  t¡�}tjdggdd� W 5 Q R X dt|jƒks:t‚dS )zgIf extra kwargs provided but without initializing with a table-like
        object, exception is raisedr   rR  )rS  z*__init__() got unexpected keyword argumentN)r\   r]   r‘   r   r   r   r  rV   )r'   r,  r   r   r    Útest_kwargs_exceptionD	  s    z+Test__Astropy_Table__.test_kwargs_exceptionN)rN   rO   rP   r#  rQ  rU  rW  rX  r   r   r   r    rM  	  s
   rM  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 )
N©r   r+   r,   r-   r�   ©r0   r8   r9   r:   ©r=   r>   r?   r@   )rr   rì   rn   rC   )r   r-   r:   r@   rC   r6   r   r   r    r)   M	  s    zTestUpdate._setupc              	   C   s¬   |   ¡  t| jgƒ}t| jd d… gƒ}d}tjt|d�� | |¡ W 5 Q R X |jdgks`t	‚t
 |d | jk¡sxt	‚|jdgksˆt	‚t
 |d | jd d… k¡s¨t	‚d S )Nr±   z Inconsistent data column lengthsr�   r-   r:   ©r)   r   r-   r:   r\   r]   r^   Úupdatere   rV   rc   rd   )r'   rþ   r”   Úmsgr   r   r    Útest_different_lengthsS	  s    z!TestUpdate.test_different_lengthsc              	   C   sŒ   |   ¡  t| jgƒ}| jdgdœ}d}tjt|d�� | |¡ W 5 Q R X |jdgksZt	‚t
 |d | jk¡srt	‚|| jdgdœksˆt	‚d S )Nr   )r:   r@   z(Inconsistent data column lengths: {1, 3}r�   r-   r]  )r'   rM   rC   r_  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sjt‚|j|ksxt‚d S )Nr   Tr  ©r4   r   r  )	r)   r   r-   r:   r©   rº  r4   r^  rV   )r'   rþ   r”   Zt2metar   r   r    Útest_metadata_conflictl	  s    
z!TestUpdate.test_metadata_conflictc                 C   sð  |   ¡  t| j| jgƒ}t| j| jgƒ}|d  d7  < | |¡ |jdddgksVt‚t 	|d | jk¡snt‚t 	|d | jd k¡sŠt‚t 	|d | jk¡s¢t‚|jddgks´t‚t 	|d | jd k¡sÐt‚t 	|d | jk¡sèt‚t
| jƒt
| jƒdœ}t |¡}| |¡ |jdddgk�s(t‚t 	|d | jk¡�sBt‚t 	|d | jk¡�s\t‚t 	|d | jk¡�svt‚||k�s„t‚|jdddgk�sšt‚t 	|d | jk¡�s´t‚t 	|d | jd k¡�sÒt‚t 	|d | jk¡�sìt‚d S )Nr:   r   r-   r@   ©r:   rC   rC   )r)   r   r-   r:   r@   r^  re   rV   rc   rd   r›  rC   r©   rº  )r'   rþ   r”   rC   Zdcr   r   r    Útest_updatev	  s0    


zTestUpdate.test_updatec                 C   sH  |   ¡  t| j| jgƒ}t| j| jgƒ}|j|dd� |d  d8  < |jdddgksZt‚t 	|d | jk¡srt‚t 	|d | jd k¡sŽt‚t 	|d | jk¡s¦t‚t 
| j¡t 
| j¡dœ}|j|dd� |d  d9  < |jddd	gksòt‚t 	|d d| j k¡�st‚t 	|d | jk¡�s*t‚t 	|d	 | jk¡�sDt‚d S )
NFr¨   r:   r   r-   r@   rd  r+   rC   )r)   r   r-   r:   r@   r^  re   rV   rc   rd   rh   rC   )r'   rþ   r”   rC   r   r   r    Útest_update_without_copy•	  s     z#TestUpdate.test_update_without_copyN)	rN   rO   rP   r)   r`  ra  rc  re  rf  r   r   r   r    rY  L	  s   
rY  c                  C   s  t  dgg¡} dddgi}|| _| j|ks.t‚| dd… }|j| jk	sJt‚|j| jksZt‚|jd | jd ksrt‚t j| dd�}|j| jk	s�t‚|j| jks t‚|jd | jd ks¸t‚t j| dd�}|j| jk	sÖt‚|j| jksæt‚|jd | jd k	sþt‚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   r4   rV   )rM   r4   r”   r   r   r    Útest_table_meta_copy©	  s     rh  c                  C   s€  dddgi} dddgi}t jdgg| dd�}|j| ks:t‚t jdgg| d�}|j| k	sZt‚|j| ksht‚t j||dd�}|j|ks†t‚|j|jks–t‚t j||d�}|j|k	s²t‚|j|jksÂt‚t j|di d	�}|ji ksàt‚t j|dd
d	�}|j|jk�st‚t j| dd�}|j| k�s t‚|jd | d k�s8t‚t j| d�}|j| k	�sTt‚|j| k�sdt‚|jd | d k	�s|t‚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,   r0   F)r4   r©   rb  T)r©   r4   Nrg  )r4   Zmeta2rM   r”   r   r   r    Ú"test_table_meta_copy_with_meta_argÈ	  s0    ri  c                  C   sä   dddgt j } dddg}tj| |gddgd	�}|d }|d }d
dddddgi|j_d|j_| d|  d¡¡ t	 
|d |k¡s†t‚|d |k	s–t‚|d |ks¦t‚|jddgks¸t‚|d jjdksÌt‚|d jjdksàt‚dS )z>Replace existing Quantity column with a new column in a QTabler   r+   r,   r0   r8   r9   r-   r:   r¡   r/   r   z%fÚcmN)ri   rj   r   r   rè   r4   r3   rA  Útorc   rd   rV   re   )r-   r:   rM   rC  rD  r   r   r    Útest_replace_column_qtable÷	  s    
rl  c                  C   sÔ   ddgt j } ddg}tj| |gddgd�}t|d t jƒs@t‚|d }dt j |d< t |d ddgt j k¡svt‚|d |ks†t‚dd	g|d< t |d dd	gk¡s¬t‚t|d tj	ƒsÀt‚|d |k	sÐt‚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,   r0   r-   r:   r¡   r8   r9   N)
ri   rj   r   r   rÒ   rJ  rV   rc   rd   r   )r-   r:   rM   rC  r   r   r    Ú&test_replace_update_column_via_setitem
  s     rm  c               	   C   s\   t jdddgdddggddgd	�} t j d
dddg¡� d| d< dddg| d< W 5 Q R X dS )za
    Test warnings related to table replace change in #5556:
    Normal warning-free replace
    r   r+   r,   r0   r8   r9   r-   r:   r¡   Úreplace_warningsÚrefcountÚ
attributesrL  r   rr   rS   é   N)r   r   ÚconfÚset_tempr¾  r   r   r    Ú6test_replace_update_column_via_setitem_warnings_normal#
  s    "rt  c               
   C   s¬   t jdddgdddggddgd	�} t j d
dddg¡�l | dd… }d|d< t | d dddgk¡sht‚tjt	dd��}ddg|d< W 5 Q R X t
|ƒdksžt‚W 5 Q R X dS )zc
    Test warnings related to table replace change in #5556:
    Replace a slice, one warning.
    r   r+   r,   r0   r8   r9   r-   r:   r¡   rn  ro  rp  rL  Nr   z3replaced column 'a' which looks like an array slicer�   rr   rS   )r   r   rr  rs  rc   rd   rV   r\   r7  r   r…   )rM   r”   Úwr   r   r    Ú5test_replace_update_column_via_setitem_warnings_slice.
  s    "þrv  c               
   C   sˆ   t jdddgdddggddgd	�} d
| d _tjtdd��4}t j ddddg¡� dddg| d< W 5 Q R X W 5 Q R X t|ƒdks„t	‚dS )zV
    Test warnings related to table replace change in #5556:
    Lost attributes.
    r   r+   r,   r0   r8   r9   r-   r:   r¡   rj   z4replaced column 'a' and column attributes \['unit'\]r�   rn  ro  rp  rL  rr   rS   rq  N)
r   r   rk   r\   r7  r   rr  rs  r…   rV   )rM   ru  r   r   r    Ú:test_replace_update_column_via_setitem_warnings_attributesB
  s    "
þ ÿ"rw  c               
   C   s†   t jdddgdddggddgd	�} | d }tjtd
d��4}t j ddddg¡� dddg| d< W 5 Q R X W 5 Q R X t|ƒdks‚t‚dS )z^
    Test warnings related to table replace change in #5556:
    Reference count changes.
    r   r+   r,   r0   r8   r9   r-   r:   r¡   z0replaced column 'a' and the number of referencesr�   rn  ro  rp  rL  rr   rS   rq  N)	r   r   r\   r7  r   rr  rs  r…   rV   )rM   rC  ru  r   r   r    Ú8test_replace_update_column_via_setitem_warnings_refcountU
  s    " ÿ ÿ"rx  c               
   C   sÆ   ddl m} m} tjdddgdddggd	d
gd�}tj ddg¡�z d|d	< tjt	dd��}|| ƒ ƒ}dddg|d	< W 5 Q R X t
|ƒdksŽt‚|d j|jd ks¦t‚d|d jks¸t‚W 5 Q R X dS )z€
    Test warnings related to table replace change in #5556:
    Test 'always' setting that raises warning for any replace.
    r   )ÚcurrentframeÚgetframeinfor   r+   r,   r0   r8   r9   r-   r:   r¡   rn  Úalwayszreplaced column 'a'r�   rr   rS   rq  Z
test_tableN)Úinspectry  rz  r   r   rr  rs  r\   r7  r   r…   rV   Úlinenor¬  )ry  rz  rM   ru  Ú	frameinfor   r   r    Ú6test_replace_update_column_via_setitem_warnings_alwaysg
  s    "
r  c               
   C   sÆ   t jdddgdddggddgd	�} | d }d
| d _t j dd¡�z t j dddddg¡�X d| d< || d kstt‚dddg| d< || d ks’t‚t | d dddgk¡s®t‚W 5 Q R X W 5 Q R X dS )zh
    Test the replace_inplace config option related to #5556.  In this
    case no replace is done.
    r   r+   r,   r0   r8   r9   r-   r:   r¡   rj   Zreplace_inplaceTrn  r{  ro  rp  rL  r   rr   rS   rq  N)r   r   rk   rr  rs  rV   rc   rd   )rM   rC  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s2t‚| dd… }|  ¡ }t  | ¡}||jks^t‚||jkslt‚||jkszt‚| jd |jd ks’t‚| jd |jd ksªt‚| jd |jd ksÂt‚dS )	zbTest whether a new Table inherits the primary_key attribute from
    its parent Table. Issue #4672)r+   r,   r+   r   )r>   r=   r9   r8   r  r¡   r-   r   Nr   )r   r   r�  Zprimary_keyrV   r©   Úloc)rM   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ksNt‚dS )	z”Test 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)r3   ÚguessN)r   r   r   Úwriterª  Úgetvaluerk   rV   )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s8t‚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   rV   )rþ   r-  r”   r   r   r    Ú test_create_table_from_final_row·
  s    r‰  c                  C   sˆ   dddg} t j| dddidd�}tjd	d
dgddgd�}tjdddgdgd�}t ||jddgd�¡sjt‚t ||jdgd�¡s„t‚d S )N)r   rÀ   r¯   )r0   r  r°   )r8   çffffff @Úzr  r2   zfirst table)r˜  r¤  ÚS1)rÆ  r¢   r4   rJ   )r   rÀ   )r0   r  )r8   rŠ  )r-   r  )r:   z<f8rI   )ó   x)ó   y)ó   z)r@   rŒ  r-   r:   r¡   r@   )r   r   rc   rh   r±  r%  rV   )Z	data_rowsrþ   r-   r:   r   r   r    Útest_key_values_in_as_arrayÀ
  s    
ür�  c                  C   sr  t jdddgdddgddd	ggd
d�} | d  ¡ dddgks@t‚t| d  ¡ dddgƒ | d  ¡ dddgksrt‚t| d  ¡ d tƒsŒt‚t| d  ¡ d tƒs¦t‚t| d  ¡ d tƒsÀt‚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�st‚| d  ¡ ddgddggk�s.t‚t| d  ¡ d d tƒ�sNt‚t| d  ¡ d d tƒ�snt‚d S )Nr   r+   r,   r½  gš™™™™™@gffffff
@s   foos   bars   hellor  r¡   r-   r:   r@   ÚfooÚbarro   r   r0   s   world©r-   r@   rp   )	r   r   ÚtolistrV   r   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)rN   rO   rP   r   r‘  r’  Úbazr   r   r   r    r—  é
  s   
r—  c                  C   sØ  t tjƒdkst‚tddggƒ} d| jks.t‚| jd ks<t‚d| jksJt‚| jdksXt‚d| jksft‚| j d¡ | jdgks‚t‚| jdks�t‚d| _| jdks¤t‚t 	t 
| ¡¡}|jd ksÂt‚|jdksÐt‚|jdgksàt‚d ddggfD ]B}t|dddd	�}|jdk�st‚|jdk�s"t‚|jdksît‚qît|ƒ}|jdk�sJt‚|jdk�sZt‚|jdk�sjt‚t|d
dd�}|jd
k�sˆt‚|jdk�s˜t‚|jdk�s¨t‚| `d| jd k�sÀt‚| `d| jk�sÔt‚d S )Nz#<TableAttribute name=baz default=1>r   r+   Z__attributes__rÀ   r™  r,   r’  )r‘  r’  r™  r8   Zfubar)r‘  r’  )Úreprr—  r™  rV   r4   r‘  r’  rö  ÚpickleÚloadsÚdumps)rM   r  rw   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 ksJt‚|jdgksZt‚|jdksht‚d S )Nr   r+   rÀ   r™  )r’  r™  z
ascii.ecsvrÁ  )	r—  r   r†  rª  r‡  r‘  rV   r’  r™  )rM   r÷  r”   r   r   r    Útest_table_attribute_ecsv   s    rŸ  c               	   C   sX   t jtdd�� G dd„ dtƒ} W 5 Q R X t jtdd�� G dd„ dtƒ}W 5 Q R X 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)rN   rO   rP   r   Údescriptionsr   r   r   r    ÚMyTable20  s   r¡  c                   @   s   e Zd Zeƒ ZdS )z+test_table_attribute_fail.<locals>.MyTable3N)rN   rO   rP   r   re   r   r   r   r    ÚMyTable35  s   r¢  )r\   r]   ÚRuntimeErrorr   )r¡  r¢  r   r   r    Útest_table_attribute_fail+  s    r¤  c               	   C   sj   ddgddgg} t jtdd�� t| tjgd� W 5 Q R X t jtdd�� t| d	tjid� W 5 Q R X d S )
Nr¿   rÀ   r/   rg   z4sequence of unit values must match number of columnsr�   r   z0invalid column name c for setting unit attributer@   )r\   r]   r^   r   ri   rj   )Údatr   r   r    Útest_set_units_fail9  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 ]„}|| |d	d
dgd�}|tkršt|d	 t jƒsrt‚t|d
 tjƒs†t‚t|d tjƒsšt‚t	| 
¡ |ƒD ]\}}|jj|ks¨t‚q¨q>q*d S )Nr¿   rÀ   r/   rg   r,   r0   r
  r“  r-   r:   r@   )r   r¢   )ri   rj   r   r   rÒ   rJ  rV   r   r   rÐ   rÑ   rè   rk   )r¥  Z	exp_unitsrO  r   r  rÓ   rk   r   r   r    Útest_set_unitsE  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sPt‚qPq,qd S )
Nr¿   rÀ   r/   rg   )úmy descriptionNr-   r¨  r:   )r   r¢   )r   r   rÐ   rÑ   rè   rì  rV   )r¥  Zexp_descriptionsrO  r   r  rÓ   rì  r   r   r    Útest_set_descriptionsS  s    r©  c                  C   sr   ddddg} t j| dddd�d	 }t j| dd|d
�}t|tjƒsDt‚|d jjd ksXt‚|d jjtj	ksnt‚d S )Nza,bz,sz1,2z3,4rÖ  r   r+   )r3   Ú
data_startZdata_endr   )r3   rª  r   r-   r:   )
r   rª  rÒ   r   ÚRowrV   rè   rk   ri   r   )Útextr   rM   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ksDt‚|d jjtjksZt‚|d jj	dksnt‚|d jj	dkst‚qd	S )
zËTest 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)r3   r   r   r-   r:   N)
r   r   rª  ri   rj   r   rè   rk   rV   rì  )rO  rM   r   r   r    Ú test_set_units_descriptions_readf  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¡sRt‚t | d ddgk¡slt‚t | d ddgk¡s†t‚d	| d d< t | d dd	gk¡s¬t‚d
S )zAExplicitly check re-work of code related to broadcasting in #8933r   r+   r,   r0   r-   r8   r:   r@   rr   N)r   r   rc   rd   rV   r¾  r   r   r    Útest_broadcasting_8933w  s    
"r°  c                     sp  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dddddgd�}|ƒ }	||	d< ||	d< ||	d< ||	d< ||	d< ||	fD ]p}
t|
d ƒˆ k�st‚t|
d ƒˆk�s*t‚t|
d ƒˆk�s@t‚t|
d ƒ|k�sVt‚t|
d ƒ| ksút‚qúdS )z²Test 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©rN   rO   rP   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)rN   rO   rP   r   r   r   ©r´  r²  r   r    r—  —  s   r—  r   r+   T©rd  r,   r0   r8   r-   r:   r@   rC   rq   r¡   N)r   r   r   r   r™   rV   )r³  rµ  r—  r-   r:   r@   rC   rq   rþ   r”   rM   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¡svt‚t | d
 j	 
tj¡ddg¡s˜t‚t | d
 j 
tj¡ddg¡sºt‚| d	 |ksÊt‚| d
 |ksÚt‚d| d
 jjd	 d< |d	 d dk�st‚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   r0   r,   r9   r8   zdeg,degr´   r-   rµ   r¡   r€   r   N)r   r	   rè   r4   r«   rc   rd   rV   r¶   r·   r¸   ri   r³   Údec)rM   r4   rC  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¡sxt‚t | d ddgk¡s’t‚|| d ks¢t‚|| d k	s²t‚d
| d jjd d< |d d dksÚt‚dS )z3Test sorting a table that has a non-mutable column.r+   r   r,   r0   r-   r:   r¡   F)r†  r€   r   N)r   Zsetflagsrè   r4   r«   rc   rd   rV   )rM   rC  rD  r4   r   r   r    Útest_sort_with_non_mutableÉ  s    
r»  c                  C   sn  t jjdddgdddgd�} t jjddd	gdddgd�}| |g}tj|gd
gd�}|| g|d< |d
 jdkspt‚t  |d
 d | k¡sŠt‚t  |d
 d |k¡s¤t‚t  |d
 d j| jk¡sÂt‚t  |d
 d j|jk¡sàt‚|d jdksòt‚t  |d d |k¡�st‚t  |d d | k¡�s*t‚t  |d d j|jk¡�sJt‚t  |d d j| jk¡�sjt‚dS )zTest the fix for #8977r   r   r+   TFr·  r,   r0   r8   r-   r¡   r:   )r+   r,   N)	rc   rÉ  rh   r   r   rv   rV   rd   rd  )Zm0Úm1ZmcrM   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@t‚t | d ddgk¡sZt‚dS )zcTest the update to how data_to_col works (#8972), using the regression
    example from #8971.
    r   r   r-   r+   r:   N)r   r   rc   r�   rd   rV   r¾  r   r   r    Ú!test_data_to_col_convert_strategyö  s
    r¾  c                  C   sª   t  dddg¡} tƒ }t jjddgddg| d�|d	< t  |d	 d
 jddgk¡sTt‚t  |d	 d jddgk¡stt‚t  |d	 d jddgk¡s”t‚t|d	 t	ƒs¦t‚dS )z?Test that adding a masked ndarray with a structured dtype works)r‹  r¤  )r¯   r¤  )r°   r˜  rZ  r[  )FFT)FTFr  r-   r‹  Fr¯   Tr°   N)
rc   rJ   r   rÉ  rh   rd   rd  rV   rÒ   r   )rJ   rM   r   r   r    Útest_structured_masked_column  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¡s¸t‚t ˆd | k¡sÎt‚t ˆd |k¡sät‚t ˆd | k¡sút‚t ‡ ‡fdd„tdƒD ƒ¡�st‚t ‡‡fdd„tdƒD ƒ¡�sBt‚t	ˆd	 ƒtj
k�sZt‚ˆd	 jt t¡k�stt‚t	ˆd
 ƒtj
k�sŒt‚ˆd
 jt t¡k�s¦t‚dD ]}ˆ |¡ �qªt ddd�g}t|dggdd�‰ˆ d¡ dS )z®Test 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-   r:   r¼  Úm2r£   rÁ   c                 3   s"   | ]}ˆd  | ˆ | kV  qdS )r¼  Nr   ©r�  Úii)Úmixed1rM   r   r    rV  -  s     z(test_rows_with_mixins.<locals>.<genexpr>c                 3   s"   | ]}ˆd  | ˆ | kV  qdS )rÀ  Nr   rÁ  )Úmixed2rM   r   r    rV  .  s     )r§   r£   rÁ   r-   r:   i�â  ÚmjdZgbt)rÅ  Úobsr¡   rÆ  N)r   ri   rj   r   r   rc   rd   rV   r)  r™   r   rJ   r®  Zgroup_byr   )rÊ  rý   rÆ  r2   Zmjdsr   )rÃ  rÄ  rM   r    Útest_rows_with_mixins  s6    þ$$rÇ  c               	   C   s¼   dddg} t j| dd�}g }g }| dd¡D ]\}}| |¡ | |¡ q,t |d |k¡s`t‚t |d |k¡svt‚dd	„ | ¡ D ƒ}|| ks”t‚tjt	d
d�� | d¡ W 5 Q R X d S )NrZ  r[  ©r=   r>   r9   r  ©rÆ  r¢   r@   r-   c                 S   s   g | ]}|‘qS r   r   )r�  r-  r   r   r    r‚  O  s     z!test_iterrows.<locals>.<listcomp>zd is not a valid column namer�   rC   )
r   r   Ziterrowsrö  rc   rd   rV   r\   r]   r^   )r¥  rM   Zc_sZa_sr@   r-   rÆ  r   r   r    Útest_iterrows@  s     ý
rÊ  c                  C   s”   dddg} t j| dd�}t| ¡ ttƒ  ¡ ƒƒs4t‚t|j ¡ ttƒ  ¡ ƒƒsRt‚t|j ¡ ttƒ  ¡ ƒƒspt‚| ¡ D ]}t|t j	j
ƒsxt‚qxd S )NrZ  r[  rÈ  r  rÉ  )r   r   rÒ   r³  r™   r   rV   rí   rB  r  r   ©r¥  rM   rê  r   r   r    Útest_values_and_typesV  s    ýrÌ  c                  C   sZ   dddg} t j| dd�}t| ¡ tti ƒ ¡ ƒƒs6t‚t| ¡ ƒD ]}t|tƒsBt‚qBd S )NrZ  r[  r\  r  rÉ  )	r   r   rÒ   r8  r™   r   rV   r›  ÚtuplerË  r   r   r    Ú
test_itemsd  s    ýrÎ  c               	   C   sD   t  ¡ } t t¡� d| _W 5 Q R X t t¡� d| _W 5 Q R X d S )NZ	fake_readZ
fake_write)r   r   r\   r]   ÚAttributeErrorrª  r†  r¾  r   r   r    Útest_read_write_not_replaceabler  s
    rÐ  c                  C   s6   t j d¡} |  dd„ | jD ƒ¡ | jdgks2t‚d S )Nr   c                 s   s   | ]}|d kr|V  qdS ©r-   Nr   rN  r   r   r    rV  ~  s      z3test_keep_columns_with_generator.<locals>.<genexpr>r-   )r   rÇ  rÈ  r`  re   rV   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s4t‚d S )Nr   c                 s   s   | ]}|d kr|V  qdS rÑ  r   rN  r   r   r    rV  …  s      z5test_remove_columns_with_generator.<locals>.<genexpr>r:   r@   )r   rÇ  rÈ  r>  re   rV   r¾  r   r   r    Ú"test_remove_columns_with_generator‚  s    rÓ  c               	   C   sb   t j d¡} tjtdd�� |  ddg¡ W 5 Q R X tjtdd�� |  dddg¡ W 5 Q R X d S ©Nr   zcolumn "d" does not existr�   r@   rC   z%columns {'[de]', '[de]'} do not existrq   )r   rÇ  rÈ  r\   r]   rÏ   r`  r¾  r   r   r    Ú(test_keep_columns_invalid_names_messages‰  s
    rÕ  c               	   C   sb   t j d¡} tjtdd�� |  ddg¡ W 5 Q R X tjtdd�� |  dddg¡ W 5 Q R X d S rÔ  )r   rÇ  rÈ  r\   r]   rÏ   r>  r¾  r   r   r    Ú*test_remove_columns_invalid_names_messages‘  s
    rÖ  Ú	path_typer   ÚPathc                 C   s|   | dkrt j dd¡}nt dd¡}tƒ }dddg|d< | |¡ t |¡}t 	|d dddgk¡sht
‚t j |¡rxt
‚d S )Nr   ú~ztest.csvr   r+   r,   r-   )ÚosÚpathÚjoinÚpathlibrØ  r   r†  rª  rc   rd   rV   Úexists)r×  r!   Z	test_filerþ   r”   r   r   r    Útest_read_write_tilde_path™  s    

rß  c                  C   sB   t ƒ } ttttdƒƒƒ}t d¡}| j||d� | j|ks>t	‚d S )NrS   )rS   r   r¡   )
r   r›  Úmapr   r)  rc   Úemptyrñ   re   rV   )rM   r¢   rh   r   r   r    Útest_add_list_order¨  s
    
râ  )T)Žr©   rô  rÚ  rÝ  r›  r§  Úcollectionsr   Úior   Únumpyrc   r\   Znumpy.testingr   r   Zastropyr   r   ri   Zastropy.coordinatesr	   Z
astropy.ior
   Zastropy.tabler   r   r   r   r   r   Zastropy.tests.helperr   Zastropy.timer   r   Zastropy.utils.compatr   Z"astropy.utils.compat.optional_depsr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   Z!astropy.utils.tests.test_metadatar   Zconftestr   r   Zfixturer!   r"   r]  ZusefixturesrR   r   r–   r¥   rº   rÎ   rÕ   rÚ   rç   rë   rï   r  r1  r3  r;  r_  ra  rg  r^  r–  r—  rš  r�  rµ  r·  r¹  r¼  r¿  rÌ  rÜ  rÞ  Zxfailrß  rà  rå  ræ  rí  rõ  rú  rû  Zskipifrý  r@  rI  rM  rY  rh  ri  rl  rm  rt  rv  rw  rx  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    
4
 
.
*
)
-


;
 
"
i
 9
	

 

,
 f





K
	
I9>
2
8  +
ED]/	1
	,*	
