U
    e»{j{  ã                   @   sÎ  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mZ d dl	Z
d dl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mZ eeƒ dd�eedd�dd�eedddœddgdd�dd�eeejdgd�dd�eeejd�dd�eeej d�dd�eeej!d�dd�eeej"d�d d�eeej"d!d"�d#d�eeej#d�d$d�eeej$d�d%d�eeej$d&d'd(d)œd*d+d,œd-�d.d�eeej#d&d/d0d1d1gd'd(d)œd2d3d4œd5d6�d7d�eeej#ej%d8 d9�d:d�eeej#d;did9�d<d�eeej&d=d>id?�d@d�eeej'd�dAd�gZ(eeej'd�dBd�gZ)dCdDdEgZ*eeƒ dFd�eedGdH�dId�eedJdH�dKd�eedGdLgdM�dKd�eedGdNgdO�dKd�eedGdNgdNdLgdP�dFd�eedGgdNdQidR�dSd�gZ+eeƒ dTd�eedGej,dUfgdH�dVd�eedGej,dWfgdNdXidR�dYd�eeej d�dZd�gZ-ej.d[d\„ ƒZ/d°d]d^„Z0d±d_d`„Z1ej2 3dadbdg¡ej2 3dcdddedfdgg¡dhdi„ ƒƒZ4ej2 3dadbdg¡djdk„ ƒZ5ej2 3dadbdg¡dldm„ ƒZ6ej2 3dadbdg¡dndo„ ƒZ7dpdq„ Z8drds„ Z9dtdu„ Z:ej2 3dadbdg¡dvdw„ ƒZ;ej2 3dadbdg¡ej2 3dxdydzd{d|g¡d}d~„ ƒƒZ<ej2 3dadbdg¡dd€„ ƒZ=d�d‚„ Z>ej2 3dadbdg¡dƒd„„ ƒZ?ej2 3dadbdg¡d…d†„ ƒZ@ej2 3d‡dˆd‰gdˆd‰gdˆgdŠd‹dŒœdbfdˆd‰gdˆd‰gd‰gdˆdŠidfdˆd‰gdˆd‰gg dŠd‹d�œdbfdˆd‰gdˆd‰gg dŽd‹idbfdˆd‰gdˆd‰gg dˆdŠidfdˆd‰gdˆd‰gg dŠd‹d�œdbfdˆd‰gdˆd‰gg i dfg¡d�d‘„ ƒZAej2 3d’dŠd‹d�œdbfdŠd‹dŒœdbfdŽd‹idbfi dfg¡d“d”„ ƒZBej2 3dadbdg¡d•d–„ ƒZCej2 3dadbdg¡d—d˜„ ƒZDej2 3d™dšd›dœd�dždœg¡ej2 3dadbdg¡ej2 3dcdedfdgg¡dŸd „ ƒƒƒZEeFeejGjH I¡ ejGjJ I¡ ƒƒZKej2 3d¡eK¡d¢d£„ ƒZLej2 3dadbdg¡d¤d¥„ ƒZMej2 3dadbdg¡d¦d§„ ƒZNej2 3dadbdg¡d¨d©„ ƒZOdªd«„ ZPej2 3d¡eK¡d¬d­„ ƒZQej2 3dadbdg¡d®d¯„ ƒZRdS )²é    N)Únullcontext)ÚStringIO)Úchain)Útable)Úunits)Úascii)Úsimple_table)ÚHAS_BS4)ÚAstropyWarning)Ú_NOT_OVERWRITING_MSG_MATCHé   )Úsetup_functionÚteardown_functionzÆID XCENTER YCENTER MAG MERR MSKY NITER SHARPNESS CHI PIER PERROR
14 138.538 256.405 15.461 0.003 34.85955 4 -0.032 0.802 0 No_error
18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
)ÚkwargsÚout)Ú	delimiterz%12.1fz{0:.1f})ÚXCENTERÚYCENTERr   r   F)ÚformatsÚinclude_namesZstrip_whitespacez:XCENTER YCENTER
"       138.5" 256.4
"        18.1" 280.2
ZCHI)ÚWriterÚexclude_nameszÊID	XCENTER	YCENTER	MAG	MERR	MSKY	NITER	SHARPNESS	PIER	PERROR
N	N	N	N	N	N	N	N	N	S
14	138.538	256.405	15.461	0.003	34.85955	4	-0.032	0	No_error
18	18.114	280.170	22.329	0.206	30.12784	4	-2.544	0	No_error
)r   zÆID	XCENTER	YCENTER	MAG	MERR	MSKY	NITER	SHARPNESS	CHI	PIER	PERROR
14	138.538	256.405	15.461	0.003	34.85955	4	-0.032	0.802	0	No_error
18	18.114	280.170	22.329	0.206	30.12784	4	-2.544	1.104	0	No_error
zÆID,XCENTER,YCENTER,MAG,MERR,MSKY,NITER,SHARPNESS,CHI,PIER,PERROR
14,138.538,256.405,15.461,0.003,34.85955,4,-0.032,0.802,0,No_error
18,18.114,280.170,22.329,0.206,30.12784,4,-2.544,1.104,0,No_error
z…14 138.538 256.405 15.461 0.003 34.85955 4 -0.032 0.802 0 No_error
18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
zÈ# ID XCENTER YCENTER MAG MERR MSKY NITER SHARPNESS CHI PIER PERROR
14 138.538 256.405 15.461 0.003 34.85955 4 -0.032 0.802 0 No_error
18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
ú&)r   ÚcommentzÇ&ID XCENTER YCENTER MAG MERR MSKY NITER SHARPNESS CHI PIER PERROR
14 138.538 256.405 15.461 0.003 34.85955 4 -0.032 0.802 0 No_error
18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
aŸ  \begin{table}
\begin{tabular}{ccccccccccc}
ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PERROR \\
 & pixels & pixels & magnitudes & magnitudes & counts &  &  &  &  & perrors \\
14 & 138.538 & 256.405 & 15.461 & 0.003 & 34.85955 & 4 & -0.032 & 0.802 & 0 & No_error \\
18 & 18.114 & 280.170 & 22.329 & 0.206 & 30.12784 & 4 & -2.544 & 1.104 & 0 & No_error \\
\end{tabular}
\end{table}
a‡  \begin{deluxetable}{ccccccccccc}
\tablehead{\colhead{ID} & \colhead{XCENTER} & \colhead{YCENTER} & \colhead{MAG} & \colhead{MERR} & \colhead{MSKY} & \colhead{NITER} & \colhead{SHARPNESS} & \colhead{CHI} & \colhead{PIER} & \colhead{PERROR}\\ \colhead{ } & \colhead{pixels} & \colhead{pixels} & \colhead{magnitudes} & \colhead{magnitudes} & \colhead{counts} & \colhead{ } & \colhead{ } & \colhead{ } & \colhead{ } & \colhead{perrors}}
\startdata
14 & 138.538 & 256.405 & 15.461 & 0.003 & 34.85955 & 4 & -0.032 & 0.802 & 0 & No_error \\
18 & 18.114 & 280.170 & 22.329 & 0.206 & 30.12784 & 4 & -2.544 & 1.104 & 0 & No_error
\enddata
\end{deluxetable}
zMag values \label{tab1}z[mag]z[pixel])ZMAGr   zdeluxetable*Zhtpb)r   Ú	tabletypeÚ
tablealign)r   ÚcaptionÚ	latexdicta²  \begin{deluxetable*}{ccccccccccc}[htpb]
\tablecaption{Mag values \label{tab1}}
\tablehead{\colhead{ID} & \colhead{XCENTER} & \colhead{YCENTER} & \colhead{MAG} & \colhead{MERR} & \colhead{MSKY} & \colhead{NITER} & \colhead{SHARPNESS} & \colhead{CHI} & \colhead{PIER} & \colhead{PERROR}\\ \colhead{ } & \colhead{[pixel]} & \colhead{pixels} & \colhead{[mag]} & \colhead{magnitudes} & \colhead{counts} & \colhead{ } & \colhead{ } & \colhead{ } & \colhead{ } & \colhead{perrors}}
\startdata
14 & 138.538 & 256.405 & 15.461 & 0.003 & 34.85955 & 4 & -0.032 & 0.802 & 0 & No_error \\
18 & 18.114 & 280.170 & 22.329 & 0.206 & 30.12784 & 4 & -2.544 & 1.104 & 0 & No_error
\enddata
\end{deluxetable*}
z\begin{center}z\end{center}z\hlineztable*Úh)ÚpreambleZ	tablefootZdata_endr   r   r   z|lcccccccccc|)r   r   r   Z	col_alignaî  \begin{table*}[h]
\begin{center}
\caption{Mag values \label{tab1}}
\begin{tabular}{|lcccccccccc|}
ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PERROR \\
 & [pixel] & pixels & [mag] & magnitudes & counts &  &  &  &  & perrors \\
14 & 138.538 & 256.405 & 15.461 & 0.003 & 34.85955 & 4 & -0.032 & 0.802 & 0 & No_error \\
18 & 18.114 & 280.170 & 22.329 & 0.206 & 30.12784 & 4 & -2.544 & 1.104 & 0 & No_error \\
\hline
\hline
\end{tabular}
\end{center}
\end{table*}
Útemplate)r   r   a  \begin{tabletype}[tablealign]
preamble
\caption{caption}
\begin{tabular}{col_align}
header_start
ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PERROR \\
 & pixels & pixels & magnitudes & magnitudes & counts &  &  &  &  & perrors \\
header_end
data_start
14 & 138.538 & 256.405 & 15.461 & 0.003 & 34.85955 & 4 & -0.032 & 0.802 & 0 & No_error \\
18 & 18.114 & 280.170 & 22.329 & 0.206 & 30.12784 & 4 & -2.544 & 1.104 & 0 & No_error \\
data_end
\end{tabular}
tablefoot
\end{tabletype}
r   a…  \begin{tabular}{ccccccccccc}
ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PERROR \\
 & pixels & pixels & magnitudes & magnitudes & counts &  &  &  &  & perrors \\
14 & 138.538 & 256.405 & 15.461 & 0.003 & 34.85955 & 4 & -0.032 & 0.802 & 0 & No_error \\
18 & 18.114 & 280.170 & 22.329 & 0.206 & 30.12784 & 4 & -2.544 & 1.104 & 0 & No_error \\
\end{tabular}
Úcssz#table,th,td{border:1px solid black;)r   Zhtmldicta¨  <html>
 <head>
  <meta charset="utf-8"/>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-type"/>
  <style>
table,th,td{border:1px solid black;  </style>
 </head>
 <body>
  <table>
   <thead>
    <tr>
     <th>ID</th>
     <th>XCENTER</th>
     <th>YCENTER</th>
     <th>MAG</th>
     <th>MERR</th>
     <th>MSKY</th>
     <th>NITER</th>
     <th>SHARPNESS</th>
     <th>CHI</th>
     <th>PIER</th>
     <th>PERROR</th>
    </tr>
   </thead>
   <tr>
    <td>14</td>
    <td>138.538</td>
    <td>256.405</td>
    <td>15.461</td>
    <td>0.003</td>
    <td>34.85955</td>
    <td>4</td>
    <td>-0.032</td>
    <td>0.802</td>
    <td>0</td>
    <td>No_error</td>
   </tr>
   <tr>
    <td>18</td>
    <td>18.114</td>
    <td>280.170</td>
    <td>22.329</td>
    <td>0.206</td>
    <td>30.12784</td>
    <td>4</td>
    <td>-2.544</td>
    <td>1.104</td>
    <td>0</td>
    <td>No_error</td>
   </tr>
  </table>
 </body>
</html>
ag  \MERGERAD='INDEF'
\IRAF='NOAO/IRAFV2.10EXPORT'
\USER=''
\HOST='tucana'
\DATE='05-28-93'
\TIME='14:46:13'
\PACKAGE='daophot'
\TASK='nstar'
\IMAGE='test'
\GRPFILE='test.psg.1'
\PSFIMAGE='test.psf.1'
\NSTARFILE='test.nst.1'
\REJFILE='"hello world"'
\SCALE='1.'
\DATAMIN='50.'
\DATAMAX='24500.'
\GAIN='1.'
\READNOISE='0.'
\OTIME='00:07:59.0'
\XAIRMASS='1.238106'
\IFILTER='V'
\RECENTER='yes'
\FITSKY='no'
\PSFMAG='16.594'
\PSFRAD='5.'
\FITRAD='3.'
\MAXITER='50'
\MAXGROUP='60'
\FLATERROR='0.75'
\PROFERROR='5.'
\CLIPEXP='6'
\CLIPRANGE='2.5'
|       ID|   XCENTER|   YCENTER|         MAG|          MERR|           MSKY| NITER|              SHARPNESS|         CHI|  PIER|       PERROR|
|     long|    double|    double|      double|        double|         double|  long|                 double|      double|  long|         char|
|         |    pixels|    pixels|  magnitudes|    magnitudes|         counts|      |                       |            |      |      perrors|
|     null|      null|      null|        null|          null|           null|  null|                   null|        null|  null|         null|
 14        138.538    256.405    15.461       0.003          34.85955        4      -0.032                  0.802        0      No_error
 18        18.114     280.170    22.329       0.206          30.12784        4      -2.544                  1.104        0      No_error
aŒ  \ This is an example of a valid comment.
\ The 2nd data line is used to verify the exact column parsing
\ (unclear if this is a valid for the IPAC format)
\catalog='sao'
\date='Wed Sp 20 09:48:36 1995'
\mykeyword='Another way for defining keyvalue string'
|    ra|   dec| sai|    v2|sptype|
|double|double|long|double|  char|
|  unit|  unit|unit|  unit|  ergs|
|  null|  null|null|  null|  null|
úa b cú1 2 3z1 1 3za b c
1 2 3
1 1 3
)Ú1Úw)Úfill_valuesza b c
w 2 3
w w 3
)r$   r%   Úbza b c
1 2 3
1 w 3
r'   )r&   Úfill_include_namesÚa)r&   Úfill_exclude_names)r&   r(   r*   z%4.2f)r&   r   za b c
1.00 2 3
1.00 w 3
za b c
"" 2 3
1 1 ""
ÚXza b c
X 2 3
w w X
ÚXXXz%4.1fza b c
XXX 2 3
1.0 w XXX
za,b,c
,2,3
1,1,
c                 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monkeypatchÚtmp_path© r1   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/ascii/tests/test_write.pyÚhome_is_tmpdir±  s    	r3   c              
   C   s8  |d krt ƒ }z tj||fd|i| d —Ž W n: tk
rh } zdt|jƒkrR|‚W Y ¢d S d }~X Y nX t|t ƒr~| ¡ }n`t|ƒ d¡r¨t	j
 |¡rœt‚t	j
 |¡}t	j
 |¡s¸t‚t|ƒ�}| ¡ }W 5 Q R X t	 |¡ td| d › �ƒ td|› �ƒ dd	„ | ¡  ¡ D ƒdd	„ | d  ¡  ¡ D ƒk�s4t‚d S )
NÚfast_writerr   ú,not in the list of formats with fast writersú~ú
Expected:
r   úActual:
c                 S   s   g | ]}|  ¡ ‘qS r1   ©Ústrip©Ú.0Úxr1   r1   r2   Ú
<listcomp>Û  s     z%check_write_table.<locals>.<listcomp>)r   r   ÚwriteÚ
ValueErrorr/   ÚvalueÚ
isinstanceÚgetvalueÚ
startswithÚosÚpathÚexistsÚAssertionErrorÚ
expanduserÚopenÚreadÚremoveÚprintr:   Ú
splitlines)Útest_defr   r4   r   ÚeÚactualÚfr1   r1   r2   Úcheck_write_table¿  s,     



ÿrS   c              
   C   sr  |d krt ƒ }t | ¡} d| d krDd| d d j› �}| d d= nd}z |j|f||dœ| d —Ž W n: tk
r¢ } zdt|jƒkrŒ|‚W Y ¢d S d }~X Y nX t|t ƒr¸| 	¡ }n`t|ƒ 
d¡râtj |¡rÖt‚tj |¡}tj |¡sòt‚t|ƒ�}| ¡ }W 5 Q R X t |¡ td| d	 › �ƒ td
|› �ƒ dd„ | ¡  ¡ D ƒdd„ | d	  ¡  ¡ D ƒk�snt‚d S )Nr   r   zascii.r   ©Úformatr4   r5   r6   r7   r   r8   c                 S   s   g | ]}|  ¡ ‘qS r1   r9   r;   r1   r1   r2   r>     s     z/check_write_table_via_table.<locals>.<listcomp>)r   ÚcopyÚdeepcopyZ_format_namer?   r@   r/   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r:   rN   )rO   r   r4   r   rU   rP   rQ   rR   r1   r1   r2   Úcheck_write_table_via_tableà  s6    
 



ÿrX   r4   TÚpath_formatÚbufferÚplainú	tilde-strztilde-pathlibc                 C   sŠ   t jt jd�}| d¡}|dkr&d }n6|dkr8|d }n$|dkrPtj dd¡}nt dd¡}t	D ]$}t
||| |d� t||| |d� q`d S )	N©ÚReaderzdata/daophot.datrZ   r[   r   r\   r6   )r   )r   Ú
get_readerZDaophotrK   rE   rF   ÚjoinÚpathlibÚPathÚ	test_defsrS   rX   )r4   r0   r3   rY   r   ÚdataZout_namerO   r1   r1   r2   Útest_write_table  s    

re   c                 C   s$   t  t¡}tD ]}t||| ƒ qd S )N)r   rK   Útab_to_fillÚtest_defs_fill_valuerS   ©r4   rd   rO   r1   r1   r2   Útest_write_fill_values  s    
ri   c                 C   sN   t  t¡}tj|dd�}ddg|d _ddg|d _tD ]}t||| ƒ q8dS )zsee discussion in #2255T©ÚmaskedFr)   ÚcN)r   rK   rf   r   ÚTableÚmaskÚtest_def_masked_fill_valuerS   rh   r1   r1   r2   Ú test_write_fill_masked_different&  s    
rp   c                 C   s>   t jt jd�}| d¡}tD ]}t||| ƒ t||| ƒ qdS )z*Write an IPAC table that contains no data.r]   údata/no_data_ipac.datN)r   r_   ÚIpacrK   Útest_defs_no_datarS   rX   )r4   r   rd   rO   r1   r1   r2   Útest_write_no_data_ipac2  s
    
rt   c               	   C   sd   t jt jd�} |  d¡}d|jd< tƒ }tjtdd��}|j	|dd� W 5 Q R X t
|ƒd	ks`t‚d
S )zÔWrite an IPAC table that contains no data but has invalid (incorrectly
    specified) metadata stored in the top-level metadata and therefore should
    raise a warning, and check that the warning has been raisedr]   rq   ÚextraÚblahz.*were not written.*©Úmatchú
ascii.ipac©rU   r   N©r   r_   rr   rK   Úmetar   ÚpytestÚwarnsr
   r?   ÚlenrH   ©r   rd   r   Úwarnr1   r1   r2   Ú%test_write_invalid_toplevel_meta_ipac=  s    

r‚   c               	   C   sh   t jt jd�} |  d¡}d|jd d< tƒ }tjtdd��}|j	|dd	� W 5 Q R X t
|ƒd
ksdt‚dS )a  Write an IPAC table that contains no data but has invalid (incorrectly
    specified) metadata stored appropriately in the ``keywords`` section
    of the metadata but with invalid format and therefore should raise a
    warning, and check that the warning has been raisedr]   rq   ÚinvalidÚkeywordsrv   z.*has been skipped.*rw   ry   rz   r   Nr{   r€   r1   r1   r2   Ú$test_write_invalid_keyword_meta_ipacK  s    
r…   c                  C   sB   t jt jd�} |  d¡}ddi|jd d< tƒ }|j|dd� d	S )
zsWrite an IPAC table that contains no data and has *correctly* specified
    metadata.  No warnings should be issuedr]   rq   rA   rƒ   r„   rv   ry   rz   N)r   r_   rr   rK   r|   r   r?   )r   rd   r   r1   r1   r2   Útest_write_valid_meta_ipacZ  s
    
r†   c                 C   s¸   t  d¡}tƒ }t j||d| d� dddddg}| ¡  ¡ |ksDt‚tƒ }t j||d	| d� d
ddddg}| ¡  ¡ |ks~t‚tƒ }t j||dd| d� ddg}| ¡  ¡ |ks´t‚dS )z5Write comments in output originally read by io.ascii.z#c1
  # c2	
a,b,c
#  c3
1,2,3ÚbasicrT   ú# c1ú# c2ú# c3r"   r#   Úcommented_headerz# a b cF©rU   r   r4   N)r   rK   r   r?   rC   rN   rH   )r4   rd   r   Úexpectedr1   r1   r2   Útest_write_commentsd  s    
rŽ   Úfmtz%0.1fz.1fz0.1fz{0:0.1f}c                 C   sR   t  d¡}tƒ }dddddg}||d _t j||d| d	� | ¡  ¡ |ksNt‚d
S )z%Check different formats for a column.z&#c1
  # c2	
a,b,c
#  c3
1.11,2.22,3.33rˆ   r‰   rŠ   r"   z1.1 2.22 3.33r)   r‡   rT   N)r   rK   r   rU   r?   rC   rN   rH   )r4   r�   rd   r   r�   r1   r1   r2   Útest_write_formatz  s    

r�   c                 C   sN   t jdgdgdggdd�}tƒ }tj||d| d� | ¡  ¡ d d	ksJt‚d
S )z2Names should be stripped of whitespace by default.r   é   é   )z AzB z C ©ÚnamesÚcsvrT   r   zA,B,CN©r   rm   r   r   r?   rC   rN   rH   )r4   rd   r   r1   r1   r2   Útest_strip_names†  s    r—   c                  C   sÖ   t  t jdddgd�t jdddgd�g¡} t tjd ¡}dd	i|d
< tƒ }d dt	j
¡}tj| |d|d� | ¡ |ks|t‚tj| d _tj| d _tƒ }tj| |dtjd d� | ¡ | dd¡ dd¡ksÒt‚dS )zµ
    Check to make sure that Latex and AASTex writers attempt to fall
    back on the **unit** attribute of **Column** if the supplied
    **latexdict** does not specify units.
    Údater)   r'   )Únamerd   zNUV exp.timer   r‘   ZAAÚsr   z‘\begin{table}{cc}
\tablehead{\colhead{date} & \colhead{NUV exp.time}\\ \colhead{ } & \colhead{s}}
\startdata
a & 1 \\
b & 2
\enddata
\end{table}
Ú
Úaastex)rU   r   z
colhead{s}zcolhead{$\mathrm{s}$}z
colhead{ }zcolhead{$\mathrm{yr}$}N)r   rm   ÚColumnrV   rW   r   Ú
latexdictsr   ÚreplacerE   Úlinesepr?   rC   rH   Úurš   ÚunitÚyr)Útr   r   r�   r1   r1   r2   Útest_latex_units�  s2    þÿ	 ÷
 ÿ þr¥   c              	   C   sV   t  ddgg¡}t t¡� }tƒ }tj||dd| d� W 5 Q R X dt|j	ƒksRt
‚dS )zr
    Test the fix for #3562 with confusing exception using comment=False
    for the commented_header writer.
    r   r‘   r‹   FrŒ   z8for the commented_header writer you must supply a stringN)r   rm   r}   Úraisesr@   r   r   r?   r/   rA   rH   )r4   r¤   Úerrr   r1   r1   r2   Útest_commented_header_comments¶  s        ÿr¨   c                 C   sJ   t jddggdgd�}tƒ }tj||| d� | ¡  ¡ dddgksFt‚dS )ú^
    Test the fix for #4350 where byte strings were output with a
    leading `b` on Py3.
    ÚHelloZWorldÚS10©Údtype©r4   Úcol0Nr–   ©r4   r¤   r   r1   r1   r2   Útest_byte_string_outputÅ  s    r±   z<names, include_names, exclude_names, formats, issues_warningr=   Úyz%dz%f)r=   r²   )ÚpÚqÚz)r³   r²   c           	   	   C   st   t  dddgdddgg¡}tƒ }|r0t t¡}ntƒ }|�}tj||| |||d� W 5 Q R X |rpt	|ƒdkspt
‚dS )	zTest for #4508.r   r‘   r’   çffffff@çÍÌÌÌÌÌ@ç333333@)r”   r   r   r   N©r   rm   r   r}   r~   r
   r   r   r?   r   rH   )	r”   r   r   r   Úissues_warningr¤   r   Úctxr�   r1   r1   r2   Útest_names_with_formatsÑ  s     ú	r¼   zformats, issues_warningc              	   C   sn   t  dddgdddgg¡}tƒ }|r0t t¡}ntƒ }|�}tj||| d� W 5 Q R X |rjt	|ƒdksjt
‚dS )	zTest the fix for #4508.r   r‘   r’   r¶   r·   r¸   )r   Nr¹   )r   rº   r¤   r   r»   r�   r1   r1   r2   Útest_columns_names_with_formats÷  s    r½   c                 C   s„   t jddgddggddgd�}tƒ }tj||| d� | ¡  ¡ dddgksNt‚tƒ }tj||| d	d
� | ¡  ¡ ddd	gks€t‚dS )r©   rª   Ú r«   r¬   r®   z	col0 col1zHello ""z"" ""ú,)r4   r   z	col0,col1zHello,Nr–   r°   r1   r1   r2   Útest_write_quoted_empty_field  s    rÀ   c                 C   sB   t jg gdgd�}tƒ }tj||| d� | ¡  ¡ dgks>t‚dS )zTest writing empty table #8275.ZS2r¬   r®   r¯   Nr–   r°   r1   r1   r2   Útest_write_empty_table!  s    rÁ   rU   r   r•   ÚhtmlÚlatexzascii.fixed_widthc           	   	   C   s   |d }|dkr|}n$|dkr.t j dd¡}nt dd¡}t|dƒ� W 5 Q R X tjddgddggddgd	�}tj	t
td
�� |j|| |d� W 5 Q R X |j|d| |d� t|dƒ�*}|j|d| |d� |j|d| |d� W 5 Q R X d|krüt j |¡rüt‚dS )z1Test overwrite argument for various ASCII writersztable-tmp.datr[   r\   r6   r%   rª   r¾   r«   r¬   rw   rT   T)Ú	overwriterU   r4   FÚtildeN)rE   rF   r`   ra   rb   rJ   r   rm   r}   r¦   ÚOSErrorr   r?   rG   rH   )	rU   r4   r0   r3   rY   Ztrue_filenameÚfilenamer¤   Úfpr1   r1   r2   Útest_write_overwrite_ascii*  s"    	
rÉ   Úfmt_name_classc           
      C   s>  | \}}t |ddƒsdS |dkr$tr,|dkr0dS d|krJtdddgd	�}n
tdd
�}tƒ }|tjjk}ztj||||d� W n tk
r’   Y dS X d|kr¦d|j	ini }d|krÄ| 
d|j	dœ¡ tj| ¡ f||ddœ|—Ž}|j	|j	ksòt‚t| ¡ | ¡ ƒD ]4\}}	|jj|	jjk�s"t‚t ||	k¡�st‚�qdS )z�
    Round trip a simple masked table through every writable format and confirm
    that reading back gives the same result.
    Ú_io_registry_can_writeTNrÂ   Zfixed_widthZqdprR   Úi)rk   Úkindsrj   rT   Z	no_headerr”   r   )Ztable_idr”   F)rU   Zfast_readerÚguess)Úgetattrr	   r   r   r   ÚcoreÚFAST_CLASSESr?   ÚImportErrorZcolnamesÚupdaterK   rC   rH   ÚzipZitercolsr­   ÚkindÚnpÚall)
rÊ   Úfmt_nameÚfmt_clsr¤   r   Úfastr   Út2ÚcolZcol2r1   r1   r2   Útest_roundtrip_maskedT  s<    
ÿ  ÿÿrÝ   c              	   C   sv   |d }t jdddggdgd�}tj||| d� t|dd	��}| ¡ }W 5 Q R X |tj ddddg¡tj ksrt	‚d S )
NÚtestr)   r'   rl   rÜ   r“   r®   r¾   )Únewline)
r   rm   r   r?   rJ   rK   rE   r    r`   rH   )r4   r0   rÇ   r¤   rR   Úcontentr1   r1   r2   Útest_write_newlines  s    rá   c                 C   s–   t ƒ }tjddgddggddgd�}dg|jd	< tj||d
| d� | ¡  ¡ dddgks\t‚t ƒ }tj||d
| dd� | ¡  ¡ ddddgks’t‚dS )zÍ
    Test fix for #7357 where writing a Table with comments to 'csv' fails with
    a cryptic message. The comments are dropped by default, but when comment='#'
    is supplied they are still written.
    r   r‘   r’   é   r)   r'   r“   ZhelloÚcommentsr•   rT   za,bz1,3z2,4ú#)rU   r4   r   z#helloN)	r   r   rm   r|   r   r?   rC   rN   rH   ©r4   r   r¤   r1   r1   r2   Útest_write_csv_with_comments�  s    ræ   c                 C   s`   t ƒ }tjddgddgtj gddgd�}tj||| dddœd	� | ¡  ¡ d
ddgks\t	‚dS )z~
    Test fix for #8680 where writing a QTable with a quantity mixin generates
    an exception if a format is specified.
    r   r‘   r)   r'   r“   z%02dz%.2f)r)   r'   )r4   r   za bz01 1.00z02 2.00N)
r   r   ÚQTabler¡   Úmr   r?   rC   rN   rH   rå   r1   r1   r2   Útest_write_formatted_mixin¢  s    $ré   c               	   C   sR   t ƒ } tjddgddggddgd�}tjtdd�� tj|| dd	� W 5 Q R X d S )
Nr   r‘   r)   r'   r“   znwrite\(\) argument 'fast_writer' must be a \(<class 'bool'>, <class 'str'>\) object, got <class 'int'> insteadrw   é   r®   )r   r   rç   r}   r¦   Ú	TypeErrorr   r?   )r   r¤   r1   r1   r2   Útest_validate_write_kwargs®  s    þrì   c              	   C   s    | \}}t |ddƒsdS |dkr$tr,|dkr0dS tƒ }t ¡ }t d¡ dddd¡|d< d	dg|d
< |tj	j
k}tjtdd�� tj||||d� W 5 Q R X dS )z\
    Test that trying to write a multidim column fails in every format except
    ECSV.
    rË   TNrÂ   )ZecsvrÃ   rœ   é   r‘   r)   r   r'   zcolumn\(s\) with dimensionrw   rT   )rÏ   r	   r   r   rm   rÖ   ZarangeZreshaper   rÐ   rÑ   r}   r¦   r@   r?   )rÊ   rØ   rÙ   r   r¤   rÚ   r1   r1   r2   Útest_multidim_column_error»  s    rî   c                 C   s\   t  t¡}tj|dd�}ddg|d _ddg|d _t|j ¡ ƒ}t	D ]}t
||| ƒ qFdS )zt
    Test that writing a set of columns also roundtrips (as long as the
    table does not have metadata, etc.)
    Trj   Fr)   rl   N)r   rK   rf   r   rm   rn   ÚlistÚcolumnsÚvaluesro   rS   rh   r1   r1   r2   Útest_write_as_columnsÔ  s    
rò   )N)N)SrV   rE   ra   Ú
contextlibr   Úior   Ú	itertoolsr   ÚnumpyrÖ   r}   Zastropyr   r   r¡   Z
astropy.ior   Zastropy.table.table_helpersr   Z"astropy.utils.compat.optional_depsr	   Zastropy.utils.exceptionsr
   Zastropy.utils.miscr   Úcommonr   r   ÚdictZRdbZTabZCsvZNoHeaderZCommentedHeaderZLatexZAASTexrž   ÚHTMLrr   rc   rs   rf   rg   rk   ro   Zfixturer3   rS   rX   ÚmarkZparametrizere   ri   rp   rt   r‚   r…   r†   rŽ   r�   r—   r¥   r¨   r±   r¼   r½   rÀ   rÁ   rÉ   rï   rÐ   rÑ   ÚitemsZFORMAT_CLASSESZfmt_name_classesrÝ   rá   ræ   ré   rì   rî   rò   r1   r1   r1   r2   Ú<module>   sô  þþýúþ	
þ
þ
þ
þþ
þ
þýý	öúõòþþ ÿü<
þ€ Œ  $
þÿ
þþþþþýúþË@þþ ÿü

þå&

!
( 
ÿ







'

ùþ

üþ	


 ÿ ÿ
*



