
    HR-ez                        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           e ed          d           e edddddgd          d           e eej        dg          d           e eej                  d           e eej                   d           e eej!                  d           e eej"                  d            e eej"        d!"          d#           e eej#                  d$           e eej$                  d%           e eej$        d&d'd(d)d*d+d,-          d.           e eej#        d&d/d0d1d1gd'd(d)d2d3d4d56          d7           e eej#        ej%        d8         9          d:           e eej#        d;di9          d<           e eej&        d=d>i?          d@           e eej'                  dA          gZ( e eej'                  dB          gZ)g dCZ* e e            dD           e edEF          dG           e edHF          dI           e edEdJgK          dI           e edEdLgM          dI           e edEdLgdLdJgN          dD           e edEgdLdOiP          dQ          gZ+ e e            dR           e edEej,        dSfgF          dT           e edEej,        dUfgdLdViP          dW           e eej                   dX          gZ-ej.        dY             Z/ddZZ0dd[Z1ej2        3                    d\d]dg          ej2        3                    d^g d_          d`                         Z4ej2        3                    d\d]dg          da             Z5ej2        3                    d\d]dg          db             Z6ej2        3                    d\d]dg          dc             Z7dd Z8de Z9df Z:ej2        3                    d\d]dg          dg             Z;ej2        3                    d\d]dg          ej2        3                    dhg di          dj                         Z<ej2        3                    d\d]dg          dk             Z=dl Z>ej2        3                    d\d]dg          dm             Z?ej2        3                    d\d]dg          dn             Z@ej2        3                    dodpdqgdpdqgdpgdrdsdtd]fdpdqgdpdqgdqgdpdridfdpdqgdpdqgg drdsdud]fdpdqgdpdqgg dvdsid]fdpdqgdpdqgg dpdridfdpdqgdpdqgg drdsdwd]fdpdqgdpdqgg i dfg          dx             ZAej2        3                    dydrdsdwd]fdrdsdtd]fdvdsid]fi dfg          dz             ZBej2        3                    d\d]dg          d{             ZCej2        3                    d\d]dg          d|             ZDej2        3                    d}g d~          ej2        3                    d\d]dg          ej2        3                    d^g d          d                                     ZE eF eejG        jH        I                                ejG        jJ        I                                                    ZKej2        3                    deK          d             ZLej2        3                    d\d]dg          d             ZMej2        3                    d\d]dg          d             ZNej2        3                    d\d]dg          d             ZOd ZPej2        3                    deK          d             ZQej2        3                    d\d]dg          d             ZRdS )    N)nullcontext)StringIO)chain)table)units)ascii)simple_table)HAS_BS4)AstropyWarning)_NOT_OVERWRITING_MSG_MATCH   )setup_functionteardown_functionzID 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_namesstrip_whitespacez:XCENTER YCENTER
"       138.5" 256.4
"        18.1" 280.2
CHI)Writerexclude_nameszID	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   zID	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
zID,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
z14 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])MAGr   zdeluxetable*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)preamble	tablefootdata_endr   r   r    z|lcccccccccc|)r   r!   r"   	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   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
r0   )r/   fill_include_namesa)r/   fill_exclude_names)r/   r1   r3   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                     |                      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)setenvstr)monkeypatchtmp_paths     Alib/python3.11/site-packages/astropy/io/ascii/tests/test_write.pyhome_is_tmpdirr>     sB     vs8}}---}c(mm44444    c                    |t                      }	 t          j        ||fd|i| d          n0# t          $ r#}dt	          |j                  vr|Y d }~d S d }~ww xY wt          |t                     r|                                }nt	          |                              d          r@t          j
                            |          rJ t          j
                            |          }t          j
                            |          sJ t          |          5 }|                                }d d d            n# 1 swxY w Y   t          j        |           t!          d| d                     t!          d|            d |                                                                D             d	 | d                                                                         D             k    sJ d S )
Nfast_writerr   ,not in the list of formats with fast writers~
Expected:
r   Actual:
c                 6    g | ]}|                                 S  strip.0xs     r=   
<listcomp>z%check_write_table.<locals>.<listcomp>       ;;;!AGGII;;;r?   c                 6    g | ]}|                                 S rG   rH   rJ   s     r=   rM   z%check_write_table.<locals>.<listcomp>  3     @ @ @		@ @ @r?   )r   r   write
ValueErrorr:   value
isinstancegetvalue
startswithospathexists
expanduseropenreadremoveprintrI   
splitlines)test_defr   rA   r   eactualfs          r=   check_write_tablerd     s6   
{jjE3NNKN8H;MNNNN   9QWMMG
 #x    s88s## 	* w~~c*****'$$S))Cw~~c"""""#YY 	!VVXXF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	#	
)
)
)***	
f

;;v||~~88::;;; @ @#E?0022==??@ @ @      s&   . 
AAAD;;D?D?c                 X   |t                      }t          j        |           } d| d         v r d| d         d         j         }| d         d= nd}	  |j        |f||d| d          n0# t
          $ r#}dt          |j                  vr|Y d }~d S d }~ww xY wt          |t                     r|	                                }nt          |          
                    d          r@t          j                            |          rJ t          j                            |          }t          j                            |          sJ t          |          5 }|                                }d d d            n# 1 swxY w Y   t          j        |           t%          d| d	                     t%          d
|            d |                                                                D             d | d	                                                                         D             k    sJ d S )Nr   r   zascii.r   formatrA   rB   rC   rD   r   rE   c                 6    g | ]}|                                 S rG   rH   rJ   s     r=   rM   z/check_write_table_via_table.<locals>.<listcomp>  rN   r?   c                 6    g | ]}|                                 S rG   rH   rJ   s     r=   rM   z/check_write_table_via_table.<locals>.<listcomp>  rP   r?   )r   copydeepcopy_format_namerQ   rR   r:   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   rI   r_   )r`   r   rA   r   rg   ra   rb   rc   s           r=   check_write_table_via_tablerm     s   
{jj}X&&H8H%%%E(8,X6CEEXx((CVKVV8HCUVVVV   9QWMMG
 #x    s88s## 	* w~~c*****'$$S))Cw~~c"""""#YY 	!VVXXF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	#	
)
)
)***	
f

;;v||~~88::;;; @ @#E?0022==??@ @ @      s*   A* *
B4BBE77E;>E;rA   Tpath_format)bufferplain	tilde-strtilde-pathlibc                 f   t          j        t           j                  } |j        d          }|dk    rd }nH|dk    r|dz  }n<|dk    r!t          j                            dd          }nt          j        dd          }t          D ](}t          ||| |           t          ||| |           )d S )	NReaderzdata/daophot.datro   rp   r   rq   rC   )r   )r   
get_readerDaophotr\   rW   rX   joinpathlibPath	test_defsrd   rm   )rA   r<   r>   rn   r   dataout_namer`   s           r=   test_write_tabler~     s    
 EM222E5:())Dh			g%		#	#7<<W--<W-- O O(D+8DDDD#HdKXNNNNNO Or?   c                 n    t          j        t                    }t          D ]}t	          |||            d S N)r   r\   tab_to_filltest_defs_fill_valuerd   rA   r|   r`   s      r=   test_write_fill_valuesr     s?    :k""D( 7 7(D+66667 7r?   c                     t          j        t                    }t          j        |d          }ddg|d         _        ddg|d         _        t          D ]}t          |||            dS )zsee discussion in #2255TmaskedFr2   cN)r   r\   r   r   Tablemasktest_def_masked_fill_valuerd   r   s      r=    test_write_fill_masked_differentr   &  ss     :k""D;tD)))DE]DINT]DIN. 7 7(D+66667 7r?   c                     t          j        t           j                  } |j        d          }t          D ]$}t          |||            t          |||            %dS )z*Write an IPAC table that contains no data.rt   data/no_data_ipac.datN)r   rv   Ipacr\   test_defs_no_datard   rm   )rA   r   r|   r`   s       r=   test_write_no_data_ipacr   2  so     EJ///E5:-..D% A A(D+666#HdK@@@@A Ar?   c                  R   t          j        t           j                  }  | j        d          }d|j        d<   t                      }t          j        t          d          5 }|	                    |d           d	d	d	           n# 1 swxY w Y   t          |          d
k    sJ d	S )zWrite 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 raisedrt   r   extrablahz.*were not written.*match
ascii.ipacrg   Nr   r   rv   r   r\   metar   pytestwarnsr   rQ   lenr   r|   r   warns       r=   %test_write_invalid_toplevel_meta_ipacr   =  s     EJ///E5:-..DDIf
**C	n,C	D	D	D -

3|
,,,- - - - - - - - - - - - - - -t99>>>>>>s   #BBBc                  ^   t          j        t           j                  }  | j        d          }d|j        d         d<   t                      }t          j        t          d          5 }|	                    |d	           d
d
d
           n# 1 swxY w Y   t          |          dk    sJ 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 raisedrt   r   invalidkeywordsr   z.*has been skipped.*r   r   r   Nr   r   r   s       r=   $test_write_invalid_keyword_meta_ipacr   K  s    
 EJ///E5:-..D$-DIj&!
**C	n,C	D	D	D -

3|
,,,- - - - - - - - - - - - - - -t99>>>>>>s   )BBBc                      t          j        t           j                  }  | j        d          }ddi|j        d         d<   t                      }|                    |d           d	S )
zsWrite an IPAC table that contains no data and has *correctly* specified
    metadata.  No warnings should be issuedrt   r   rS   r   r   r   r   r   N)r   rv   r   r\   r   r   rQ   )r   r|   r   s      r=   test_write_valid_meta_ipacr   Z  sf     EJ///E5:-..D%,i$8DIj&!
**CJJs<J(((((r?   c                 4   t          j        d          }t                      }t          j        ||d|            g d}|                                                                |k    sJ t                      }t          j        ||d|            g d}|                                                                |k    sJ t                      }t          j        ||dd|            d	d
g}|                                                                |k    sJ dS )z5Write comments in output originally read by io.ascii.z#c1
  # c2	
a,b,c
#  c3
1,2,3basicrf   )# c1# c2# c3r+   r,   commented_header)z# a b cr   r   r   r,   Frg   r   rA   r+   r,   N)r   r\   r   rQ   rU   r_   )rA   r|   r   expecteds       r=   test_write_commentsr   d  s    ::;;D
**C	Kc'{CCCC999H<<>>$$&&(2222 **C	Kc"4+NNNN;;;H<<>>$$&&(2222 **C	Kc'5kRRRR!H<<>>$$&&(222222r?   fmt)z%0.1fz.1fz0.1fz{0:0.1f}c                     t          j        d          }t                      }g d}||d         _        t          j        ||d|            |                                                                |k    sJ dS )z%Check different formats for a column.z&#c1
  # c2	
a,b,c
#  c3
1.11,2.22,3.33)r   r   r   r+   z1.1 2.22 3.33r2   r   rf   N)r   r\   r   rg   rQ   rU   r_   )rA   r   r|   r   r   s        r=   test_write_formatr   z  sx     :CDDD
**CAAAHDI	Kc'{CCCC<<>>$$&&(222222r?   c                     t          j        dgdgdggd          }t                      }t          j        ||d|            |                                                                d         d	k    sJ d
S )z2Names should be stripped of whitespace by default.r         )z AzB z C namescsvrf   r   zA,B,CNr   r   r   r   rQ   rU   r_   )rA   r|   r   s      r=   test_strip_namesr     sw     ;aS1#.ABBBD
**C	Kc%[AAAA<<>>$$&&q)W444444r?   c                     t          j        t          j        dddg          t          j        dddg          g          } t          j        t
          j        d                   }dd	i|d
<   t                      }d                    dt          j
                  }t          j        | |d|           |                                |k    sJ t          j        | d         _        t          j        | d         _        t                      }t          j        | |dt
          j        d                    |                                |                    dd                              dd          k    sJ 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.
    dater2   r0   )namer|   zNUV exp.timer   r   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)rg   r"   z
colhead{s}zcolhead{$\mathrm{s}$}z
colhead{ }zcolhead{$\mathrm{yr}$}N)r   r   Columnrj   rk   r   
latexdictsr   replacerW   lineseprQ   rU   ur   unityr)tr"   r   r   s       r=   test_latex_unitsr     sd    	LfC:666LnAq6:::	
	 	A e.t455I(#.Ig
**C Gbj   
K3x9====<<>>X%%%%SAnTAfIN
**C	K3x53CD3IJJJJ<<>>X--. gl5667 7 7 7 7 7r?   c                    t          j        ddgg          }t          j        t                    5 }t                      }t          j        ||dd|            ddd           n# 1 swxY w Y   dt          |j	                  v sJ dS )zr
    Test the fix for #3562 with confusing exception using comment=False
    for the commented_header writer.
    r   r   r   Fr   Nz8for the commented_header writer you must supply a string)
r   r   r   raisesrR   r   r   rQ   r:   rS   )rA   r   errr   s       r=   test_commented_header_commentsr     s     	aVHA	z	"	" 
cjjs-u+	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 FSYWWWWWWs   (A%%A),A)c                     t          j        ddggdg          }t                      }t          j        |||            |                                                                g dk    sJ dS )^
    Test the fix for #4350 where byte strings were output with a
    leading `b` on Py3.
    HelloWorldS10dtyperA   )col0r   r   Nr   rA   r   r   s      r=   test_byte_string_outputr     st     	gw'(888A
**C	K3K0000<<>>$$&&*D*D*DDDDDDDr?   z<names, include_names, exclude_names, formats, issues_warningrL   yz%dz%f)rL   r   )pqz)r   r   c           	      D   t          j        g dg dg          }t                      }|rt          j        t
                    }nt                      }|5 }t          j        ||| |||           ddd           n# 1 swxY w Y   |rt          |          dk    sJ dS dS )zTest for #4508.r   r   r   gffffff@g@g333333@)r   r   r   r   Nr   
r   r   r   r   r   r   r   r   rQ   r   )	r   r   r   r   issues_warningr   r   ctxr   s	            r=   test_names_with_formatsr     s      	YYY011A
**C l>**mm	 
''	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
  4yyA~~~~ ~s   A<<B B zformats, issues_warningc                 >   t          j        g dg dg          }t                      }|rt          j        t
                    }nt                      }|5 }t          j        |||            ddd           n# 1 swxY w Y   |rt          |          dk    sJ dS dS )zTest the fix for #4508.r   r   )r   Nr   r   )r   r   r   r   r   r   s         r=   test_columns_names_with_formatsr     s     	YYY011A
**C l>**mm	 -AsG,,,,- - - - - - - - - - - - - - -  4yyA~~~~ ~s   A99A= A=c                    t          j        ddgddggddg          }t                      }t          j        |||            |                                                                g dk    sJ t                      }t          j        ||| d           |                                                                g d	k    sJ d
S )r   r    r   r   r   )z	col0 col1zHello ""z"" "",)rA   r   )z	col0,col1zHello,r   Nr   r   s      r=   test_write_quoted_empty_fieldr     s     	gr]RH-eU^DDDA
**C	K3K0000<<>>$$&&*L*L*LLLLL
**C	K3K3????<<>>$$&&*F*F*FFFFFFFr?   c                     t          j        g gdg          }t                      }t          j        |||            |                                                                dgk    sJ dS )zTest writing empty table #8275.S2r   r   r   Nr   r   s      r=   test_write_empty_tabler   !  si     	RD'''A
**C	K3K0000<<>>$$&&6(222222r?   rg   )r   r   htmllatexzascii.fixed_widthr   )rp   rq   rr   c                    |dz  }|dk    r|}n<|dk    r!t           j                            dd          }nt          j        dd          }t          |d          5  	 ddd           n# 1 swxY w Y   t          j        ddgddggd	d	g
          }t          j	        t          t                    5  |                    || |           ddd           n# 1 swxY w Y   |                    |d| |           t          |d          5 }|                    |d| |           |                    |d| |           ddd           n# 1 swxY w Y   d|v r!t           j                            |          rJ dS dS )z1Test overwrite argument for various ASCII writersztable-tmp.datrp   rq   rC   r.   Nr   r   r   r   r   rf   T)	overwriterg   rA   Ftilde)rW   rX   rx   ry   rz   r[   r   r   r   r   OSErrorr   rQ   rY   )	rg   rA   r<   r>   rn   true_filenamefilenamer   fps	            r=   test_write_overwrite_asciir   *  so    .Mg 		#	#7<<_55<_55	mS	!	!                 	gr]RH-eU^DDDA	w&@	A	A	A B B	[AAAB B B B B B B B B B B B B B B GGHVGMMM 
mS	!	! LR	eFLLL	d6{KKKL L L L L L L L L L L L L L L +7>>(+++++ ++s6   A))A-0A-2CCC3E

EEfmt_name_classc                    | \  }}t          |dd          sdS |dk    rt          r|dk    rdS d|v rt          dddg	          }nt          d
          }t                      }|t          j        j        v }	 t	          j        ||||           n# t          $ r Y dS w xY wd|v r	d|j	        ini }d|v r|
                    d|j	        d           t	          j        |                                f||dd|}|j	        |j	        k    sJ t          |                                |                                          D ];\  }}	|j        j        |	j        j        k    sJ t#          j        ||	k              sJ <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   fixed_widthqdprc   i)r   kindsr   rf   	no_headerr   r   )table_idr   F)rg   fast_readerguess)getattrr
   r	   r   r   coreFAST_CLASSESrQ   ImportErrorcolnamesupdater\   rU   zipitercolsr   kindnpall)
r   fmt_namefmt_clsr   r   fastr   t2colcol2s
             r=   test_roundtrip_maskedr  T  s    'Hg74d;;  	F7x=/H/HS#J777%%%
**Cuz..DAs8>>>>>    '2X&=&=gqz""2F1qz::;;;	
'T
 
JP
 
B :$$$$r{{}}55 # #	Ty~0000vcTk""""""# #s   8B 
BBc                 T   |dz  }t          j        g dgdg          }t          j        |||            t	          |d          5 }|                                }d d d            n# 1 swxY w Y   |t          j                            g d          t          j        z   k    sJ d S )	Ntest)r2   r0   r   r  r   r   r   )newline)r  r2   r0   r   )	r   r   r   rQ   r[   r\   rW   r   rx   )rA   r<   r   r   rc   contents         r=   test_write_newlinesr    s     & H___%eW555A	K85555	h	#	#	# q&&((               bjoo&<&<&<==
JJJJJJJs   A))A-0A-c                    t                      }t          j        ddgddggddg          }dg|j        d	<   t	          j        ||d
|            |                                                                g dk    sJ t                      }t	          j        ||d
| d           |                                                                g dk    sJ 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      r2   r0   r   hellocommentsr   rf   )a,b1,32,4#)rg   rA   r   )z#hellor  r  r   N)r   r   r   r   r   rQ   rU   r_   rA   r   r   s      r=   test_write_csv_with_commentsr#    s     **CaVaV$S#J777A!AF:	K3u+>>>><<>>$$&&*?*?*?????
**C	K3u+sKKKK<<>>$$&&*I*I*IIIIIIIr?   c                 
   t                      }t          j        ddgddgt          j        z  gddg          }t          j        ||| ddd	           |                                                                g d
k    sJ 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   r2   r0   r   z%02dz%.2f)r2   r0   )rA   r   )za bz01 1.00z02 2.00N)	r   r   QTabler   mr   rQ   rU   r_   r"  s      r=   test_write_formatted_mixinr'    s     **Cq!fq!fqsl+C:>>>A	K3KvF9S9STTTT<<>>$$&&*G*G*GGGGGGGr?   c                      t                      } t          j        ddgddggddg          }t          j        t
          d          5  t          j        || d	           d d d            d S # 1 swxY w Y   d S )
Nr   r   r2   r0   r   znwrite\(\) argument 'fast_writer' must be a \(<class 'bool'>, <class 'str'>\) object, got <class 'int'> insteadr      r   )r   r   r%  r   r   	TypeErrorr   rQ   )r   r   s     r=   test_validate_write_kwargsr+    s    
**Cq!fq!f%c3Z888A	%
 
 
 , , 	As++++, , , , , , , , , , , , , , , , , ,s   A--A14A1c                    | \  }}t          |dd          sdS |dk    rt          r|dv rdS t                      }t          j                    }t          j        d                              dddd          |d<   d	dg|d
<   |t          j	        j
        v }t          j        t          d          5  t          j        ||||           ddd           dS # 1 swxY w Y   dS )z\
    Test that trying to write a multidim column fails in every format except
    ECSV.
    r   TNr   )ecsvr   r      r   r2   r   r0   zcolumn\(s\) with dimensionr   rf   )r  r
   r   r   r   r  arangereshaper   r  r  r   r   rR   rQ   )r   r  r  r   r   r  s         r=   test_multidim_column_errorr1    s2    'Hg74d;;  	F7x;V/V/V
**CAYr]]""1aA..AcFVAcFuz..D	z)F	G	G	G ? ?As8>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   /CCCc                 "   t          j        t                    }t          j        |d          }ddg|d         _        ddg|d         _        t          |j                                                  }t          D ]}t          |||            dS )zt
    Test that writing a set of columns also roundtrips (as long as the
    table does not have metadata, etc.)
    Tr   Fr2   r   N)r   r\   r   r   r   r   listcolumnsvaluesr   rd   r   s      r=   test_write_as_columnsr6    s     :k""D;tD)))DE]DINT]DIN##%%&&D. 7 7(D+66667 7r?   r   )Srj   rW   ry   
contextlibr   ior   	itertoolsr   numpyr  r   astropyr   r   r   
astropy.ior   astropy.table.table_helpersr	   "astropy.utils.compat.optional_depsr
   astropy.utils.exceptionsr   astropy.utils.miscr   commonr   r   dictRdbTabCsvNoHeaderCommentedHeaderLatexAASTexr   HTMLr   r{   r   r   r   r   r   fixturer>   rd   rm   markparametrizer~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3  r  r  itemsFORMAT_CLASSESfmt_name_classesr  r  r#  r'  r+  r1  r6  rG   r?   r=   <module>rQ     s    				  " " " " " "                                    4 4 4 4 4 4 6 6 6 6 6 6 3 3 3 3 3 3 9 9 9 9 9 9 5 5 5 5 5 5 5 5 	Dtvv   	Dtd###   	Dt (Y??$i0"
 
 

   	Dt59UG<<<   	Dt59%%%   	Dt59%%%   	Dt5>***   	Dt50111   	Dt50#>>>   	Dt5;'''	   	Dt5<(((   	Dt<.!(Y??+$ 
 
 
	  * 	Dt;.-,&	2!(Y??%!  &
 
 
  < 	Dt5;%2B:2NOOO  ( 	Dt5;;2EFFF
 
 
 	Dt:0U(V
 
 
6	; ; ;x 	Dt5:&&&'* * *i_	D	 	Dt5:&&&   $ *)) 	Dtvv   	Dt
+++   	Dt000   	Dt
uEEE   	Dt
uEEE   	Dt" #u #Sz
 
 

   	DtsGnEEE  k= @ 	Dtvv   	DtelC-@ ABBB   	Dt#elE%:;c7^
 
 
		 	 	 	Dt59%%%  7# L 
5 
5 
5   B% % % %P u66DDD O O  76O$ u667 7 767 u667 7 767 u66A A 76A    ) ) ) u663 3 763* u66 D D DEE3 3 FE 763 u665 5 765$7 $7 $7N u66X X 76X u66E E 76E B
sc3Z#d(>(>E
sc3Z#dU;
sc3Z4d%;%;TB
sc3Zc4[$7
sc3Zc4[%8
sc3Z4d%;%;TB
sc3ZR/   4 $		&$		&
td	U	   " u66G G 76G u663 3 763 LLL  u66(O(O(OPP, , QP 76 
,@ 4	E%*
!
'
'
)
)5:+D+J+J+L+LMM  
 )+;<<'# '# =<'#T u66K K 76K  u66J J 76J" u66H H 76H
, 
, 
, )+;<<? ? =<?0 u667 7 767 7 7r?   