U
    e»{j{Ž  ã                   @   sÊ  d dl Z d dlZd dlZd dlZd dlmZmZ d dlm	Z
 d dlmZ d dlmZmZmZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZmZmZ d d	lm Z  d d
l!m"Z" d dl#m$Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 dddddgZ3dd„ e 4¡ D ƒZdd„ e 4¡ D ƒZ5dd„ e 4¡ D ƒZdd„ Z6G dd„ dƒZ7G dd „ d ƒZ8d!d"„ Z9d#d$„ Z:ej; <d%d&d'd(d)d*g¡d+d,„ ƒZ=ej; <d-d.d/d0d1d2g¡d3d4„ ƒZ>ej; <d5d6d7d8d9d:d;d<d=g¡d>d?„ ƒZ?d@dA„ Z@dBdC„ ZAdDdE„ ZBdFdG„ ZCdHdI„ ZDdcdKdL„ZEdMdN„ ZFej; <dOeef¡dPdQ„ ƒZGej; <dReHe 4¡ ƒ¡ej; <dOeef¡dSdT„ ƒƒZIej; <dRe5 4¡ ¡ej;jJdUdV�dWdX„ ƒƒZKdYdZ„ ZLej; <d[d\d]d^g¡d_d`„ ƒZMdadb„ ZNdS )dé    N)Úassert_allcloseÚassert_array_equal)Úunits)Úfits)ÚBinTableHDUÚHDUListÚImageHDUÚ
PrimaryHDUÚtable_to_hdu)Ú_fortran_to_python_formatÚ_parse_tdisp_formatÚpython_to_tdisp)Úcompare_attrsÚ
mixin_colsÚserialized_names)ÚColumnÚQTableÚTable)Úsimple_table)ÚTime)Úallclose)ÚUnitScaleError)ÚQuantityInfo)ÚNUMPY_LT_1_22)Úget_pkg_data_filename)ÚAstropyDeprecationWarningÚAstropyUserWarning)Ú_NOT_OVERWRITING_MSG_MATCHÚvalueÚshapeÚformatÚscaleÚlocationc                 C   s(   i | ] \}}|t |tƒrtnt| “qS © )Ú
isinstancer   Ú
time_attrsr   ©Ú.0ÚnameÚcolr#   r#   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/fits/tests/test_connect.pyÚ
<dictcomp>   s   ÿ r+   c                 C   sP   i | ]H\}}t |tƒr"|jjd ksFt |tjƒr:|jjdksFt |tj	ƒr||“qS )r#   ÚO)
r$   r   r"   r   ÚnpÚndarrayÚdtypeÚkindÚuZLogQuantityr&   r#   r#   r*   r+   $   s   
ù c                 C   s   i | ]\}}|t kr||“qS r#   )Úunsupported_colsr&   r#   r#   r*   r+   /   s      c                 C   s.   | j jD ] }t | | || k¡s dS qdS )NFT)r/   Únamesr-   Úall)ÚaÚbr(   r#   r#   r*   Ú
equal_data4   s    r7   c                   @   s4  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 deef¡dd„ ƒZdd„ Ze	j
 deef¡dd„ ƒZe	j
 deef¡dd„ ƒZdd„ Ze	j
 dddg¡dd„ ƒZdd„ Zdd „ Zd!d"„ Ze	j
 deef¡d#d$„ ƒZd%d&„ Ze	j
 d'd(¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7S )8ÚTestSingleTablec              	   C   sF   t jttddddgddddgd	d
ddgƒƒdtfddtfgd�| _d S )Né   é   é   é   r5   r6   ÚcÚdçffffff@ç      @çÍÌÌÌÌÌ@çÍÌÌÌÌÌ!@©r6   ZU1©r/   )r-   ÚarrayÚlistÚzipÚintÚfloatÚdata©Úselfr#   r#   r*   Úsetup_class<   s    &þzTestSingleTable.setup_classc                 C   s<   |d }t | jƒ}|j|dd� t  |¡}t||ƒs8t‚d S )Nútest_simple.ftsT©Ú	overwrite©r   rJ   ÚwriteÚreadr7   ÚAssertionError©rL   Útmp_pathÚfilenameÚt1Út2r#   r#   r*   Útest_simpleB   s
    

zTestSingleTable.test_simplec                 C   s<   |d }t | jƒ}|j|dd� t  |¡}t||ƒs8t‚d S )Nztest_simple.fitTrO   rQ   rU   r#   r#   r*   Útest_simple_pathlibI   s
    

z#TestSingleTable.test_simple_pathlibc                 C   sè   |d }t | jƒ}d|jd< d|jd< d|jd< dd	d
ddg|jd< dddg|jd< |j|dd� t  |¡}t||ƒszt‚|jD ]b}t|jtƒrÊt	t
|j| ƒƒD ]$}|j| | |j| | ks¢t‚q¢q€|j| |j| ks€t‚q€d S )Nútest_simple.fitsr9   ÚAr?   ÚBÚspamÚCÚthisÚisr5   ÚlongÚcommentÚcommentsÚfirstÚsecondÚthirdÚHISTORYTrO   )r   rJ   ÚmetarR   rS   r7   rT   r$   rF   ÚrangeÚlen)rL   rV   rW   rX   rY   ÚkeyÚir#   r#   r*   Útest_simple_metaP   s    





$z TestSingleTable.test_simple_metac              	   C   sX   |d }t | jƒ}d|jd< tjtdd��}|j|dd� W 5 Q R X t|ƒdksTt‚d S )	Nr\   r_   Zttype1zXMeta-data keyword ttype1 will be ignored since it conflicts with a FITS reserved keyword©ÚmatchTrO   r9   )	r   rJ   rj   ÚpytestÚwarnsr   rR   rl   rT   )rL   rV   rW   rX   Úwr#   r#   r*   Útest_simple_meta_conflictingb   s    

ýz,TestSingleTable.test_simple_meta_conflictingc                 C   s>   |d }t | jƒ}|j|ddd� t  |¡}t||ƒs:t‚dS )zE
        Test that file type is recognized without extension
        rZ   Tr   )rP   r    NrQ   rU   r#   r#   r*   Útest_simple_noextensionq   s
    

z'TestSingleTable.test_simple_noextensionÚ
table_typec                 C   sˆ   |d }|| j ƒ}tj|d _tjtj |d _|j|dd� | |¡}t||ƒsVt	‚|d jtjksjt	‚|d jtjtj ks„t	‚d S )Nútest_with_units.fitsr5   r=   TrO   )
rJ   r1   ÚmÚunitÚkmÚsrR   rS   r7   rT   ©rL   rw   rV   rW   rX   rY   r#   r#   r*   Útest_with_units{   s    

zTestSingleTable.test_with_unitsc              
   C   sœ  |d }t  d¡}tƒ }t d¡| |d< t t¡�}|j|dd� W 5 Q R X t	|ƒdks^t
‚dt|d jƒkstt
‚tjt jd	d
��}t |¡}W 5 Q R X t	|ƒdksªt
‚t|d jt jƒsÀt
‚t|d jƒdksÖt
‚t |d j|d jk¡sôt
‚t  |¡�X t |¡}|d j|k�st
‚t||ƒ�s.t
‚t t¡� |j|dd� W 5 Q R X W 5 Q R X t  dt ji¡�& t |¡}|d jt jk�sŽt
‚W 5 Q R X d S )Nrx   Zbandpass_sol_lumé   ÚlTrO   r9   r   z 'bandpass_sol_lum' did not parserp   )r1   Údef_unitr   r-   Úonesrr   rs   r   rR   rl   rT   ÚstrÚmessageÚUnitsWarningrS   r$   rz   ZUnrecognizedUnitr4   r   Zadd_enabled_unitsr7   Úset_enabled_aliasesZLsun)rL   rV   rW   rz   Útrt   rY   Út3r#   r#   r*   Útest_with_custom_units_qtable‡   s6    
 ÿ
"
z-TestSingleTable.test_with_custom_units_qtablec              	   C   sŒ   t | jƒ}d|jd _d|jd _t ttjtjd�¡� | 	|¡}W 5 Q R X |d jtjksbt
‚|d jtjtjtj tj  ksˆt
‚d S )NÚ	Angstromsr   zergs/(cm.s.Angstroms)r:   )rŠ   Zergsr5   r=   )r   rJ   Úcolumnsrz   r1   r†   ÚdictZAAZergrS   rT   Úcmr|   )rL   rw   Úhdur‡   r#   r#   r*   Útest_read_with_unit_aliases­   s    
z+TestSingleTable.test_read_with_unit_aliasesc                 C   s�   |d }|| j ƒ}d|d _d|d _d|d _|j|dd	� | |¡}t||ƒsVt‚|d jdksht‚|d jdkszt‚|d jdksŒt‚d S )
Nztest_with_format.fitsz{:5d}r5   z{:>20}r6   z{:6.2f}r=   TrO   )rJ   r    rR   rS   r7   rT   r}   r#   r#   r*   Útest_with_format·   s    




z TestSingleTable.test_with_formatc                 C   sÐ   |d }t | jdd�}ddddg|jd< ddddg|jd< ddddg|jd< |j|dd	� t  |¡}t||ƒsrt‚t |d j|d jk¡s�t‚t |d j|d jk¡s®t‚t |d j|d jk¡sÌt‚d S )
Nztest_masked.fitsT©Úmaskedr9   r   r5   r6   r=   rO   )	r   rJ   ÚmaskrR   rS   r7   rT   r-   r4   rU   r#   r#   r*   Útest_maskedÅ   s    
zTestSingleTable.test_maskedr’   TFc           	      C   sV  |d }t jjddddgddddgd�}t jjd	d
ddgddddgdd�}t jj||gdd�}t|||gdddg|d�}|j|dd� t |¡}t|d jt j	dt j	dgƒ t|d jt j	d
dt j	gƒ t|d jt j|d j|d jgdd�ƒ t  
|d j|d jk¡�st‚t  
|d j|d jk¡�s2t‚t  
|d j|d jk¡�sRt‚dS )zµCheck that masked values by default are replaced by NaN.

        This should work for any shape and be independent of whether the
        Table is formally masked or not.

        útest_masked_nan.fitsç      @ç      !@ç      @ç      @r9   r   ©r“   ç      @r@   ç      @ç     À!@Zf4)r“   r/   éÿÿÿÿ©Zaxisr5   r6   r=   )r3   r’   TrO   N)r-   ÚmaÚMaskedArrayÚstackr   rR   rS   r   rJ   Únanr4   r“   rT   )	rL   r’   rV   rW   r5   r6   r=   rX   rY   r#   r#   r*   Útest_masked_nanÒ   s      "
 ÿ  zTestSingleTable.test_masked_nanc                 C   sJ  |d }t jjddddgddddgd�}t jjd	d
ddgddddgd�}t jj||gdd�}t|||gdddgd�}|j|dd� t |¡}t|d jddddgƒ t|d jd	d
ddgƒ t|d jt j|d j|d jgdd�ƒ t  	|d j
|d j
k¡�st‚t  	|d j
|d j
k¡�s&t‚t  	|d j
|d j
k¡�sFt‚d S )Nr•   r–   r—   r˜   r™   r9   r   rš   r›   r@   rœ   r�   rž   rŸ   r5   r6   r=   ©r3   TrO   )r-   r    r¡   r¢   r   rR   rS   r   rJ   r4   r“   rT   )rL   rV   rW   r5   r6   r=   rX   rY   r#   r#   r*   Útest_masked_serialize_data_maskê   s       
 ÿ  z/TestSingleTable.test_masked_serialize_data_maskc              	   C   sT   |d }t | jƒ}|j|dd� t|dƒ�}t |¡}W 5 Q R X t|| jƒsPt‚d S )Nztest_read_from_fileobj.fitsTrO   Úrb)r   rJ   ÚwritetoÚopenr   rS   r7   rT   )rL   rV   rW   rŽ   Úfr‡   r#   r#   r*   Útest_read_from_fileobjû   s    
z&TestSingleTable.test_read_from_fileobjc              	   C   sh   t | jƒ}d|jd _d|jd _d|jd _tjtjdd�� t 	|¡}W 5 Q R X t
|| jƒsdt‚d S )	NZRADIANSr   r_   r9   Z	millieggsr:   zdid not parse as fits unitrp   )r   rJ   r‹   rz   rr   rs   r1   r…   r   rS   r7   rT   ©rL   rŽ   r‡   r#   r#   r*   Ú test_read_with_nonstandard_units  s    
z0TestSingleTable.test_read_with_nonstandard_unitsc           	   	   C   sÄ   |d }t  d¡}|ƒ }dddg| |d< tjtdd��}| |¡ W 5 Q R X t|ƒdks^t‚|tkr~d	t	|d
 j
ƒks”t‚ndt	|d
 j
ƒks”t‚t |¡�}|d }d|jks¶t‚W 5 Q R X d S )Nztest_nonstandard_units.fitsr_   ç      ð?ç       @g      @r5   rp   r9   z cannot be recovered in reading. r   z lost to non-astropy fits readersZTUNIT1)r1   r�   rr   rs   r   rR   rl   rT   r   rƒ   r„   r   r©   Úheader)	rL   rw   rV   rW   r_   r‡   rt   ÚffrŽ   r#   r#   r*   Ú!test_write_drop_nonstandard_units  s    
z1TestSingleTable.test_write_drop_nonstandard_unitsc                 C   s\   |d }t | jƒ}|j|dd� t j|dd�}t j|dd�}t||ƒsJt‚~~~t ¡  d S )NrN   TrO   F©Úmemmap)r   rJ   rR   rS   r7   rT   ÚgcÚcollect)rL   rV   rW   rX   rY   rˆ   r#   r#   r*   Útest_memmap   s    
zTestSingleTable.test_memmapr´   )FTc                 C   sˆ   |d }t | jƒ}|j|dd� t j|d|d�}t j|d|d�}|d jjdksTt‚|d jjdksht‚t||ƒsvt‚~~~t 	¡  d S )	NrN   TrO   F)Zcharacter_as_bytesr´   r6   ÚUÚS)
r   rJ   rR   rS   r/   r0   rT   r7   rµ   r¶   )rL   rV   r´   rW   rX   rY   rˆ   r#   r#   r*   Útest_character_as_bytes,  s    
z'TestSingleTable.test_character_as_bytesc                 C   sb   |d }t ddgdggiƒ}|j|dd� t  |¡}|d jdksFt‚t|d d ƒdks^t‚d S )	Nztest_oned_single_element.fitsÚxr9   r:   TrO   )r:   r9   r   )r   rR   rS   r   rT   rl   )rL   rV   rW   ÚtablerS   r#   r#   r*   Útest_oned_single_element;  s    
z(TestSingleTable.test_oned_single_elementc                    sô   t | jƒ}t|ƒ‰ d‡ fdd„	}|d }|j|dd� |j|dd� ||dƒ |j|ddd� |j|dd� ||dƒ |j|dd	� |j|dd	� ||d
ƒ t t dd
g¡ƒ}|j|dd	� |j|dd� ||dd
d� t|t j|dd�ƒsðt‚d S )Nr9   c              	      sb   t  | ¡�N}t|ƒ|kst‚||d … D ]*}|jˆ jks<t‚t |jˆ jk¡s(t‚q(W 5 Q R X d S ©N)r   r©   rl   rT   r°   r-   r4   rJ   )rW   ÚexpectedÚ
start_fromZhdu_listZ	hdu_table©rŽ   r#   r*   Úcheck_equalH  s
    z6TestSingleTable.test_write_append.<locals>.check_equalztest_write_append.fitsT)Úappendr;   )rÃ   rP   rO   r:   )rÀ   rÁ   )r9   )	r   rJ   r
   rR   r-   rE   r7   rS   rT   )rL   rV   r‡   rÂ   rW   rY   r#   rÁ   r*   Útest_write_appendD  s$    



z!TestSingleTable.test_write_appendc              	   C   sR   t | jƒ}|d }| |¡ tjttd�� | |¡ W 5 Q R X |j|dd� d S )Nztest_write_overwrite.fitsrp   TrO   )r   rJ   rR   rr   ÚraisesÚOSErrorr   )rL   rV   r‡   rW   r#   r#   r*   Útest_write_overwritee  s    

z$TestSingleTable.test_write_overwritec                 C   s    |d }t jdt ddtjg¡dd�}t j |g¡}| |¡ t 	|¡}t
|jƒsVt‚|jd sdt‚tj	|dd�}|jd ks€t‚tj	|d	d
�}|jd ksœt‚d S )Nz&test_inexact_format_parse_on_read.fitsr5   r9   r:   ÚE©r(   rE   r    F©Zmask_invalidTr³   )r   r   r-   rE   r£   ZTableHDUÚfrom_columnsr¨   r   rS   Úanyr“   rT   )rL   rV   rW   Úc1Z	table_hduÚtabr#   r#   r*   Útest_mask_nans_on_readm  s    

z&TestSingleTable.test_mask_nans_on_readc                 C   st   |d }t jdtjddddgdd�d	dd
d�}t j |g¡}|j|dd� t |¡}t	|j
ƒsbt‚|j
d spt‚d S )Nú#test_null_format_parse_on_read.fitsr5   r9   r:   éc   i`ê  Úu2rD   ÚIi €  )r(   rE   r    ÚnullZbzeroTrO   ©r   r   r-   rE   r   rË   r¨   r   rS   rÌ   r“   rT   ©rL   rV   rW   r)   Zbin_table_hdurÎ   r#   r#   r*   Útest_mask_null_on_read~  s    û
z&TestSingleTable.test_mask_null_on_readc                 C   sŠ   |d }t jdtjdddgdd�dd	�}t j |g¡}|j|d
d� t |¡}t	|j
ƒs\t‚|j
d sjt‚tj|dd�}|j
d ks†t‚d S )NrÐ   r5   s   foos   baró    z|S3rD   ZA3rÉ   TrO   r:   FrÊ   rÕ   rÖ   r#   r#   r*   Útest_mask_str_on_readŽ  s      ÿ
z%TestSingleTable.test_mask_str_on_readN) Ú__name__Ú
__module__Ú__qualname__rM   rZ   r[   ro   ru   rv   rr   ÚmarkÚparametrizer   r   r~   r‰   r�   r�   r”   r¤   r¦   r«   r­   r²   r·   rº   r½   rÄ   rÇ   rÏ   r×   rÙ   r#   r#   r#   r*   r8   ;   s<   

&
	

	

	!r8   c                   @   sÐ  e Z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ej	 
dddg¡dd„ ƒZej	 
dddg¡dd„ ƒZdd„ Zej	 
ddddddg¡dd„ ƒZej	 
ddddg¡dd „ ƒZej	 
ddddg¡d!d"„ ƒZd#d$„ Zd%d&„ Zej	 
dddd'g¡d(d)„ ƒZej	 
dddg¡d*d+„ ƒZej	 
dddg¡d,d-„ ƒZej	 
dddg¡d.d/„ ƒZej	 
ddddg¡d0d1„ ƒZej	 
ddddddg¡d2d3„ ƒZej	 
ddddg¡d4d5„ ƒZej	 
dd'ddg¡d6d7„ ƒZd'S )8ÚTestMultipleHDUc              	   C   sD  t jttddddgddddgd	d
ddgƒƒdtfddtfgd�| _t jttdd	ddgd	d
ddgƒƒdtfdtfgd�| _t jttddddgd	d
ddgƒƒdtfdtfgd�| _t	ƒ }t
| jdd�}t
| jdd�}tt  d¡dd�}t
| jƒ}t|||||gƒ| _t||||gƒ| _t|||gƒ| _t|||gƒ| _t||gƒ| _d S )Nr9   r:   r;   r<   r5   r6   r=   r>   r?   r@   rA   rB   rC   rD   gffffffö?gš™™™™™	@gÍÌÌÌÌÌ@ÚpÚqr]   r^   rf   )r(   rg   )r;   r;   rh   )r-   rE   rF   rG   rH   rI   Údata1Údata2Údata3r	   r   r   r‚   r   ÚhdusÚhdusbÚhdus3Úhdus2Úhdus1)rL   Zhdu0Zhdu1Zhdu2Zhdu3Zhdu4r#   r#   r*   rM   Ÿ  s,    &þþþ
zTestMultipleHDU.setup_classc                 C   s   | ` d S r¾   )rå   rK   r#   r#   r*   Úteardown_class¸  s    zTestMultipleHDU.teardown_classc                 C   s   t  d¡ d S )NÚalways)ÚwarningsÚfilterwarnings)rL   Úmethodr#   r#   r*   Úsetup_method»  s    zTestMultipleHDU.setup_methodc              	   C   s”   |d }| j  |¡ tjtdd�� t |¡}W 5 Q R X t|| jƒsHt	‚|d }| j
 |¡ tjtdd�� t |¡}W 5 Q R X t|| jƒs�t	‚d S )Nztest_read.fitsúbhdu= was not specified but multiple tables are present, reading in first available table \(hdu=1\)rp   ztest_read_2.fitsúbhdu= was not specified but multiple tables are present, reading in first available table \(hdu=2\))rå   r¨   rr   rs   r   r   rS   r7   râ   rT   ræ   rã   )rL   rV   rW   r‡   rˆ   r#   r#   r*   Ú	test_read¾  s     þþzTestMultipleHDU.test_readc              	   C   sP   |d }| j  |¡ t t¡�}tj|dd� W 5 Q R X |jjd dksLt	‚d S )Nztest_read_with_hdu_0.fitsr   rÁ   úNo table found in hdu=0)
rå   r¨   rr   rÅ   Ú
ValueErrorr   rS   r   ÚargsrT   )rL   rV   rW   Úexcr#   r#   r*   Útest_read_with_hdu_0Õ  s
    z$TestMultipleHDU.test_read_with_hdu_0rŽ   r9   rf   c                 C   s6   |d }| j  |¡ tj||d�}t|| jƒs2t‚d S )Nztest_read_with_hdu_1.fitsrÁ   )rå   r¨   r   rS   r7   râ   rT   ©rL   rV   rŽ   rW   r‡   r#   r#   r*   Útest_read_with_hdu_1Ü  s    z$TestMultipleHDU.test_read_with_hdu_1r:   rg   c                 C   s6   |d }| j  |¡ tj||d�}t|| jƒs2t‚d S )Nztest_read_with_hdu_2.fitsrÁ   )rå   r¨   r   rS   r7   rã   rT   rø   r#   r#   r*   Útest_read_with_hdu_2ã  s    z$TestMultipleHDU.test_read_with_hdu_2r;   rh   c              	   C   s@   |d }| j  |¡ tjtdd�� tj||d� W 5 Q R X d S )Nztest_read_with_hdu_3.fitsúNo table found in hdu=3rp   rÁ   )rå   r¨   rr   rÅ   rô   r   rS   )rL   rV   rŽ   rW   r#   r#   r*   Útest_read_with_hdu_3ê  s    z$TestMultipleHDU.test_read_with_hdu_3c                 C   s6   |d }| j  |¡ tj|dd�}t|| jƒs2t‚d S )Nztest_read_with_hdu_4.fitsr<   rÁ   )rå   r¨   r   rS   r7   rä   rT   )rL   rV   rW   r‡   r#   r#   r*   Útest_read_with_hdu_4ñ  s    z$TestMultipleHDU.test_read_with_hdu_4Ú1Ú c              	   C   sX   |d }| j  |¡ tjtd|› d�d�� tj||d�}W 5 Q R X t|| jƒsTt	‚d S )Nztest_warn_with_hdu_1.fitsúSpecified hdu=ú6 not found, reading in first available table \(hdu=1\)rp   rÁ   )
ré   r¨   rr   rs   r   r   rS   r7   râ   rT   )rL   rV   rŽ   rW   rX   r#   r#   r*   Útest_read_with_hdu_missing÷  s    
þz*TestMultipleHDU.test_read_with_hdu_missingr   c              	   C   sX   |d }| j  |¡ tjtd|› d�d�� tj||d�}W 5 Q R X t|| jƒsTt	‚d S )Nztest_warn_with_hdu_2.fitsú No table found in specified hdu=ú,, reading in first available table \(hdu=1\)rp   rÁ   )
rè   r¨   rr   rs   r   r   rS   r7   râ   rT   )rL   rV   rŽ   rW   rY   r#   r#   r*   Útest_read_with_hdu_warning  s    
þz*TestMultipleHDU.test_read_with_hdu_warningc              	   C   sX   |d }| j  |¡ tjtd|› d�d�� tj||d�}W 5 Q R X t|| jƒsTt	‚d S )Nztest_warn_with_hdu_3.fitsr  ú,, reading in first available table \(hdu=2\)rp   rÁ   )
rç   r¨   rr   rs   r   r   rS   r7   rã   rT   )rL   rV   rŽ   rW   rˆ   r#   r#   r*   Útest_read_in_last_hdu  s    
þz%TestMultipleHDU.test_read_in_last_hduc              	   C   sp   t jtdd�� t | j¡}W 5 Q R X t|| jƒs6t‚t jtdd�� t | j	¡}W 5 Q R X t|| j
ƒslt‚d S )Nrð   rp   rñ   )rr   rs   r   r   rS   rå   r7   râ   rT   ræ   rã   )rL   r‡   rˆ   r#   r#   r*   Útest_read_from_hdulist  s    þþz&TestMultipleHDU.test_read_from_hdulistc              	   C   s>   t  t¡�}tj| jdd� W 5 Q R X |jjd dks:t‚d S )Nr   rÁ   ró   )	rr   rÅ   rô   r   rS   rå   r   rõ   rT   )rL   rö   r#   r#   r*   Ú!test_read_from_hdulist_with_hdu_0.  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_0Nc                 C   s$   t j| j|d�}t|| jƒs t‚d S ©NrÁ   )r   rS   ré   r7   râ   rT   r¬   r#   r#   r*   Ú(test_read_from_hdulist_with_single_table3  s    z8TestMultipleHDU.test_read_from_hdulist_with_single_tablec                 C   s$   t j| j|d�}t|| jƒs t‚d S r
  ©r   rS   rå   r7   râ   rT   r¬   r#   r#   r*   Ú!test_read_from_hdulist_with_hdu_18  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_1c                 C   s$   t j| j|d�}t|| jƒs t‚d S r
  )r   rS   rå   r7   rã   rT   r¬   r#   r#   r*   Ú!test_read_from_hdulist_with_hdu_2=  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_2c              	   C   s.   t jtdd�� tj| j|d� W 5 Q R X d S )Nrû   rp   rÁ   )rr   rÅ   rô   r   rS   rå   )rL   rŽ   r#   r#   r*   Ú!test_read_from_hdulist_with_hdu_3B  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_3c              	   C   sF   t jtd|› d�d�� tj| j|d�}W 5 Q R X t|| jƒsBt‚d S )Nr  r  rp   rÁ   )	rr   rs   r   r   rS   rè   r7   râ   rT   )rL   rŽ   rY   r#   r#   r*   Ú'test_read_from_hdulist_with_hdu_warningG  s    
þz7TestMultipleHDU.test_read_from_hdulist_with_hdu_warningc              	   C   sF   t jtd|› d�d�� tj| j|d�}W 5 Q R X t|| jƒsBt‚d S )Nr   r  rp   rÁ   )	rr   rs   r   r   rS   ré   r7   râ   rT   )rL   rŽ   rX   r#   r#   r*   Ú'test_read_from_hdulist_with_hdu_missingQ  s    
þz7TestMultipleHDU.test_read_from_hdulist_with_hdu_missingc              	   C   sF   t jtd|› d�d�� tj| j|d�}W 5 Q R X t|| jƒsBt‚d S )Nr  r  rp   rÁ   )	rr   rs   r   r   rS   rç   r7   rã   rT   )rL   rŽ   rˆ   r#   r#   r*   Ú"test_read_from_hdulist_in_last_hdu[  s    
þz2TestMultipleHDU.test_read_from_hdulist_in_last_hduc                 C   s$   t  | jd ¡}t|| jƒs t‚d S )Nr9   r  r¬   r#   r#   r*   Útest_read_from_single_hdue  s    z)TestMultipleHDU.test_read_from_single_hdu)rÚ   rÛ   rÜ   rM   rê   rï   rò   r÷   rr   rÝ   rÞ   rù   rú   rü   rý   r  r  r  r  r	  r  r  r  r  r  r  r  r  r#   r#   r#   r*   rß   ž  sH   










	
	
	rß   c                  C   sê   t  tdƒ¡} t | d jt ddg¡k¡s0t‚t| d dƒrBt‚t| d dƒrTt‚t| d dƒrft‚t | d j	t dd	g¡k¡sˆt‚t | d j	t d
dg¡k¡sªt‚t
| d j	t ddg¡ƒ t | d j	t ddg¡k¡sæt‚dS )zŒ
    Regression test for #1795 - this bug originally caused columns where TNULL
    was not defined to have their first element masked.
    zdata/tb.fitsrÍ   FÚc2r“   Úc3Zc4r9   r:   s   abcs   xy g"Z3£™™@g±£™¹ÌÌ@TN)r   rS   r   r-   r4   r“   rE   rT   ÚhasattrrJ   r   )r‡   r#   r#   r*   Útest_masking_regression_1795k  s    """r  c               	   C   sn   dddg} dddg}ddd	g}t | ||gd
ddid�}d|d _tjtdd�� |jdddd� W 5 Q R X d S )Nr9   r<   r   r¯   g      @gffffff @r»   ÚyÚz)r5   r6   r=   r(   zfirst table)r3   rj   z1.2r5   z­The column 'a' could not be stored in FITS format because it has a scale '\(1\.2\)' that is not recognized by the FITS standard\. Either scale the data or change the units\.rp   zt.fitsr   T)r    rP   )r   rz   rr   rÅ   r   rR   )r5   r6   r=   r‡   r#   r#   r*   Útest_scale_error{  s    



þr  ztdisp_str, format_return)zEN10.5)ÚENÚ10Ú5N)zF6.2)ÚFÚ6Ú2N)zB5.10)r^   r  r  N)zE10.5E3)rÈ   r  r  Ú3)ZA21)r]   Ú21NNc                 C   s   t | ƒ|kst‚d S r¾   )r   rT   )Ú	tdisp_strZformat_returnr#   r#   r*   Útest_parse_tdisp_format‹  s    r$  ztdisp_str, format_str_return)zG15.4E2z{:15.4g})zZ5.10z{:5x})zI6.5z{:6d})ZL8z{:>8})zE20.7z{:20.7e}c                 C   s   t | ƒ|kst‚d S r¾   )r   rT   )r#  Zformat_str_returnr#   r#   r*   Útest_fortran_to_python_format™  s    r%  zfmt_str, tdisp_str)z{:3d}ÚI3)Z3dr&  )z7.3fzF7.3)z{:>4}ZA4)z{:7.4f}zF7.4)z%5.3gzG5.3)z%10sZA10)z%.4fzF13.4c                 C   s   t | ƒ|kst‚d S r¾   ©r   rT   )Zfmt_strr#  r#   r#   r*   Útest_python_to_tdisp§  s    r(  c                   C   s   t ddd�dkst‚d S )Nz{:>7}T)Zlogical_dtypeZL7r'  r#   r#   r#   r*   Útest_logical_python_to_tdisp¸  s    r)  c              	   C   s–   t jdtd�}|ddd… t jk t|gƒ}|j| d dd� t | d ¡�@}|d jd	 j	t  	d
¡kslt
‚t  |d jd	 |k¡sˆt
‚W 5 Q R X dS )z›
    Regression test for https://github.com/astropy/astropy/issues/1953

    Ensures that Table columns of bools are properly written to a FITS table.
    r   rD   Nr:   ú	test.fitsTrO   r9   Úcol0Úbool)r-   r‚   r,  ZFalse_r   rR   r   r©   rJ   r/   rT   r4   )rV   Zarrr‡   Úhdulr#   r#   r*   Útest_bool_column¼  s    
r.  c              	   C   s¸   t t dddg¡gƒ}|j| d dd� t | d ¡�>}t |d jd dddgk¡sZt‚|d j	d	 d
kspt‚W 5 Q R X t t dg¡gƒ}t
 t¡� |j| d dd� W 5 Q R X dS )a  
    Test that a column of unicode strings is still written as one
    byte-per-character in the FITS table (so long as the column can be ASCII
    encoded).

    Regression test for one of the issues fixed in
    https://github.com/astropy/astropy/pull/4228
    r5   r6   Úcdr*  TrO   r9   r+  ZTFORM1Z2Au   â˜ƒN)r   r-   rE   rR   r   r©   r4   rJ   rT   r°   rr   rÅ   ÚUnicodeEncodeError)rV   r‡   r-  rY   r#   r#   r*   Útest_unicode_columnÎ  s    
" r1  c              	   C   s    | d }t ddgddggddgd�}d	|d _d
|d _tjtjdd��}|j|dd� W 5 Q R X t|ƒdksrt‚tjtjdd��}t j	|dd� W 5 Q R X d S )Nztest_unit.fitsr9   r:   r;   r<   r5   r6   r¥   zm/sz
not-a-unitz''not-a-unit' did not parse as fits unitrp   TrO   rÁ   )
r   rz   rr   rs   r1   r…   rR   rl   rT   rS   )rV   rW   rX   rt   r#   r#   r*   Útest_unit_warnings_read_writeå  s"    

 ÿ ÿr2  c               
   C   sT   t dƒ} tjtdd�� t | ¡}W 5 Q R X |jd dddddddddg	ksPt‚d	S )
zL
    Regression test for https://github.com/astropy/astropy/issues/6079
    zdata/stddata.fitsz6hdu= was not specified but multiple tables are presentrp   re   rÿ   z  *** End of mandatory fields ***z *** Column names ***z *** Column formats ***N)r   rr   rs   r   r   rS   rj   rT   )rW   r‡   r#   r#   r*   Útest_convert_comment_convention÷  s"    þ÷r3  Tc           	   
   C   s,  |r| j |j kst‚ddddddg}|| D ]ú}| }|}| d¡D ]B}zt||ƒ}t||ƒ}W qB tk
r‚   || }|| }Y qBX qB|dkr¦|d krši }|d kr¦i }t|tjƒrÒ|jj	dkrÒt
||d	d
�sÐt‚q,t|tjƒ�rtrü|jrü|j|jksút‚ntj||dd��s&t‚q,t ||k¡s,t‚q,d S )Nz	info.namezinfo.formatz	info.unitzinfo.descriptionz	info.metaz
info.dtypeÚ.rª   gVçž¯Ò<)ZrtolÚsafe)Zcasting)Ú	__class__rT   ÚsplitÚgetattrÚAttributeErrorr$   r-   r.   r/   r0   Úquantity_allcloser   r3   Zcan_castr4   )	Zobj1Úobj2ÚattrsÚcompare_classZ
info_attrsÚattrZa1Za2Zsubattrr#   r#   r*   Úassert_objects_equal  s>    ú

r?  c           
      C   sÚ   | d }t tƒ}tdd„ |D ƒ|d�}|j|dd� tj|ddd�}|j|jksTt‚|j 	¡ D ]v\}}|| }t
|tƒr€|j|_t| }d}	t
|jtƒrÆt|ƒtks¨t‚d	g}d
}	t |j|k¡sÆt‚t||||	ƒ q^dS )zWTest writing as QTable and reading as Table.  Ensure correct classes
    come out.
    r\   c                 S   s   g | ]}t | ‘qS r#   ©r   ©r'   r(   r#   r#   r*   Ú
<listcomp>E  s     z4test_fits_mixins_qtable_to_table.<locals>.<listcomp>r¥   r   ©r    T©r    Zastropy_nativerz   FN)Úsortedr   r   rR   r   rS   ÚcolnamesrT   r‹   Úitemsr$   r   r    r   Úinfor   Útyper   r-   r4   r   r?  )
rV   rW   r3   r‡   rY   r(   r)   Zcol2r<  r=  r#   r#   r*   Ú test_fits_mixins_qtable_to_table=  s$    
rJ  Ú	table_clsc           	   	   C   s(  |d }t tƒ}g }t tƒD ]&}| tt| tƒr8|gnt| ¡ q| dd„ |D ƒ|d�}d|jd< ddd	d
g|jd< dddg|jd< |j|dd� | j|ddd�}|jd dks¶t	‚|jd ddd	d
gksÐt	‚|jd dddgksèt	‚|j
|j
ksøt	‚t |¡�}|d jj|k�st	‚W 5 Q R X dS )zGTest write/read all cols at once and validate intermediate column namesr\   c                 S   s   g | ]}t | ‘qS r#   r@  rA  r#   r#   r*   rB  m  s     z+test_fits_mixins_as_one.<locals>.<listcomp>r¥   r_   r`   ra   rb   r5   rd   re   rf   rg   rh   Úhistoryr   rC  TrD  ri   r9   N)rE  r   Úextendr$   r   r   rj   rR   rS   rT   rF  r   r©   r‹   r3   )	rK  rV   rW   r3   Zall_serialized_namesr(   r‡   rY   rå   r#   r#   r*   Útest_fits_mixins_as_oneb  s&    ÿ
rN  Úname_colc                 C   s(  |d }|\}}ddg}| |||gd|dgd�}d|| j _ttdƒƒd	d
idœ|| j _|jsjt d¡ |j|dd� | j	|ddd�}t
|tƒrž|j|| _|j|jks®t‚|jD ].}	|	dkrÆdgnt|	 }
t||	 ||	 |
ƒ q´| d¡�r$|| jjjtjk�s
t‚|| jjjtjk�s$t‚dS )z<Test write/read one col at a time and do detailed validationr\   r®   r¯   rÍ   r  r¥   zmy 


 descriptioné2   r5   ZÈbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rF   rŒ   z7column is not a mixin (e.g. Quantity subclass in Table)r   rC  TrD  )rÍ   r  rJ   ÚtmN)rH  ÚdescriptionrF   rk   rj   Zhas_mixin_columnsrr   ÚskiprR   rS   r$   r   r    rF  rT   r   r?  Ú
startswithÚ_timeZjd1r6  r-   r.   Zjd2)rK  rO  rV   rW   r(   r)   r=   r‡   rY   ZcolnameÚcomparer#   r#   r*   Útest_fits_mixins_per_column€  s&    


rW  zcolumn type unsupported)Úreasonc                 C   s.   |d }|\}}t |g|gd�j|dd� d S )Nr\   r¥   r   rC  )r   rR   )rL   rO  rV   rW   r(   r)   r#   r#   r*   Útest_fits_unsupported_mixin¡  s    rY  c                 C   s–   | d }t ddggƒ}d|d _d|d _ddi|d jd	< |j|d
d� t  |¡}|d jdksft‚|d jdksxt‚|d jd	 ddiks’t‚dS )zmEven if there are no mixin columns, if there is metadata that would be lost it still
    gets serialized
    r*  r®   r¯   ZÈhellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellor+  z{:8.4f}r6   r=   r5   TrO   N)r   rR  r    rj   rR   rS   rT   )rV   rW   r‡   rY   r#   r#   r*   Ú#test_info_attributes_with_no_mixins«  s    


rZ  rî   Úset_colsr3   Úclassc                 C   s$  | d }t dd�}dddg|d< |dkrN| ¡ D ]}d	|jjd
< q0| |¡ n8|dkrp|j|d	d	d	d	dœd� n|dkr†|j|d	d� t |¡}|jdksžt‚|j	|j	ks®t‚|j	D ]j}t
 || j|| jk¡sÖt‚t
 || || k¡sðt‚d|| _d|| _t
 || || k¡s´t‚q´dS )z‡
    Same as previous test but set the serialize_method to 'data_mask' so mask is
    written out and the behavior is all correct.
    r*  Tr‘   r9   r:   r;   r>   r[  Z	data_maskr   r3   )r5   r6   r=   r>   )Úserialize_methodr\  FN)r   ZitercolsrH  r]  rR   r   rS   r’   rT   rF  r-   r4   r“   )rV   rî   rW   r‡   r)   rY   r(   r#   r#   r*   Ú+test_round_trip_masked_table_serialize_mask¼  s6    
üþ	



r^  c                 C   sx   | d }t tddgddd�gd�}ddg|jd	< t|jƒdksBt‚| |¡ t|jƒdks^t‚|jd	 ddgkstt‚d S )
Nr*  r9   r:   r5   r_   )rR  )rJ   r6   re   )r   r   rj   rl   rT   rR   )rV   rW   r‡   r#   r#   r*   Útest_meta_not_modifiedè  s    
r_  )T)Orµ   rì   Únumpyr-   rr   Znumpy.testingr   r   Zastropyr   r1   Z
astropy.ior   Zastropy.io.fitsr   r   r   r	   r
   Zastropy.io.fits.columnr   r   r   Zastropy.io.tests.mixin_columnsr   r   r   Zastropy.tabler   r   r   Zastropy.table.table_helpersr   Zastropy.timer   Zastropy.unitsr   r:  Zastropy.units.format.fitsr   Zastropy.units.quantityr   Zastropy.utils.compatr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   r   Zastropy.utils.miscr   r%   rG  r2   r7   r8   rß   r  r  rÝ   rÞ   r$  r%  r(  r)  r.  r1  r2  r3  r?  rJ  rN  rF   rW  ZxfailrY  rZ  r^  r_  r#   r#   r#   r*   Ú<module>   s²   þþÿ  e Nûþ

ûþ

øþ

.%

+