a
    ߙfb                     @   sN  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mZ d dl	m
Z
mZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZ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'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 dd Z9G dd dZ:G dd dZ;dd Z<dd Z=ej>?dg ddd Z@ej>?dg d d!d" ZAej>?d#g d$d%d& ZBd'd( ZCd)d* ZDd+d, ZEd-d. ZFd/d0 ZGdvd2d3ZHe0d4ejI d5ejI d6ejI d7ZJe0d4d8gejI d5d9gejI d6d:gejI d7ZKe1d d4gejL d8d5gejL d4ejM ZNe2d d4gejO d9d6gejO d;d:gejO ZPe3d d4gejQ ejR d d4gejQ ejR d<ejI ejS ZTe1eNeTd=ZUe,d4d8gd5d9gd>d?d@dAZVe,d4d8gd5d9gd6d:gdBd?d@dCgdAZWeWX ZYdDeY_Ze,d4d8gd5d9gd6d:gdEdFd;gejQ ejR dGd<gejQ ejR dHZ[e,d4d8gd5d9gd6d:gdEdFd;gejQ ejR dGd<gejQ ejR dIdJgejI ejS dKZ\e,d4d8gd5d9gd6d:gdEdIdJgejI ejS dLZ]e5dMdNgdOdPeJdQZ^e^e6d4d8gej_ eVeWeYe[e\e]d4d8gej` e-d4d8gejL e.d4d8gejL dRejL dSe/d4d8gejL eKeNePeTeUdTZag dUZbdVgdVgebg dWg dXg dYg dZg d[g d\g d]d^d_gg d`d^d_gd^d_gg dag d7g dbg d7g dcg dddeZcdfdg Zdej>?dheefdidj Zeej>?dkefeag ej>?dheefdldm Zhdndo Ziej>?dpg dqdrds Zjdtdu ZkdS )w    N)assert_allcloseassert_array_equal)_parse_tdisp_format_fortran_to_python_formatpython_to_tdisp)HDUList
PrimaryHDUBinTableHDUImageHDUtable_to_hdu)fits)units)TableQTableNdarrayMixinColumn)simple_table)allclose)UnitScaleError)get_pkg_data_filename)AstropyUserWarningAstropyDeprecationWarning)_NOT_OVERWRITING_MSG_MATCH)SkyCoordLatitude	LongitudeAngleEarthLocationSphericalRepresentationCartesianRepresentationSphericalCosLatDifferential)Time	TimeDelta)QuantityInfoc                 C   s.   | j jD ] }t| | || ks dS qdS )NFT)dtypenamesnpall)abname r+   Alib/python3.9/site-packages/astropy/io/fits/tests/test_connect.py
equal_data!   s    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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d5S )6TestSingleTablec                 C   s:   t jttg dg dg ddtfddtfgd| _d S )N            r(   r)   cdffffff@      @g@g!@r(   r)   ZU1r5   r$   )r&   arraylistzipintfloatdataselfr+   r+   r,   setup_class*   s    zTestSingleTable.setup_classc                 C   sB   t |d}t| j}|j|dd t|}t||s>J d S )Ntest_simple.ftsT	overwritestrjoinr   rA   writereadr-   rC   tmpdirfilenamet1t2r+   r+   r,   test_simple0   s
    

zTestSingleTable.test_simplec                 C   sH   t t|d}t| j}|j|dd t|}t||sDJ d S )Nztest_simple.fitTrF   )	pathlibPathrI   rJ   r   rA   rK   rL   r-   rM   r+   r+   r,   test_simple_pathlib7   s
    

z#TestSingleTable.test_simple_pathlibc                 C   s   t |d}t| j}d|jd< d|jd< d|jd< g d|jd	< g d
|jd< |j|dd t|}t||sxJ |jD ]b}t|jt	rt
t|j| D ]$}|j| | |j| | ksJ qq~|j| |j| ks~J q~d S )Ntest_simple.fitsr0   Ar8   BspamC)thisisr(   ZlongcommentcommentsfirstsecondthirdHISTORYTrF   )rI   rJ   r   rA   metarK   rL   r-   
isinstancer=   rangelen)rC   rN   rO   rP   rQ   keyir+   r+   r,   test_simple_meta>   s    





$z TestSingleTable.test_simple_metac                 C   sr   t |d}t| j}d|jd< tjtdd}|j|dd W d    n1 sT0    Y  t	|dksnJ d S )	NrV   rY   Zttype1zXMeta-data keyword ttype1 will be ignored since it conflicts with a FITS reserved keywordmatchTrF   r0   )
rI   rJ   r   rA   rd   pytestwarnsr   rK   rg   )rC   rN   rO   rP   wr+   r+   r,   test_simple_meta_conflictingP   s    

,z,TestSingleTable.test_simple_meta_conflictingc                 C   sD   t |d}t| j}|j|ddd t|}t||s@J dS )zE
        Test that file type is recognized without extension
        rR   Tr   )rG   formatNrH   rM   r+   r+   r,   test_simple_noextensionZ   s
    

z'TestSingleTable.test_simple_noextension
table_typec                 C   s   t |d}|| j}tj|d _tjtj |d _|j|dd |	|}t
||s\J |d jtjkspJ |d jtjtj ksJ d S )Ntest_with_units.fitsr(   r5   TrF   )rI   rJ   rA   umunitkmsrK   rL   r-   rC   rs   rN   rO   rP   rQ   r+   r+   r,   test_with_unitsd   s    

zTestSingleTable.test_with_unitsc              	   C   s  t |d}td}t }td| |d< tt	}|j
|dd W d    n1 s^0    Y  t|dksxJ dt |d jv sJ tjtjd	d
}t|}W d    n1 s0    Y  t|dksJ t|d jtjsJ t |d jdksJ t|d j|d jks&J t|x t|}|d j|u sPJ t||s`J tt	 |j
|dd W d    n1 s0    Y  W d    n1 s0    Y  tdtji0 t|}|d jtju sJ W d    n1 s0    Y  d S )Nrt   Zbandpass_sol_lum   lTrF   r0   r   z 'bandpass_sol_lum' did not parserk   )rI   rJ   ru   def_unitr   r&   onesrm   rn   r   rK   rg   messageUnitsWarningrL   re   rw   ZUnrecognizedUnitr'   valueZadd_enabled_unitsr-   set_enabled_aliasesZLsun)rC   rN   rO   rw   tro   rQ   t3r+   r+   r,   test_with_custom_units_qtablep   s.    
,( 
N
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 d    n1 sX0    Y  |d jtjksvJ |d jtjtj
tj tj  ksJ d S )N	Angstromsr   zergs/(cm.s.Angstroms)r1   )r   Zergsr(   r5   )r	   rA   columnsrw   ru   r   dictZAAZergrL   cmry   )rC   rs   hdur   r+   r+   r,   test_read_with_unit_aliases   s    
(z+TestSingleTable.test_read_with_unit_aliasesc                 C   s   t |d}|| j}d|d _d|d _d|d _|j|dd	 ||}t||s\J |d jdksnJ |d jdksJ |d jdksJ d S )
Nztest_with_format.fitsz{:5d}r(   z{:>20}r)   z{:6.2f}r5   TrF   )rI   rJ   rA   rq   rK   rL   r-   rz   r+   r+   r,   test_with_format   s    




z TestSingleTable.test_with_formatc                 C   s   t |d}t| jdd}g d|jd< g d|jd< g d|jd	< |j|dd
 t|}t||slJ t	|d j|d jksJ t	|d j|d jksJ t	|d	 j|d	 jksJ d S )Nztest_masked.fitsTmaskedr0   r   r0   r   r(   r0   r   r   r0   r)   )r   r0   r0   r   r5   rF   )
rI   rJ   r   rA   maskrK   rL   r-   r&   r'   rM   r+   r+   r,   test_masked   s    
zTestSingleTable.test_maskedr   TFc           	      C   sJ  t |d}tjjg dg dd}tjjg dg ddd}tjj||gd	d
}t|||gg d|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J t|d j|d jks&J t|d j|d jksFJ dS )zCheck 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g      @      !@g      @      @r   r   g      @r9         @g     !@r   Zf4)r   r$   Zaxisr(   r)   r5   )r%   r   TrF   r(   r   r   r)   r9   r   r5   N)rI   rJ   r&   maMaskedArraystackr   rK   rL   r   rA   nanr'   r   )	rC   r   rN   rO   r(   r)   r5   rP   rQ   r+   r+   r,   test_masked_nan   s    
   zTestSingleTable.test_masked_nanc                 C   s4  t |d}tjjg dg dd}tjjg dg dd}tjj||gdd}t|||gg d	d
}|j|dd t|}t	|d j
g d t	|d j
g d t	|d j
tj|d j
|d j
gdd t|d j|d jksJ t|d j|d jksJ t|d j|d jks0J d S )Nr   r   r   r   r   r   r   r   r   r%   TrF   r(   r)   r5   )rI   rJ   r&   r   r   r   r   rK   rL   r   rA   r'   r   )rC   rN   rO   r(   r)   r5   rP   rQ   r+   r+   r,   test_masked_serialize_data_mask   s    
  z/TestSingleTable.test_masked_serialize_data_maskc                 C   sn   t |d}t| j}|j|dd t|d}t|}W d    n1 sP0    Y  t|| jsjJ d S )Nztest_read_from_fileobj.fitsTrF   rb)	rI   rJ   r	   rA   writetoopenr   rL   r-   )rC   rN   rO   r   fr   r+   r+   r,   test_read_from_fileobj   s    
(z&TestSingleTable.test_read_from_fileobjc                 C   sL   t | j}d|jd _d|jd _d|jd _t|}t|| jsHJ d S )NZRADIANSr   rY   r0   Z	millieggsr1   )r	   rA   r   rw   r   rL   r-   rC   r   r   r+   r+   r,    test_read_with_nonstandard_units   s    

z0TestSingleTable.test_read_with_nonstandard_unitsc           	      C   s   t |d}td}| }g d| |d< tjtdd}|| W d    n1 s\0    Y  t|dksvJ |t	u rdt |d j
v sJ nd	t |d j
v sJ t|&}|d }d
|jvsJ W d    n1 s0    Y  d S )Nztest_nonstandard_units.fitsrY   )      ?       @g      @r(   rk   r0   z cannot be recovered in reading. r   z lost to non-astropy fits readersZTUNIT1)rI   rJ   ru   r~   rm   rn   r   rK   rg   r   r   r   r   header)	rC   rs   rN   rO   rY   r   ro   Zffr   r+   r+   r,   !test_write_drop_nonstandard_units   s    
(z1TestSingleTable.test_write_drop_nonstandard_unitsc                 C   sb   t |d}t| j}|j|dd tj|dd}tj|dd}t||sPJ ~~~t  d S )NrE   TrF   F)memmap)	rI   rJ   r   rA   rK   rL   r-   gccollect)rC   rN   rO   rP   rQ   r   r+   r+   r,   test_memmap  s    
zTestSingleTable.test_memmapr   )FTc                 C   s   t |d}t| j}|j|dd tj|d|d}tj|d|d}|d jjdksZJ |d jjdksnJ t||s|J ~~~t	
  d S )	NrE   TrF   F)Zcharacter_as_bytesr   r)   US)rI   rJ   r   rA   rK   rL   r$   kindr-   r   r   )rC   rN   r   rO   rP   rQ   r   r+   r+   r,   test_character_as_bytes  s    
z'TestSingleTable.test_character_as_bytesc                 C   sh   t |d}tddgdggi}|j|dd t|}|d jdksLJ t|d d dksdJ d S )	Nztest_oned_single_element.fitsxr0   r1   TrF   )r1   r0   r   )rI   rJ   r   rK   rL   shaperg   )rC   rN   rO   tablerL   r+   r+   r,   test_oned_single_element  s    
z(TestSingleTable.test_oned_single_elementc                    s   t | j}t| d fdd	}t|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sJ d S )Nr0   c                    sv   t | X}t||ksJ ||d  D ]*}|j jks<J t|j jks(J q(W d    n1 sh0    Y  d S N)r   r   rg   r   r&   r'   rA   )rO   Zexpected
start_fromZhdu_listZ	hdu_tabler   r+   r,   check_equal-  s
    z6TestSingleTable.test_write_append.<locals>.check_equalztest_write_append.fitsT)appendr2   )r   rG   rF   r1   )r   r   )r0   )
r   rA   r   rI   rJ   rK   r&   r<   r-   rL   )rC   rN   r   r   rO   rQ   r+   r   r,   test_write_append(  s$    



z!TestSingleTable.test_write_appendc                 C   sl   t | j}t|d}|| tjttd || W d    n1 sP0    Y  |j|dd d S )Nztest_write_overwrite.fitsrk   TrF   )	r   rA   rI   rJ   rK   rm   raisesOSErrorr   )rC   rN   r   rO   r+   r+   r,   test_write_overwriteJ  s    

(z$TestSingleTable.test_write_overwritec                 C   sn   t |d}tjdtddtjgdd}tj|g}|	| t
|}t|js\J |jd sjJ d S )Nz&test_inexact_format_parse_on_read.fitsr(   r0   r1   E)r*   r<   rq   )rI   rJ   r   r   r&   r<   r   ZTableHDUfrom_columnsr   r   rL   anyr   )rC   rN   rO   c1Z	table_hdutabr+   r+   r,   test_mask_nans_on_readR  s    

z&TestSingleTable.test_mask_nans_on_readc                 C   sv   t |d}tjdtjg ddddddd	}tj|g}|j|d
d t	
|}t|jsdJ |jd srJ d S )Nz#test_null_format_parse_on_read.fitsr(   )r0   r1   c   i`  Zu2r;   Ir   i   )r*   r<   rq   ZnullZbzeroTrF   r1   )rI   rJ   r   r   r&   r<   r	   r   r   r   rL   r   r   )rC   rN   rO   colZbin_table_hdur   r+   r+   r,   test_mask_null_on_read\  s    "
z&TestSingleTable.test_mask_null_on_readN)__name__
__module____qualname__rD   rR   rU   rj   rp   rr   rm   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.   (   s:   


$
	



	"
r.   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g ddd Zej	
dg ddd Zej	
dg d d!d" Zd#d$ Zd%d& Zej	
dg d'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g dd0d1 Zej	
dg dd2d3 Zej	
dg d d4d5 Zej	
dg d6d7d8 Zd9S ):TestMultipleHDUc                 C   s(  t jttg dg dg ddtfddtfgd| _t jttg dg dd	tfd
tfgd| _t jttg dg d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 )Nr/   r4   r7   r(   r:   r5   r;   )gffffff?r8   g	@g@pqrW   rX   r`   )r*   ra   )r2   r2   rb   )r&   r<   r=   r>   r?   r@   data1data2data3r   r	   r
   r   r   hdushdusbhdus3hdus2hdus1)rC   Zhdu0Zhdu1Zhdu2Zhdu3Zhdu4r+   r+   r,   rD   i  s4    
zTestMultipleHDU.setup_classc                 C   s   | ` d S r   )r   rB   r+   r+   r,   teardown_class  s    zTestMultipleHDU.teardown_classc                 C   s   t d d S )Nalways)warningsfilterwarnings)rC   methodr+   r+   r,   setup_method  s    zTestMultipleHDU.setup_methodc                 C   s   t |d}| j| tjtdd t|}W d    n1 sH0    Y  t	|| j
sbJ t |d}| j| tjtdd t|}W d    n1 s0    Y  t	|| jsJ d S )Nztest_read.fitsbhdu= was not specified but multiple tables are present, reading in first available table \(hdu=1\)rk   ztest_read_2.fitsbhdu= was not specified but multiple tables are present, reading in first available table \(hdu=2\))rI   rJ   r   r   rm   rn   r   r   rL   r-   r   r   r   )rC   rN   rO   r   r   r+   r+   r,   	test_read  s    ((zTestMultipleHDU.test_readc                 C   sj   t |d}| j| tt}tj|dd W d    n1 sH0    Y  |j	j
d dksfJ d S )Nztest_read_with_hdu_0.fitsr   r   No table found in hdu=0)rI   rJ   r   r   rm   r   
ValueErrorr   rL   r   args)rC   rN   rO   excr+   r+   r,   test_read_with_hdu_0  s
    ,z$TestMultipleHDU.test_read_with_hdu_0r   r0   r`   c                 C   s<   t |d}| j| tj||d}t|| js8J d S )Nztest_read_with_hdu_1.fitsr   )rI   rJ   r   r   r   rL   r-   r   rC   rN   r   rO   r   r+   r+   r,   test_read_with_hdu_1  s    z$TestMultipleHDU.test_read_with_hdu_1r1   ra   c                 C   s<   t |d}| j| tj||d}t|| js8J d S )Nztest_read_with_hdu_2.fitsr   )rI   rJ   r   r   r   rL   r-   r   r   r+   r+   r,   test_read_with_hdu_2  s    z$TestMultipleHDU.test_read_with_hdu_2r2   rb   c                 C   sZ   t |d}| j| tjtdd tj||d W d    n1 sL0    Y  d S )Nztest_read_with_hdu_3.fitsNo table found in hdu=3rk   r   )	rI   rJ   r   r   rm   r   r   r   rL   )rC   rN   r   rO   r+   r+   r,   test_read_with_hdu_3  s    z$TestMultipleHDU.test_read_with_hdu_3c                 C   s<   t |d}| j| tj|dd}t|| js8J d S )Nztest_read_with_hdu_4.fitsr3   r   )rI   rJ   r   r   r   rL   r-   r   )rC   rN   rO   r   r+   r+   r,   test_read_with_hdu_4  s    z$TestMultipleHDU.test_read_with_hdu_4)r1   r2   1ra    c                 C   sr   t |d}| j| tjtd| dd tj||d}W d    n1 sT0    Y  t	|| j
snJ d S )Nztest_warn_with_hdu_1.fitsSpecified hdu=6 not found, reading in first available table \(hdu=1\)rk   r   )rI   rJ   r   r   rm   rn   r   r   rL   r-   r   )rC   rN   r   rO   rP   r+   r+   r,   test_read_with_hdu_missing  s    
,z*TestMultipleHDU.test_read_with_hdu_missing)r   r1   rb   c                 C   sr   t |d}| j| tjtd| dd tj||d}W d    n1 sT0    Y  t	|| j
snJ d S )Nztest_warn_with_hdu_2.fits No table found in specified hdu=,, reading in first available table \(hdu=1\)rk   r   )rI   rJ   r   r   rm   rn   r   r   rL   r-   r   )rC   rN   r   rO   rQ   r+   r+   r,   test_read_with_hdu_warning  s    
,z*TestMultipleHDU.test_read_with_hdu_warning)r   r0   rb   c                 C   sr   t |d}| j| tjtd| dd tj||d}W d    n1 sT0    Y  t	|| j
snJ d S )Nztest_warn_with_hdu_3.fitsr   ,, reading in first available table \(hdu=2\)rk   r   )rI   rJ   r   r   rm   rn   r   r   rL   r-   r   )rC   rN   r   rO   r   r+   r+   r,   test_read_in_last_hdu  s    
,z%TestMultipleHDU.test_read_in_last_hduc                 C   s   t jtdd t| j}W d    n1 s00    Y  t|| jsJJ t jtdd t| j}W d    n1 sz0    Y  t|| j	sJ d S )Nr   rk   r   )
rm   rn   r   r   rL   r   r-   r   r   r   )rC   r   r   r+   r+   r,   test_read_from_hdulist  s    **z&TestMultipleHDU.test_read_from_hdulistc                 C   sR   t t }tj| jdd W d    n1 s00    Y  |jjd dksNJ d S )Nr   r   r   )rm   r   r   r   rL   r   r   r   )rC   r   r+   r+   r,   !test_read_from_hdulist_with_hdu_0  s    .z1TestMultipleHDU.test_read_from_hdulist_with_hdu_0)r0   r`   Nc                 C   s$   t j| j|d}t|| js J d S Nr   )r   rL   r   r-   r   r   r+   r+   r,   (test_read_from_hdulist_with_single_table  s    z8TestMultipleHDU.test_read_from_hdulist_with_single_tablec                 C   s$   t j| j|d}t|| js J d S r   r   rL   r   r-   r   r   r+   r+   r,   !test_read_from_hdulist_with_hdu_1  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_1c                 C   s$   t j| j|d}t|| js J d S r   )r   rL   r   r-   r   r   r+   r+   r,   !test_read_from_hdulist_with_hdu_2  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_2c                 C   sB   t jtdd  tj| j|d W d    n1 s40    Y  d S )Nr   rk   r   )rm   r   r   r   rL   r   )rC   r   r+   r+   r,   !test_read_from_hdulist_with_hdu_3  s    z1TestMultipleHDU.test_read_from_hdulist_with_hdu_3c                 C   sZ   t jtd| dd  tj| j|d}W d    n1 s<0    Y  t|| jsVJ d S )Nr   r   rk   r   )rm   rn   r   r   rL   r   r-   r   )rC   r   rQ   r+   r+   r,   'test_read_from_hdulist_with_hdu_warning  s
    
.z7TestMultipleHDU.test_read_from_hdulist_with_hdu_warningc                 C   sZ   t jtd| dd  tj| j|d}W d    n1 s<0    Y  t|| jsVJ d S )Nr   r   rk   r   )rm   rn   r   r   rL   r   r-   r   )rC   r   rP   r+   r+   r,   'test_read_from_hdulist_with_hdu_missing	  s
    
.z7TestMultipleHDU.test_read_from_hdulist_with_hdu_missingc                 C   sZ   t jtd| dd  tj| j|d}W d    n1 s<0    Y  t|| jsVJ d S )Nr   r   rk   r   )rm   rn   r   r   rL   r   r-   r   )rC   r   r   r+   r+   r,   "test_read_from_hdulist_in_last_hdu  s
    
.z2TestMultipleHDU.test_read_from_hdulist_in_last_hdu)Nr0   r`   c                 C   s$   t | jd }t|| js J d S )Nr0   r  r   r+   r+   r,   test_read_from_single_hdu  s    z)TestMultipleHDU.test_read_from_single_hduN)r   r   r   rD   r   r   r   r   rm   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r+   r+   r+   r,   r   g  sH   



	
	
	






r   c                  C   s   t td} t| d jtddgks0J t| d drBJ t| d drTJ t| d drfJ t| d jtdd	gksJ t| d jtd
dgksJ t	| d jtddg t| d jtddgksJ 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   Zc3Zc4r0   r1   s   abcs   xy g"Z3@g@TN)
r   rL   r   r&   r'   r   r<   hasattrrA   r   )r   r+   r+   r,   test_masking_regression_1795  s    """r  c                  C   s|   g d} g d}g d}t | ||gdddid}d|d	 _tjtd
d  |jdddd W d    n1 sn0    Y  d S )N)r0   r3   r|   )r   g      @gffffff @r   yzr   r*   zfirst table)r%   rd   z1.2r(   zThe 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\.rk   zt.fitsr   T)rq   rG   )r   rw   rm   r   r   rK   )r(   r)   r5   r   r+   r+   r,   test_scale_error/  s    
r  ztdisp_str, format_return))zEN10.5)ZEN105N)zF6.2)F62N)zB5.10)rX   r  r  N)zE10.5E3)r   r  r  3)ZA21)rW   Z21NNc                 C   s   t | |ksJ d S r   )r   )	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J d S r   )r   )r  Zformat_str_returnr+   r+   r,   test_fortran_to_python_formatF  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J d S r   r   )Zfmt_strr  r+   r+   r,   test_python_to_tdispP  s    
r  c                   C   s   t ddddksJ 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t| ddd t	t| dJ}|d j
d	 jt d
ksxJ t |d j
d	 |ksJ W d   n1 s0    Y  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|   r;   Nr1   	test.fitsTrF   r0   col0bool)r&   r   r  ZFalse_r   rK   rI   rJ   r   r   rA   r$   r'   )rN   Zarrr   hdulr+   r+   r,   test_bool_columna  s    
r!  c                 C   s   t tg dg}|jt| ddd tt| dF}t|d j	d g dksbJ |d j
d dksxJ W d	   n1 s0    Y  t td
gg}tt( |jt| ddd W d	   n1 s0    Y  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
    )r(   r)   Zcdr  TrF   r0   r  ZTFORM1Z2ANu   ☃)r   r&   r<   rK   rI   rJ   r   r   r'   rA   r   rm   r   UnicodeEncodeError)rN   r   r   rQ   r+   r+   r,   test_unicode_columns  s    
 4r#  c                 C   s   t | 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 d    n1 sr0    Y  t	|dksJ tj
|dd d S )Nztest_unit.fitsr0   r1   r2   r3   r(   r)   r   zm/sz
not-a-unitz''not-a-unit' did not parse as fits unitrk   TrF   r   )rI   rJ   r   rw   rm   rn   ru   r   rK   rg   rL   )rN   rO   rP   ro   r+   r+   r,   test_unit_warnings_read_write  s    

,r$  c                 C   sZ   t d}tjtdd t|}W d   n1 s60    Y  |jd g dksVJ dS )zL
    Regression test for https://github.com/astropy/astropy/issues/6079
    zdata/stddata.fitsz6hdu= was not specified but multiple tables are presentrk   Nr^   )	r   z  *** End of mandatory fields ***r   r   z *** Column names ***r   r   z *** Column formats ***r   )r   rm   rn   r   r   rL   rd   rN   rO   r   r+   r+   r,   test_convert_comment_convention  s    (r&  Tc           	   
   C   s   |r| j |j u sJ g d}|| D ]}| }|}|dD ]@}zt||}t||}W q: tyx   || }|| }Y q:0 q:|dkr|d u ri }|d u ri }t|tjr|jjdkrt	||ddsJ q$t
||ks$J q$d S )N)z	info.namezinfo.formatz	info.unitzinfo.description	info.meta.r'  r   gV瞯<)Zrtol)	__class__splitgetattrAttributeErrorre   r&   ndarrayr$   r   quantity_allcloser'   )	Zobj1Zobj2attrscompare_classZ
info_attrsattrZa1Za2Zsubattrr+   r+   r,   assert_objects_equal  s*    
r2  r0   r2   r|   r  r1   r3         
   )Zdifferentialszdeg,degZfk4zJ1990.5)rw   frameZobstimez	deg,deg,mzJ1991.5Z	cartesianz
deg,deg,pc   	   )rw   pm_ra_cosdecpm_dec      )rw   r9  r:  radial_velocity)rw   r=  g   @BAg   BAZjdZtai)rq   scalelocationg     f@)
wrap_angle)tmdtscscdscdcscpmscpmrvscrvr   latlonangel2srcrsdsrd)r   r   rq   r>  r?  rA   )r   r   rq   r>  )radecrepresentation_type
frame.name)rQ  rR  distancerS  rT  )r   r  r  rS  rT  )rQ  rR  rU  r9  r:  rS  rT  )rQ  rR  rU  r9  r:  r=  rS  rT  )rQ  rR  rU  r=  rS  rT  r   rw   )r   rw   r@  )r   r  r  Z	ellipsoid)rJ  rI  rU  )Zd_lon_coslatZd_latZ
d_distance)rJ  rI  rU  zdifferentials.s.d_lon_coslatzdifferentials.s.d_latzdifferentials.s.d_distance)r   r	  rA  rB  rC  rD  rE  rF  rG  rH  r   rJ  rI  rK  rL  ZndrM  rN  rO  rP  c           
      C   s   t | d}tt}tdd |D |d}|j|dd tj|ddd}|j|jksZJ |j	
 D ]v\}}|| }t|tr|j|_t| }d}	t|jtrt|tu sJ d	g}d
}	t|j|ksJ t||||	 qddS )zWTest writing as QTable and reading as Table.  Ensure correct classes
    come out.
    rV   c                 S   s   g | ]}t | qS r+   
mixin_cols.0r*   r+   r+   r,   
<listcomp>"      z4test_fits_mixins_qtable_to_table.<locals>.<listcomp>r   r   rq   Trq   Zastropy_nativerw   FN)rI   rJ   sortedrW  r   rK   r   rL   colnamesr   itemsre   r!   rq   compare_attrsinfor#   typer   r&   r'   r   r2  )
rN   rO   r%   r   rQ   r*   r   Zcol2r/  r0  r+   r+   r,    test_fits_mixins_qtable_to_table  s$    
rd  	table_clsc                 C   s  t |d}tt}g d}| dd |D |d}d|jd< g d|jd	< g d
|jd< |j|dd | j|ddd}|jd dksJ |jd	 g dksJ |jd g d
ksJ |j|jksJ t	|$}|d j
j|ksJ W d   n1 s0    Y  dS )zGTest write/read all cols at once and validate intermediate column namesrV   )4rK  zcr.xzcr.yzcr.zzdt.jd1zdt.jd2zel2.xzel2.yzel2.zrI  rJ  zsc.razsc.deczscd.razscd.deczscd.distancezscd.obstime.jd1zscd.obstime.jd2zscdc.xzscdc.yzscdc.zzscdc.obstime.jd1zscdc.obstime.jd2zscpm.razscpm.deczscpm.distancezscpm.pm_ra_cosdeczscpm.pm_decz	scpmrv.raz
scpmrv.deczscpmrv.distancezscpmrv.pm_ra_cosdeczscpmrv.pm_deczscpmrv.radial_velocityzscrv.razscrv.deczscrv.distancezscrv.radial_velocityzsd.d_lon_coslatzsd.d_latzsd.d_distancezsr.lonzsr.latzsr.distancezsrd.lonzsrd.latzsrd.distancez srd.differentials.s.d_lon_coslatzsrd.differentials.s.d_latzsrd.differentials.s.d_distancerA  r   c                 S   s   g | ]}t | qS r+   rV  rX  r+   r+   r,   rZ  a  r[  z+test_fits_mixins_as_one.<locals>.<listcomp>r   rY   rZ   )r[   r\   r(   r]   r^   r_   historyr   r\  Tr]  rc   r0   N)rI   rJ   r^  rW  rd   rK   rL   r_  r   r   r   r%   )re  rN   rO   r%   Zserialized_namesr   rQ   r   r+   r+   r,   test_fits_mixins_as_one?  s    
rg  name_colc           
      C   s  t |d}|\}}ddg}| |||gd|dgd}d|| j_ttdd	d
id|| j_|jspt	d t
|| trtd |j|dd | j|ddd}|j|jksJ |jD ]}	t||	 ||	 t|	  q|dr|| jjjtju sJ || jjjtju sJ dS )z<Test write/read one col at a time and do detailed validationrV   r   r   r   r	  r   zmy 


 description2   r(   Zbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)r=   r   z7column is not a mixin (e.g. Quantity subclass in Table)zNdarrayMixin not supportedr   r\  Tr]  rA  N)rI   rJ   rb  descriptionr=   rf   rd   Zhas_mixin_columnsrm   skipre   r   ZxfailrK   rL   r_  r2  ra  
startswithZ_timeZjd1r)  r&   r-  Zjd2)
re  rh  rN   rO   r*   r   r5   r   rQ   Zcolnamer+   r+   r,   test_fits_mixins_per_columnt  s$    


rm  c                 C   s   t | d}tddgg}d|d _d|d _ddi|d jd	< |j|d
d t|}|d jdkslJ |d jdks~J |d jd	 ddiksJ dS )zmEven if there are no mixin columns, if there is metadata that would be lost it still
    gets serialized
    r  r   r   Zhellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellor  z{:8.4f}r)   r5   r(   TrF   N)rI   rJ   r   rj  rq   rd   rK   rL   )rN   rO   r   rQ   r+   r+   r,   #test_info_attributes_with_no_mixins  s    


rn  r   )set_colsr%   classc                 C   s(  t | d}tdd}g d|d< |dkrR| D ]}d|jjd< q4|| n8|d	krt|j|ddddd
d n|dkr|j|dd t|}|j	du sJ |j
|j
ksJ |j
D ]j}t|| j|| jksJ t|| || ksJ d|| _d|| _t|| || ksJ qd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   )r0   r1   r2   r6   ro  Z	data_maskr   r%   r4   )serialize_methodrp  FN)rI   rJ   r   Zitercolsrb  rq  rK   r   rL   r   r_  r&   r'   r   )rN   r   rO   r   r   rQ   r*   r+   r+   r,   +test_round_trip_masked_table_serialize_mask  s,    





rr  c                 C   s~   t | d}ttddgdddgd}ddg|jd	< t|jdksHJ || t|jdksdJ |jd	 ddgkszJ d S )
Nr  r0   r1   r(   rY   )rj  )rA   r)   r^   )rI   rJ   r   r   rd   rg   rK   r%  r+   r+   r,   test_meta_not_modified  s    
rs  )T)lr   rS   r   rm   Znumpyr&   Znumpy.testingr   r   Zastropy.io.fits.columnr   r   r   Zastropy.io.fitsr   r   r	   r
   r   Z
astropy.ior   Zastropyr   ru   Zastropy.tabler   r   r   r   Zastropy.table.table_helpersr   Zastropy.unitsr   r.  Zastropy.units.format.fitsr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   r   Zastropy.utils.miscr   Zastropy.coordinatesr   r   r   r   r   r   r   r    Zastropy.timer!   r"   Zastropy.units.quantityr#   r-   r.   r   r  r  r   r   r  r  r  r  r!  r#  r$  r&  r2  rx   ZelrL  ZdegZkpcrM  ZpcrN  ZmasZyrry   rO  rP  rC  rD  copyrE  rS  rF  rG  rH  rA  Zdayrv   rW  Z
time_attrsra  rd  rg  r=   r`  rm  rn  rr  rs  r+   r+   r+   r,   <module>   s   (  A 9

	

! , $2$$%
4
$