
    HR-e                       d dl Z d dlZd dlZd dlZd dlmZ d dlmZ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mZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# ddl$m%Z% ddl$m&Z& ddl$m'Z'm(Z(m)Z) d Z*ej+        d             Z,ej-        .                    dddddiddidg          d             Z/d Z0d Z1d Z2d Z3d Z4d  Z5ej-        .                    dg d!          d"             Z6ej-        .                    dg d!          ej-        .                    d#g d$          d%                         Z7ej-        .                    dg d!          ej-        .                    d#g d$          d&                         Z8d' Z9d( Z:d) Z;d* Z<d+ Z=d, Z>d- Z?ej-        .                    dg d!          d.             Z@ej-        .                    dg d!          d/             ZAej-        .                    dg d!          d0             ZBej-        .                    dg d!          d1             ZCd2 ZDej-        .                    dg d!          d3             ZEej-        .                    dg d!          d4             ZFej-        .                    dg d!          d5             ZGd6 ZHd7 ZId8 ZJd9 ZKd: ZLd; ZMd< ZNej-        .                    dg d!          d=             ZOej-        .                    dg d!          d>             ZPej-        .                    dg d!          d?             ZQd@ ZRej-        .                    dg d!          dA             ZSej-        .                    dg d!          dB             ZTej-        .                    dg d!          dC             ZUej-        .                    dg d!          dD             ZVdE ZWej-        .                    dg d!          dF             ZXdG ZYdH ZZdI Z[dJ Z\ej-        .                    dg d!          dK             Z]ej-        .                    dg d!          dL             Z^d~dMZ_dN Z`dO Zaej-        .                    dg d!          dP             ZbdQ ZcdR ZddS ZedT ZfdU ZgdV Zhej-        i                    e dWX          dY             ZjdZ Zkd[ Zld\ Zmej-        .                    d]ddg          d^             Znd_ Zoej-        .                    dg d!          d`             Zpda Zqdb Zrdc Zsdd Ztde Zudf Zvdg Zwdh Zxej-        .                    dig dj          dk             Zydl Zzdm Z{ej-        .                    dnddg          do             Z|dp Z}dq Z~dr Zej-        .                    dsg d!          dt             Zdu Zej-        .                    dvddg          ej-        .                    dddg          dw                         Zdx Zej-        .                    dddg          dy             Zej-        .                    dvddg          ej-        .                    dddg          dz                         Zd{ Zd| Zd} ZdS )    N)OrderedDict)BytesIOStringIOtable)ascii)core)convert_numpy)_probably_htmlget_read_trace)MaskedColumnTable)simple_table)Unit)HAS_BZ2)get_pkg_data_path)AstropyWarning   )setup_function)teardown_function)assert_almost_equalassert_equalassert_truec                 F    t          |                     d                    S )Nr   )r   encode)xs    @lib/python3.11/site-packages/astropy/io/ascii/tests/test_read.pyasciiIOr   !   s    188G$$%%%    c                 |    t          d          }|                     d|           |                     d|           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 data directory.
    dataHOMEUSERPROFILEN)r   setenv)monkeypatchrequestpaths      r   home_is_datar(   %   sC     V$$Dvt$$$}d+++++r   fast_readerTFuse_fast_converterforcec                     d}t          j        t          d          5  t          j        dddz  gd| d	          }d
d
d
           n# 1 swxY w Y   |d         j        j        |k    sJ d
S )z
    Test reading an extremely large integer, which falls through to
    string due to an overflow error (#2234). The C parsers used to
    return inf (kind 'f') for this.
    Uz/OverflowError converting to IntType in column amatcha1i'  basicFformatr)   guessN)pytestwarnsr   r   readdtypekind)r)   expected_kinddats      r   test_convert_overflowr=   4   s     M	O
 
 
 
 
 j#+wKu
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 s8>-//////s   AAAc                  r   g d} g d}t          j        t                    gt          j        t                    gt          j        t                    gd}t          j        | d||          }|d         j        j        dk    sJ |d         j        j        dk    sJ |d	         j        j        d
k    sJ dS )z
    Exact example from #9701: When using ascii.read with both the names and
    converters arguments, the converters dictionary ignores the user-supplied
    names and requires that you know the guessed names.
    a,b,c1,2,3z4,5,6)ABCcsv)r4   names
convertersrB   frC   irD   r-   N)r   r
   floatintstrr8   r9   r:   )csv_textrF   rG   ts       r   'test_read_specify_converters_with_namesrO   H   s     +**HOOE !%(()!#&&'!#&&' J
 	
8E:NNNAS6<####S6<####S6<######r   c                  6   g d} t          j        t           j                  }|                    |            |j        }t          j        t          d          5  |                    dg           d d d            n# 1 swxY w Y   |                    dg           |j	        dk    sJ |
                    dd	           |j	        d
k    sJ t          j        t          d          5  |
                    dd	           d d d            d S # 1 swxY w Y   d S )Nr?   ReaderzColumn NOT-EXIST does not existr.   z	NOT-EXISTcr0   br0   aa)rV   rU   )r   
get_readerCsvr8   headerr6   raisesKeyErrorremove_columnscolnamesrename_column)rM   readerrY   s      r   #test_read_remove_and_rename_columnsr`   \   s   ***HUY///F
KK]F	x'H	I	I	I - -{m,,,- - - - - - - - - - - - - - - 3%   ?j((((
d###?k))))	x'H	I	I	I 0 0[$///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s$   A>>BB*DDDc                  n   t          j        ddgd          } t          |           dk    sJ | j        ddgk    sJ t          j        ddgd          } t          |           d	k    sJ | j        ddgk    sJ t          j        d
dgd          } t          |           d	k    sJ | j        ddgk    sJ dS )zr
    Make sure reading a table with guess=True gives the expected result when
    the names arg is specified.
    1,23,4rT   rF      r0   rU   zc,dr   c de fN)r   r8   lenr]   r<   s    r   test_guess_with_names_argrj   n   s     *eU^:
6
6
6Cs88q====<C:%%%% *eU^:
6
6
6Cs88q====<C:%%%% *eU^:
6
6
6Cs88q====<C:%%%%%%r   c                     t          j        ddgd          } t          |           dk    sJ | j        ddgk    sJ t          j        ddgdd	          } t          |           dk    sJ | j        d
dgk    sJ t          j        ddgt           j                  } t          |           dk    sJ | j        ddgk    sJ t          j        ddgdt           j                  } t          |           dk    sJ | j        d
dgk    sJ t          j        ddgd          } t          |           dk    sJ | j        ddgk    sJ t          j        ddgdd          } t          |           dk    sJ | j        d
dgk    sJ dS )zu
    When the format or Reader is explicitly given then disable the
    strict column name checking in guessing.
    rb   rc   r2   r4   r   r1   2rT   )rF   r4   r0   rU   rQ   )rF   rR   ascii.basicr4   rF   N)r   r8   rh   r]   Basicr   ri   s    r   test_guess_with_format_argrq      s   
 *eU^G
4
4
4Cs88q====<C:%%%%
*eU^:g
F
F
FCs88q====<C:%%%%
*eU^EK
8
8
8Cs88q====<C:%%%%
*eU^:ek
J
J
JCs88q====<C:%%%% *eU^M
:
:
:Cs88q====<C:%%%%
*eU^M
L
L
LCs88q====<C:%%%%%%r   c                     g d} g d}t          j        t          d                    |                     d          }t	          |j        |          D ]\  }}||         d         |k    sJ t          j        t          d                    |                     dd          }t	          |j        d	d
         | d	d
                   D ]\  }}||         d         |dz   k    sJ d	S )zT
    When the delimiter is explicitly given then do not try others in guessing.
    )z10.1E+19z3.142048z-23)g)SDgQ	@i   iz, Tr5   r    )r5   	delimiterN,)r   r8   r   joinzipr]   )fieldsvaluest0nvt1s         r   test_guess_with_delimiter_argr      s     100F'''F 
GDIIf--..d	;	;	;BBK((  1!uQx1}}}}} 
GDIIf--..dc	J	J	JBBK$fSbSk22 # #1!uQx1s7"""""# #r   c                      t          j        ddt          d                    } t          |           dk    sJ t	          j        ddgdg d           t          |           dk    sJ d S )	Nz1 2	3
1 2	3	no_headerabcro   re   z1 2	3zascii.no_headerr0   rU   rS   )r   r8   listrh   r   ri   s    r   (test_reading_mixed_delimiter_tabs_spacesr      sj    
*%ke
M
M
MCs88q====	J(#,=___UUUUs88q======r   )TFr+   c                     t          j        t          j                  5  t          j        ddgdd|            ddd           dS # 1 swxY w Y   dS )z?
    Test that a bad value of `names` raises an exception.
    rf   rg   )r0   F)rF   r5   r)   Nr6   rZ   r   InconsistentTableErrorr8   r)   s    r   test_read_with_names_argr      s     
u3	4	4 W W
E5>u+VVVVW W W W W W W W W W W W W W W W W Ws   AAApath_format)plainz	tilde-strztilde-pathlibc           	         t                      D ]O}|                    d          rt          d|d                     1d|v rAd|v rd|d         dd          z   |d<   n&t          j        d|d         dd                    |d<   t          d|d                     d	D ]}|d
                                         }d|vr||d<   d|v r%d|d         j         t          j        v r	d|vr| |d<   t          j
        |d         fi |}t          |j        j        |d                    |j        j        D ]+}t          t          ||                   |d                    ,Qd S )Nskip

******** SKIPPING nametilderL   ~/   

******** READING TFoptsr5   rR   fast_Inputterr)   colsnrows)get_testfilesgetprintpathlibPathcopy_format_namer	   FAST_CLASSESr   r8   r   r9   rF   rh   )r)   r   r(   testfiler5   	test_optsr   colnames           r   test_read_all_filesr      s    "OO E E<< 	=8F+;==>>>k!!###'(6*:122*>#>  #*<hv6Fqrr6J#K#K 8hv&688999" 	E 	EE (--//Ii''%*	'"I%%>Ih/<>>$BSSSY../:Im,Jx/==9==E*HV,<=== ;, E ESw00(72CDDDDE	EE Er   c           	         t                      D ]X}|                    d          rt          d|d                     1d|v rAd|v rd|d         dd          z   |d<   n&t          j        d|d         dd                    |d<   t          d|d                     d	D ]}|d
                                         }d|vr||d<   d|v rd|d         j         }|d= nd}d| t          j        v r| |d<   t          j
        |d         fd|i|}t          |j        j        |d                    |j        j        D ]+}t          t          ||                   |d                    ,ȐZd S )Nr   r   r   r   rL   r   r   r   r   r   r5   rR   zascii.r   r   r)   r4   r   r   )r   r   r   r   r   r   r   r	   r   r   r8   r   r9   rF   rh   )	r)   r   r(   r   r5   r   r4   r   r   s	            r   test_read_all_files_via_tabler      s    "OO E E<< 	=8F+;==>>>k!!###'(6*:122*>#>  #*<hv6Fqrr6J#K#K 8hv&688999" 	E 	EE (--//Ii''%*	'"9$$D)H"5"BDDh'' v4#444+6	-(Jx/LLL)LLE*HV,<=== ;, E ESw00(72CDDDDE	EE Er   c            	      6   t                      D ]} |                     d          rt          d| d                     1| d                             dd          sNt          d| d                     g dg fD ]fd	| d                                         D             }t	          j        | d         fddi|}t          |j        j        | d
                    |j        j        D ]+}t          t          ||                   | d                    ,	d S )Nr   r   r   r   r5   Tr   )rR   rv   	quotecharc                 $    i | ]\  }}|v	||S  r   ).0kr   filter_read_optss      r   
<dictcomp>z(test_guess_all_files.<locals>.<dictcomp>  s1       AQFV=V=V1=V=V=Vr   r   r   )
r   r   r   itemsr   r8   r   r9   rF   rh   )r   
guess_optsr   r   r   s       @r   test_guess_all_filesr     sl   !OO E E<< 	=8F+;==>>>##GT22 	8hv&688999!E!E!Er J 	E 	E   !)&!1!7!7!9!9  J Jx/JJtJzJJE*HV,<=== ;, E ESw00(72CDDDDE	EE Er   c                     g d} t          j        | t          j        d                    }t          j        |d         dgk              sJ t          j        t          d          5  t          j        | d	           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          j        | d           d d d            d S # 1 swxY w Y   d S )N)a b1 23 4re   )
data_startr0      zVread\(\) argument 'data_end' must be a <class 'int'> object, got <class 'str'> insteadr.   zneeds integer)data_endz\read\(\) argument 'fill_include_names' must be a list-like object, got <class 'str'> insteadID)fill_include_names)r   r8   npint16allr6   rZ   	TypeError)linesouts     r   test_validate_read_kwargsr     sp   !!!E
*Urx{{
3
3
3C6#c(qc/"""""	%
 
 
 4 4 	
5?33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
<
 
 
 3 3
 	
5T22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s$   )BBB2CCCc                      t          j        dt           j                  }  | j                    D ]9}|j        dv rt          j        |j                  sJ 't          |d          rJ :dS )z;Test that INDEF is correctly interpreted as a missing valuedata/daophot2.datrQ   )OTIMEMAGMERRXAIRMASSmaskN)	r   r8   Daophotitercolsr   r   r   r   hasattr)r   cols     r   test_daophot_indefr   /  s~    J*5=AAAEu~ , ,8;;;6#(######sF++++++, ,r   c                      t          j        dt           j                  } | d         j        j        dv sJ | d         j        j        dv sJ | d         j        j        dv sJ | d         j        j        d	v sJ d
S )z
    Test specific data types which are different from what would be
    inferred automatically based only data values.  DAOphot reader uses
    the header information to assign types.
    r   rQ   LIDfdr   PIERUSr   ilN)r   r8   r   r9   charr   s    r   test_daophot_typesr   :  s     J*5=AAAE<"d****<"d****f D((((;!T))))))r   c                     t          j        dt           j                  } d}| j        d         }|D ]Q\  }}}}||         }t	          |d         |           t	          |d         |           t	          |d         |           Rd S )Ndata/daophot.datrQ   ))	NSTARFILEz
test.nst.1filename%-23s)REJFILEz"hello world"r   r   )SCALEz1.z	units/pixz%-23.7gkeywordsvalueunitsr4   )r   r8   r   metar   )r   expected_keywordsr   r   r   r   format_keywords           r   test_daophot_header_keywordsr   I  s    J)%-@@@E z*%H'8 1 1#eUG4.WW%u---WW%u---WX&0000	1 1r   c                      t          j        dt           j                  } d| j        v sJ | d         d         dk    sJ | d         d         dk    sJ t	          j        | d	         d
k              sJ d S )Nzdata/daophot3.datrQ   MAG5   gzG!6@MERR2r   g#~j?RAPERT5gL7@r   r8   r   r]   r   r   r   s    r   test_daophot_multiple_aperturer   Y  s    J*5=AAAEU^####=u$$$$>!%%%%6iD       r   c                      t          j        dt           j                  } d| j        v sJ | d         d         dk    sJ | d         d         dk    sJ t	          j        | d	         d
k              sJ d S )Nzdata/daophot4.datrQ   MAG15r   gnJr   r   gJ+?r   g      @r   r   s    r   test_daophot_multiple_aperture2r   c  s    J*5=AAAEen$$$$>!&&&&>!%%%%6%	"c)*******r   c                     t          j        t          j                  5  t          j        dt          j        d|            d d d            d S # 1 swxY w Y   d S )Nzdata/no_data_without_header.datF)rR   r5   r)   )r6   rZ   r   r   r8   NoHeaderr   s    r   test_empty_table_no_headerr   k  s    	u3	4	4 
 

->#		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   #AAAc                     t          j        t          j                  5  t          j        dd|            d d d            d S # 1 swxY w Y   d S )Ndata/simple.txtF)r5   r)   r   r   s    r   test_wrong_quoter   v  s    	u3	4	4 L L
$E{KKKKL L L L L L L L L L L L L L L L L L   AAAc                     t          j        t          j                  5  t          j        d|            d d d            d S # 1 swxY w Y   d S )Nzdata/bad.txtr   r   r   s    r   test_extra_data_colr   |  s    	u3	4	4 < <
>{;;;;< < < < < < < < < < < < < < < < < <s   AA
Ac                     t          j        t          j                  5  t          j        dd|            d d d            d S # 1 swxY w Y   d S )Nzdata/simple5.txt|)rv   r)   r   r   s    r   test_extra_data_col2r     s    	u3	4	4 O O
%+NNNNO O O O O O O O O O O O O O O O O Or   c                      t          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Ndoes_not_exist)r6   rZ   OSErrorr   r8   r   r   r   test_missing_filer    s    	w		 % %
#$$$% % % % % % % % % % % % % % % % % %s   <A A c                 n    d}t          j        d|d|           }t          |j        j        |           d S )Nc1c2c3c4c5c6data/simple3.txtr   )rF   rv   r)   r   r8   r   r9   rF   )r)   rF   r!   s      r   test_set_namesr    sC    0E:%3K  D !5)))))r   c                 t    d}d}t          j        d||d|           }t          |j        j        |           d S )Nr  )r  r  r  r   )rF   include_namesrv   r)   r  )r)   rF   r  r!   s       r   test_set_include_namesr    sN    0E M:#  D !=11111r   c                 n    d}t          j        d|d|           }t          |j        j        d           d S )N)Yobjectr  r   )exclude_namesrv   r)   )obsidredshiftXradr  )r)   r  r!   s      r   test_set_exclude_namesr    sG    #M:#	  D !#DEEEEEr   c                  j    d} t          j        d|           }t          |j        j        |            d S )N)r   r   r   r   )r  r  )r  r!   s     r   test_include_names_daophotr    s7    )M:(FFFD!=11111r   c                  j    d} t          j        d|           }t          |j        j        d           d S )N)r   YCENTERr   NITERCHIPERRORr   )r  )XCENTERr   MSKY	SHARPNESSr   r  )r  r!   s     r   test_exclude_names_daophotr$    s8    GM:(FFFD!#RSSSSSr   c                      d } t          j        d          }| |j        _        |                    d          }t          |j        j        d           t          t          |          d           d S )Nc                 v    t          j        dt           j                  d | D             }fd|D             S )Nz	^\| | \|$c              3   >   K   | ]}|                                 V  d S N)stripr   r   s     r   	<genexpr>zCtest_custom_process_lines.<locals>.process_lines.<locals>.<genexpr>  s*      //Aaggii//////r   c                 b    g | ]+}t          |          d k                        d|          ,S )r    )rh   sub)r   r   bars_at_endss     r   
<listcomp>zDtest_custom_process_lines.<locals>.process_lines.<locals>.<listcomp>  s4    JJJAs1vvzz  Q''zzzr   )recompileVERBOSE)r   
striplinesr/  s     @r   process_linesz0test_custom_process_lines.<locals>.process_lines  sC    z,
;;/////
JJJJJJJJr   r   )rv   zdata/bars_at_ends.txtr  r  r  r  r  r  r   )	r   rW   inputterr5  r8   r   r9   rF   rh   )r5  r_   r!   s      r   test_custom_process_linesr8    sw    K K K
 ,,,F$1FO!;;.//D!#STTTTAr   c                     d } t          j        dd          }| |j        j        _        | |j        j        _        |                    d          }t          d          d         }t          |j	        j
        |dd                     d S )Nc                 V    t          j        dd|                                           }|S )Nz^\|\s*r-  )r1  r.  r)  )lineline_outs     r   process_linez.test_custom_process_line.<locals>.process_line  s"    6)R66r   re   r   )r   rv   data/nls1_stackinfo.dboutr   r   )r   rW   rY   splitterr=  r!   r8   r   r   r9   rF   )r=  r_   r!   r   s       r   test_custom_process_liner@    s       c:::F*6FM'(4FK%;;233D455f=D!48,,,,,r   c                     t          j                    } t          j                    | j        _        t          j                    | j        _        d}|                     |          }t          |          }t          |j	        j
        |d                    t          t          |          |d                    t          |                    d          d         d           t          |                    d          d         d           t          |                    d	          d         d
           t          |                    d          d         d           t          |                    d          d         d           d S )Ndata/test4.datr   r   zabs1.nhre   giT ?p1.gammagÝ(?p1.amplgZ*2F?statname
chi2modvarstatvalg-@)r   rW   BaseSplitterrY   r?  r!   r8   r   r   r9   rF   rh   r   field)r_   rH   r!   r   s       r   test_custom_splittersrK    s8   F"/11FM -//FKA;;q>>DQH!8F#3444THW-...

:..q1?CCC

:..q1=AAA

9--a02CDDDJ''*L999

9--a0,?????r   c                     t          j        dddd          } t          t          |           d           t          |                     d          d         d	           t          |                     d          d
         d           d S )Ndata/test5.datr   r   )header_startr   r      rF  r   chi2xspecvarrw   chi2gehrels)r   r8   r   rh   rJ  r!   s    r   test_start_endrT    sy    :&Q1rRRRDTBJ''*N;;;J''+];;;;;r   c                  6   t          j        d          t          j        d          gt          j        d          gd} t          j        d|           }t          t	          |d         j                  d           t          |d         d	         d
           d S )Nint32float32rL   )rC  rD  rB  rG   rC  rD  r   z1.26764500000)r   r
   r8   r   rL   r9   )rG   r!   s     r   test_set_convertersrY    s    (1153Fy3Q3QR(//0 J :&:>>>DT*%+,,i888j!!$o66666r   c                 d   d}t          |          5 }|                                }d d d            n# 1 swxY w Y   t          |          d         }t          j        |fd| i|d         }t	          |j        j        |d                    t	          t          |          |d                    d S Nr   r   r)   r   r   r   )openr8   r   r   r   r9   rF   rh   r)   rH   r   r   r   r!   s         r   test_from_stringr^    s    A	a B		              Q"H:eIII8HIID!8F#3444THW-.....   377c                 >   d}t          |          d         }t          |d          5 }t          j        |fd| i|d         }d d d            n# 1 swxY w Y   t	          |j        j        |d                    t	          t          |          |d                    d S )Nr   r   rbr)   r   r   r   )r   r\  r   r8   r   r9   rF   rh   )r)   rH   r   r   r!   s        r   test_from_filelikerb    s    AQ"H	a K"z"JJ+J&9IJJK K K K K K K K K K K K K K K!8F#3444THW-.....s   AAAc                 d   d}t          |          5 }|                                }d d d            n# 1 swxY w Y   t          |          d         }t          j        |fd| i|d         }t          |j        j        |d                    t          t          |          |d                    d S r[  )	r\  	readlinesr   r   r8   r   r9   rF   rh   r]  s         r   test_from_linesre    s    A	a B              Q"H:eIII8HIID!8F#3444THW-.....r_  c                      t          j        t           j                  }  | j        d          }t	          | j        ddg           t	          |j        d         ddg           d S )NrQ   data/apostrophe.rdbz# first commentz  # second commentcommentszfirst commentzsecond comment)r   rW   Rdbr8   r   comment_linesr   )r   r!   s     r   test_comment_linesrk    sf    EI...E5:+,,D$'8:N&OPPP:&:J(KLLLLLr   c                    d}t          |          }t          j        |fd| d|d         }t          |d         j        ddgk                                               t          |d         ddgk                                               t          |d	         j        ddgk                                               t          |d	         d
dgk                                               d S )Ndata/fill_values.txtr0   r1   fill_valuesr)   r   r0   FTr   rU   re   )r   r   r8   r   r   r   r)   rH   r   r!   s       r   test_fill_valuesrr    s    AQH:	!{ >Fv>N D cE4=05577888cq!f$))++,,,cE4=05577888cq!f$))++,,,,,r   c                 |    d}t          |          }t          j        |fd| d|d         }t          |           d S )Nrm  )r0   r1   rU   ro  r   r   r   r8   check_fill_valuesrq  s       r   test_fill_values_colrv  +  sZ    AQH:	&K CKFCS D dr   c                     d}t          |          }t          j        |fd| dgd|d         }t          |           d S )Nrm  rn  rU   )rp  r)   r   r   rt  rq  s       r   test_fill_values_include_namesrx  5  b    AQH:	5	 
 6
 D dr   c                     d}t          |          }t          j        |fd| dgd|d         }t          |           d S )Nrm  rn  r0   )rp  r)   fill_exclude_namesr   rt  rq  s       r   test_fill_values_exclude_namesr|  C  ry  r   c                    t          | d         d          rJ t          | d         ddgk                                               t          | d         j        ddgk                                               t          | d         ddgk                                               d| d         _        t          | d         dd	gk                                               d
S )z/compare array column by column with expectationr0   r   r1   rU   FTre   ir   N)r   r   r   r   rS  s    r   ru  ru  Q  s    tCy&)))))csCj(--//000cE4=05577888cq$i',,..///DINcq!f$))++,,,,,r   c                     d}t          |          }t          j        |fddg| d|d         }d|d         _        t	          |d         ddgk                                               d S )	Nrm  )r0   42)r1   r  r0   ro  r   Fr0   *   )r   r   r8   r   r   r   rq  s       r   test_fill_values_listr  \  s    AQH:	 "23  6
	 D DINcr2h&++--.....r   c                      d} t          |           D ]R}t          j        | fi |d         }t          |d         j        d                    t          |d         d          rJ Sd S )Ndata/cds.datr   AKr   Fitr   )r   r   r8   r   r   r   )rH   r   r!   s      r   test_masking_Cds_Mrtr  j  sz    A!!$$ 0 0z!00x/00DJOA&'''4;//////0 0r   c                      d} t          |           d         }t          j        | fi |d         }t          j        ddgg d          }t          j        |j        |k              sJ d S )Ndata/ipac.datr   r   )TFTFT)FFFFF))ra|b1)decr  )sair  )v2r  )sptyper  )r9   )r   r   r8   r   arrayr   r   )rH   r   r!   r   s       r   test_null_Ipacr  r  s    AQ"H:a,,8F+,,D8	)+NO
 
 
	 	 	D 6$)t#$$$$$$$r   c                     t          d          } dg}d}t          |          d         }t          j        |fi |d         }|j        d                                         |                                 k    sJ t          |j        d                                         |                                           D ]\  }}|d         |k    sJ |j        d         |k    sJ d S )	N))intvalr   )floatvalg     @)datezWed Sp 20 09:48:36 1995)key_continuez'IPAC keywords can continue across linesz%This is an example of a valid commentr  r   r   r   r   rh  )r   r   r   r8   r   keysrz   r|   )r   rh  rH   r   r!   data_kvkvs          r   test_Ipac_metar    s    	
 H 88HAQ"H:a,,8F+,,D9Z %%''8==??::::49Z077998??;L;LMM & &w2%%%%%9Z H,,,,,,r   c                      t          j        ddd          } | j        j        dk    sJ t	          |           dk    sJ dS )zLRead a file using guess with one of the typical guess_kwargs explicitly set.data/space_delim_no_header.datrx   T)rv   r5   )z1 3.4 hellor   N)r   r8   r9   rF   rh   rS  s    r   test_set_guess_kwargr    sG    :6#TRRRD://///t99>>>>>>r   c                     d}t          j        t                    5  t          j        |t          j        |            ddd           dS # 1 swxY w Y   dS )z:Read RDB data with inconsistent data type (except failure)zcol1	col2
N	N
1	Hello)rR   r)   N)r6   rZ   
ValueErrorr   r8   ri  )r)   r   s     r   test_read_rdb_wrong_typer    s    E 
z	"	" E E
5DDDDE E E E E E E E E E E E E E E E E Es   "AAAc                 "   d                     g d          }t          j        ||           }|j        du sJ |                                g dk    sJ d}t          j        ||           }|                                g dk    sJ |d         j        j        d	k    sJ d                     g d
          }t          j        |t          j                  }|j        du sJ |                                g dk    sJ t          j        |t          j        d          }|j        du sJ |                                g d
k    sJ t          j        |t          j        g           }|j        du sJ |                                g d
k    sJ dS )zY
    Read a table with empty values and ensure that corresponding entries are masked
    
)a,b,c,dz1,3,,z2, , 4.0 , ss r   F) a   b   c   d --- --- --- ---z  1   3  --  --z  2  -- 4.0  ssz a 
 "" )z a z---z --r0   rI   )r  r  z  1   3        z  2     4.0  ssrQ   N)rR   rp  )ry   r   r8   maskedpformatr9   r:   FixedWidthTwoLine)r)   r   r<   s      r   test_default_missingr    s   
 II	
 	
 	
 E *U
4
4
4C:;;==        E
*U
4
4
4C;;==1111111s8>#%%%% II	
 	
 	
 E *U5#:
;
;
;C:;;==        *U5#:
M
M
MC:;;==        *U5#:
K
K
KC:;;==         r   c                     g ddddt           j        idddddt           j        idddd	dt           j        idddd	dt           j        iddd
d	t           j        dddddddt           j        iddddt           j        ddddddt           j        t           j        ddddddt           j        idddddt           j	        idddddt           j
        iddddddd d!ddd"d#dt           j        iddd"d#dt           j        iddd$d#dt           j        idd%d&d#dt           j	        iddd'd#dt           j
        idd(ddt           j
        d)d*gd+ddd,d#i ddd-d.dt           j        iddd/d.dt           j        idd0d1dd2d3idd4d1d	d3d	dd5dd4d1d	d3d	d6dd4d1dd3d	d	d5dd7d8dd9didd7d:dd9didd;d<dt           j        dd=dd>d?ddt           j        idd>d?dt           j        d@dddAdBdi ddCdDdEi dddFdd9dGiddHdIdd9dJidKdLdddt           j        idKdMdddNdt           j        idOdPdQddt           j        iddRdSddt           j        iddPdTddt           j        iddUdVddt           j        id}	 d#d@l}|                    dWdXddt           j        id           n# t$          $ r Y nw xY w * fdY|D             }t'          |          d	k    r|d#         }n|}|S )ZzSet up information about the columns, number of rows, and reader params to
    read a bunch of test files and verify columns and number of rows.)agasc_idn_noidsn_obsrg  re   rR   )r   r   r   r   zdata/apostrophe.tab)IndexRAhRAmRAszDE-DEdDEmDEsMatchClassr  r  r  r   zdata/cds_malformed.datr5   )rR   r   r   zdata/commented_header.datzdata/commented_header2.datrw   )rR   rO  )col1col2col3col4col5zdata/continuation.dat)r   rR   )r   r!  r  r   r   r"  r  r#  r  r   r   r   )NUMBERFLUX_ISOFLUXERR_ISOzVALU-ESz	VALU-ES_1FLAGzdata/sextractor.datr   r  r  r  r  r  r  )col0objIDosrcidxsrcid	SpecObjIDr  r  r  ccdidz
modelMag_imodelMagErr_i
modelMag_rmodelMagErr_rexpotheta
rad_ecf_39detlim90fBlim90r>  :   r   F)r   rv   r5   zdata/no_data_cds.datr   zdata/no_data_daophot.dat)r  r  r  VALUESVALUES_1r  zdata/no_data_sextractor.datzdata/no_data_ipac.dat)r  r  r  r  )rR   r  zdata/no_data_with_header.datzdata/short.rdb   zdata/short.tabztest 1atest2test3test4r   r   ')top1top2top3top4)r   rO  r   )r   rO  r6  zdata/simple2.txtrv   r  )r  r  r  r  r  col6zdata/simple4.txt)rR   rv   )r  r  r  r  N)r  offsetr   yr   oaaz data/space_delim_blank_lines.txt)rC  rD  rE  rF  rH  rB  	   rm  rx   zdata/whitespace.dat)zquoted colname with tab	insider  r  z\s)r   r   r   r   zdata/simple_csv.csvzdata/simple_csv_missing.csvT)r   r   r   r   r   )colacolbcolczdata/latex1.tex)FacilityIdexposurer  zdata/latex2.texzdata/latex3.tex)Col1Col2Col3Col4zdata/fixed_width_2_line.txt)zColumn 1zColumn 2zColumn 3data/html.htmlc                 ,    g | ]}|d          k    |S r   r   )r   r   r   s     r   r0  z!get_testfiles.<locals>.<listcomp>h  s'    999QqyD'8'8q'8'8'8r   )r   ri  TabCdsMrtCommentedHeaderContinuationLinesInputterr   r   
SExtractorIpacrX   LatexAASTexr  bs4appendHTMLImportErrorrh   )r   	testfilesr  r   s   `   r   r   r     s   j4)uy)		
 	
j 5)uy)		
 	
j #uy)#	
 	
jB #uy)#	
 	
Ajj -$y@@#	
 	
ijP $/u45		
 	
Oj\ $0$4bII		
 	
[jh =+!;. 		
 	
gjz 'u}-!	
 	
yj^ *u/0	
 	
]jx 9#uz*		
 	
wjD* 0#$3GG1	
 	
Cjx +uy)#	
 	
wj^ +uy)#	
 	
]jD /u}-!	
 	
Cjh X1u/0		
 	
gjt 9+uz*		
 	
sj@ !#$zT4LII		
 	
jL $2		
 	
KjX 5$uy)		
 	
Wjd 5$uy)		
 	
cjp ;% #&		
 	
oj| 5%"%qJJ		
 	
{jH 5%"%q99		
 	
GjT 5%"%qJJ		
 	
Sj` E& #&		
 	
_jl E& #&		
 	
kjx E&$~C@@		
 	
wjD	 -4u~.		
 	
C	jP	 -4$~tDD		
 	
O	j\	 A6		
 	
[	jh	 O$		
 	
g	jt	 $* #&		
 	
s	j@
 *G %(		
 	
	jL
 *#uy)		
 	
K
jX
 2#uy)	
 	
W
jf
 -%u{+		
 	
e
jr
 ;%u|,		
 	
q
j~
 -%u{+		
 	
}
jJ 51u67		
 	
IjIX


<(!5:.	 	
 	
 	
 	
      :999)999s88q==a&CJs   *K 
KKc                  d   t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        fD ]T} t          j
        t                    5  t           j                            | d           ddd           n# 1 swxY w Y   UdS )zCheck certain Readers throw an exception if ``header_start`` is set

    For certain Readers it does not make sense to set the ``header_start``, they
    throw an exception if you try.
    This was implemented in response to issue #885.
    r   )rO  N)r   r   r  r  
BaseReaderFixedWidthNoHeaderr  r  r   r6   rZ   r  r	   _get_reader)readerclasss    r   test_header_start_exceptionr  q  s     	
 			 @ @ ]:&& 	@ 	@J"";Q"???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@@ @s   6"B$$B(	+B(	c                  T    g d} t          j        |           }|j        ddgk    sJ dS )zf
    Check for a regression introduced by #1935.  Pseudo-CSV file with
    commented header line.
    )z# a, b1, 2z3, 4r0   rU   Nr   r8   r]   )r   rN   s     r   test_csv_table_readr    s;    
 '&&E
5A:#s######r   c                 Z    t          j        ddgddg|           }|j        ddgk    sJ dS )z{
    Check that the names argument list can overlap with the existing column names.
    This tests the issue in #1991.
    r   r   rU   r0   )rF   r)   Nr  )r)   rN   s     r   test_overlapping_namesr    s?     	
E5>#sMMMA:#s######r   c                     t          j        dt           j        d          } dt          d          t          d          t          d          t          d          dt          d          t          d          t          d	          g	}g d
}t	          | j                  D ]7\  }}| |         j        ||         k    sJ | |         j        ||         k    sJ 8dS )zW
    Make sure that the SExtractor reader correctly inputs descriptions and units.
    zdata/sextractor2.datFrR   r5   Npixmagzpix**2zm**(-6)zmag * arcsec**(-2))	zRunning object numberz"Windowed position estimate along xz"Windowed position estimate along y'Kron-like elliptical aperture magnitudeRMS error for AUTO magnitudezExtraction flagsNz%Barycenter position along MAMA x axisz(Peak surface brightness above background)r   r8   r  r   	enumerater]   unitdescription)r   expected_unitsexpected_descrsrI   r   s        r   test_sextractor_unitsr    s     J-e6FeTTTEUUUUXY!""
N
 
 
O  // @ @
7W~"nQ&77777W~)_Q-??????@ @r   c                  r   t          j        dt           j        d          } g d}t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          g}g dd	gd
z  z   dgd
z  z   }t	          | j                  D ]P\  }}| |         j        ||         k    sJ | |         j        ||         k    sJ | |         j        ||         k    sJ QdS )zg
    Make sure that the SExtractor reader handles the last column correctly when it is array-like.
    zdata/sextractor3.datFr
  )X_IMAGEY_IMAGEALPHA_J2000DELTA_J2000MAG_AUTOMAGERR_AUTOMAG_APER
MAG_APER_1
MAG_APER_2
MAG_APER_3
MAG_APER_4
MAG_APER_5
MAG_APER_6MAGERR_APERMAGERR_APER_1MAGERR_APER_2MAGERR_APER_3MAGERR_APER_4MAGERR_APER_5MAGERR_APER_6r  degr  )zObject position along xNz%Right ascension of barycenter (J2000)z!Declination of barycenter (J2000)r  r  zFixed aperture magnitude vectorr  z(RMS error vector for fixed aperture mag.N)	r   r8   r  r   r  r]   r   r  r  )r   expected_columnsr  r  rI   r   s         r   !test_sextractor_last_column_arrayr,    s    J-e6FeTTTE  . 	UUUUUUUUUUUUUUUUUUUU)N.	
 	
 	
 -
-
1	2 6
6
:		;   // @ @
7W~"&6q&99999W~"nQ&77777W~)_Q-??????@ @r   c                      t          j        g d          } | j        dgk    sJ t          |           dk    sJ | d         d         dk    sJ | d         d         dk    sJ dS )	zr
    Check that lists of strings where some strings consist of just a newline
    ("
") are parsed correctly.
    )r   z123
z456
r  r  r   re   r   {   r   i  Nr   r8   r]   rh   rN   s    r   test_list_with_newlinesr1    sp    
 	
88899A:%    q66Q;;;;Q47c>>>>Q47c>>>>>>r   c                      t          j        g dd          } | j        ddgk    sJ t          |           dk    sJ | d         d         dk    sJ d	S )
z
    Check that Csv reader does not have ignore lines with the # comment
    character which is defined for most Basic readers.
    )z#a,brb   z#3,4rE   rl   z#arU   re   r   z#3Nr/  r0  s    r   test_commented_csvr3  	  sh    
 	
***5999A:$$$$$q66Q;;;;T71:r   c                  z    t          j        g d          } | j        g dk    sJ | j        d         ddgk    sJ dS )zf
    Make sure that line comments are included in the ``meta`` attribute
    of the output Table.
    )z	#comment1z#   comment2 	r@   rA   r   rh  comment1comment2N)r   r8   r]   r   r0  s    r   test_meta_commentsr7    sT    
 	
EEEFFA:((((6**j!9999999r   c                  P   t          j        t          j                  5 } t          j        dd           ddd           n# 1 swxY w Y   dt          | j                  v sJ t          j        t                    5 } t          j        dd           ddd           n# 1 swxY w Y   dt          | j                  v sJ t          j        t                    5 } t          j        dddd	d
           ddd           n# 1 swxY w Y   dt          | j                  v sJ dS )z2
    Check the error message when guess fails
    zasfdasdf
1 2 3r2   rl   Nz@** To figure out why the table did not read, use guess=False andipaczEAt least one header line beginning and ending with delimiter required"ru   F)r4   r   rv   r)   z?Number of header columns (1) inconsistent with data columns (3))r6   rZ   r   r   r8   rL   r   r  )errs    r   test_guess_failr<    s    
u3	4	4 6
$W55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6MQT	R R    
 
z	"	" 5c
$V44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 	Psy>>	 	 	 	
 
z	"	" 
c
	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 MPS	Q Q      s5   AA	A>B!!B%(B%DD
Dzrequires bz2)reasonc                      t          dd          5 } t          j        |           }ddd           n# 1 swxY w Y   |j        g dk    sJ dS )zU
    Test guessing a file object.  Fixes #3013 and similar issue noted in #3019.
    zdata/ipac.dat.bz2ra  Nr  )r\  r   r8   r]   )r   rN   s     r   test_guessing_file_objectr?  >  s    
 
!4	(	( BJrNN              :=========s   266c                  r   	 d                     g d          } t          j        |           }t          j        |                                          }t	          |          t	          |          k    sJ |j        |j        k    sJ |j        D ](}t          j        ||         ||         k              sJ )dS )zECheck that the screen output of ``print tab`` can be read. See #3025.r  )r  z
1,3,1.11,1z2, 2, 4.0 , ss N)ry   r   r8   r  rh   r]   r   r   )r   r<   r   rS   s       r   test_pformat_roundtriprA  H  s    YIIBBBCCE
*U

C
*S[[]]
#
#Cs88s3xx<3<''''\ ( (vc!fA&''''''( (r   c                  2   g d} t          j        | d          }|j        dd         D ]}||         j        j        dk    sJ |j        dd         D ]}||         j        j        dk    sJ |j        dd	         D ]}||         j        j        d
v sJ d S )N)z=| c1 | c2 | c3   |   c4 | c5| c6 | c7  | c8 | c9|c10|c11|c12|z=| r  | rE | rea  | real | D | do | dou | f  | i | l | da| c |z=  1    2    3       4     5   6    7     8    9   10  11  12 r9  rl   r      rH   
   rI      )r-   S)r   r8   columnsr9   r:   )r   r<   r   s      r   test_ipac_abbrevrH  T  s      E
 *U6
*
*
*CAaC  + +4y#s*****AbD! + +4y#s*****BrE" 2 24y#z111112 2r   c                  `    g d} t          j        |           }t          |          dk    sJ dS )a   Regression test for #3319.
    This tables looks so close to a daophot table, that the daophot reader gets
    quite far before it fails with an AttributeError.

    Note that this table will actually be read as Commented Header table with
    the columns ['some', 'header', 'info'].
    )z# some header infoz!#F header info beginning with 'F'z1 2 3z4 5 6z7 8 9r   N)r   r8   rh   r   r<   s     r   !test_almost_but_not_quite_daophotrK  c  s;      E *U

Cs88q======r   fastc                 \   g d}g d}t          j        |d|           }|j        d         |k    sJ |j        ddgk    sJ t	                      }t          j        ||d|            |                                                                |k    sJ |                    d	|	                    d
                     t          j        |dd	|           }|j        d         |k    sJ |j        ddgk    sJ |                    d|	                    d	                     t          j        |dd|           }|j        d         |k    sJ |j        ddgk    sJ t          j        |dd|           }|j        d         |k    sJ |j        ddgk    sJ |                    d|	                    d                     t          j        |dd|           }|j        d         |k    sJ |j        ddgk    sJ g d}t          j        |d|           }d|j        vsJ |j        ddgk    sJ dS )z
    Test that comments in commented_header are as expected with header_start
    at different positions, and that the table round-trips.
    )z	comment 1z	comment 2z	comment 3)# a bz# comment 1z# comment 2z# comment 3r   r   commented_headerr4   r)   rh  r0   rU   )r4   fast_writerr   r   )r4   rO  r)   re   r   rw   )rN  r   r   N)
r   r8   r   r]   r   writegetvalue
splitlinesinsertpop)rL  rh  r   r<   r   s        r   test_commented_header_commentsrX  v  s    766HPPPE
*U#54
H
H
HC8J8++++<C:%%%%
**C	KS!3FFFF<<>>$$&&%////	LLEIIaLL!!!
*U#5ASW
X
X
XC8J8++++<C:%%%%	LLEIIaLL!!!
*U#5ASW
X
X
XC8J8++++<C:%%%%
*(rt  C 8J8++++<C:%%%%	LLEIIaLL!!!
*(rt  C 8J8++++<C:%%%%###E
*U#54
H
H
HCSX%%%%<C:%%%%%%r   c                     ddddddddd	g d
dfD ]}t          |          du sJ ddddddg ddg dgf	D ]}t          |          du sJ dS )zW
    Test the routine for guessing if a table input to ascii.read is probably HTML
    r  z~/html.htmlzhttp://blah.com/table.htmlzhttps://blah.com/table.htmlzfile://blah/table.htmzftp://blah.com/table.htmlzfile://blah.com/table.htmz <! doctype html > hello worldz>junk < table baz> <tr foo > <td bar> </td> </tr> </table> junk)junk < table baz>z
 <tr foo >
 <td bar> </td> </tr></table> junk)z <! doctype html >  hello worldTzdata/html.htmszXhttp://blah.com/table.htmlz https://blah.com/table.htmzfole://blah/table.htmz < doctype html > hello worldz=junk < tble baz> <tr foo > <td bar> </td> </tr> </table> junk)rZ  z	 <t foo >r[  r\  r]  )z <! doctype htm > r^  )r   re   r   FN)r   )r(   tabl0s     r   test_probably_htmlr`    s    
 	$%##(H	
 	
 	
 	0# - -& e$$,,,,, 	%%'G	
 	
 	
 	/	 . ." e$$-----#. .r   c           	         g dddidddgfg ddddgfg dd	ddd
digfg}|D ]\  }}|D ]}t          j        |fd| dd|}|j        ddgk    sJ t          |          dk    sJ t	          j        |d         dgk              sJ t                      d         d         d         | du rt           j        nt           j        u sJ d S )N)	# commentr-  ru   skip this liner   r   rO  r   re   rO  r   )	rb  r-   	rc  r   r-  re  rc  r   r   )rb  r-  ru   r   r-  ru   rc  r   r   r   r2   Tr3   r0   rU   rw   kwargsrR   F)	r   r8   r]   rh   r   r   r   rp   	FastBasic)r)   testsr   kwargs_listrf  rN   s         r   test_data_header_startrj    sw      a 1A"F"FG
	

 
 
  q112	
	 	 	  q11L!3DE	
5'ER $  {! 
	 
	F
%;d NT A :#s++++q66Q;;;;6!C&QC-(((((!##B'1(; +u 4 45?    
	 r   c                  2   t                      } t          j        t          j                  5  t          j        |            ddd           n# 1 swxY w Y   t                      } t          j        t                    5 }t          j        | ddd           ddd           n# 1 swxY w Y   dt          |j                  v sJ t                      } t          j        | ddd          }|s|	                                j
        dk    sJ t                      t          ddd          t          ddd          fD ]V}t                      }  | j        d	           t          j        | fi |}|j        d
dgk    sJ t          |          dk    sJ WdS )z
    Test that an input file which is completely empty fails in the expected way.
    Test that an input file with one line but no newline succeeds.
    NFr2   )r5   r)   r4   zNo header line foundT
fast_basicr   s   a br0   rU   )r   r6   rZ   r   r   r8   r  rL   r   as_arraysizedictrS  r]   rh   )r   r;  rN   rf  s       r   test_table_with_no_newlinerp    s    IIE	u3	4	4  
5               IIE	z	"	" Jc
55IIIIJ J J J J J J J J J J J J J J!S^^3333IIE
54MMMA+QZZ\\&!++++ 	5eG<<<5d<@@@ 	 	
 		FJu''''zc3Z''''1vv{{{{{	 	s#   AAA B%%B),B)c                      t          j        d          } t          j        |           }t	          |          dk    sJ t          t          |j                            g dk    sJ |d         d         dk    sJ d S )Nr   re   r  r  r   hat2)r   r   r   r8   rh   sortedr   rG  )fpathr!   s     r   test_path_objectru  )  s~    L*++E:eDt99>>>>$t|$$%%)O)O)OOOOO=v%%%%%%r   c                     d} t          j        t                    5 }t          j        | dd           ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }t          j        ddgdd	d
g i           ddd           n# 1 swxY w Y   dt          |j                  v sJ dS )zr
    Test that context information (upstream exception message) from column
    conversion error is provided.
    z| col0   |
| double |
 1  2
Fr9  )r5   r4   NzColumn col0 failed to convert:r   r   r2   r0   )r5   r4   rG   zno convertersr6   rZ   r  r   r8   rL   r   )r9  r;  s     r   test_column_conversion_errorrx  2  sP   
D
 
z	"	" 5c
4uV44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5+s39~~====	z	"	" Vc
E5>wCQS9UUUUV V V V V V V V V V V V V V Vc#)nn,,,,,,s#   A  AA<B%%B),B)c                  \   t          j        t           j                  } 	 t          j                    dk    r t          j        t           j        d           nt          j        t           j        d           ddddiddifD ]4}t          j        ddgd	d|
          }|d         j        j        dk    sJ 5n3# t           j	        $ r!}t          j        d|            Y d}~nd}~ww xY wt          j        t           j        |            dS # t          j        t           j        |            w xY w)zBTest code that forces "C" locale while calling fast reader (#4364)Darwinfr_FRz
fr_FR.utf8TFr*   r   z1.5 2r2   )r4   r5   r)   r0   rH   zLocale error: N)locale	setlocaleLC_ALLplatformsystemr   r8   r9   r:   Errorr6   r   )currentr)   rN   es       r   "test_non_C_locale_with_fast_readerr  E  sO   v}--G1?((V]G4444V]L999 !5)!4(	
 		, 		,K 
 ;  A S6<$+++++		, < * * *(Q(())))))))* 	000000000s0   BB6 5D
 6C&C!D
 !C&&D
 
!D+c                      t          dggd          } t                      }t          j        | |d           t          j        |                                dd          }|d         j        J dS )	zXTest that a char column of a Table is assigned no unit and not
    a dimensionless unit.rB   rC   rd   r9  rl   F)r4   r5   N)r   r   r   rS  r8   rT  r  )r   r   t2s      r   test_no_units_for_char_columnsr  _  sp     
wc	"	"	"B
**C	KC''''	CLLNN6	?	?	?Bc7<r   c                       G d dt           j                   G fddt           j                  } t          j        |           }|                    d          d         d         t
          j        j        u sJ d	S )
z!Regression test for #5336, #5338.c                       e Zd Zd ZdS )3test_initial_column_fill_values.<locals>.TestHeaderc                 X    d | j         D             | _        | j        D ]}ddi|_        d S )Nc                 8    g | ]}t          j        |           S )r  )r   Columnr*  s     r   r0  z\test_initial_column_fill_values.<locals>.TestHeader._set_cols_from_names.<locals>.<listcomp>n  s%    BBB!1---BBBr   z--0)rF   r   rp  )selfr   s     r   _set_cols_from_nameszHtest_initial_column_fill_values.<locals>.TestHeader._set_cols_from_namesm  sA    BBtzBBBDIy . .#'+. .r   N)__name__
__module____qualname__r  r   r   r   
TestHeaderr  l  s#        	. 	. 	. 	. 	.r   r  c                       e Zd Z ZdS )/test_initial_column_fill_values.<locals>.TesterN)r  r  r  header_class)r  s   r   Testerr  s  s        !r   r  rQ   z# Column definition is the first uncommented line
# Default delimiter is the space character.
a b c
# Data starts after the header column definition, blank lines ignored
-- 2 3
4 5 6 r0   r   N)r   BasicHeaderrp   rW   r8   r   mar  )r  r_   r  s     @r   test_initial_column_fill_valuesr  i  s    . . . . .U& . . ." " " " " " " " " " V,,,F 	
	
 	
 	 	 5<	 	 	 	 	 	r   c                      d} t          j        | d          }|j        g dk    sJ t          j        |d         ddgk              sJ t          j        |d         dd	gk              sJ d
S )zM
    Test that latex/aastex file with no trailing backslash can be read.
    z}
\begin{table}
\begin{tabular}{ccc}
a & b & c \\
1 & 1.0 & c \\ % comment
3\% & 3.0 & e  % comment
\end{tabular}
\end{table}
latexrl   r   r0   r1   3\%rS   r  Nr   r8   r]   r   r   rJ  s     r    test_latex_no_trailing_backslashr    s    E *U7
+
+
+C<???****6#c(sFm+,,,,,6#c(sCj()))))))r   c                      d} t          j        | d          }|j        g dk    sJ t          j        |d         ddgk              sJ t          j        |d         dd	gk              sJ d S )
Nz
\begin{deluxetable}{ccc}
\tablehead{\colhead{a} & \colhead{b} & \colhead{c}}
\startdata
1 & 1.0 & c \\
2 & 2.0 & d \\ % comment
3\% & 3.0 & e  % comment
\enddata
\end{deluxetable}
aastexrl   r   r0   r1   r  rS   r  r  rJ  s     r   !text_aastex_no_trailing_backslashr    s    	E *U8
,
,
,C<???****6#c(sFm+,,,,,6#c(sCj()))))))r   encoding)utf8latin1cp1252c           	         ddd}| dz  }|                                 D ]\  }}t          |d|          5 }|                    |           d d d            n# 1 swxY w Y   t          j        ||          } |j                    g dk    sJ dD ]J}t          j        ||d	||
          }|d         j        j        dk    sJ  |j                    g dk    sJ Kd S )Nu   # à b è 
 1 2 héllou   à,b,è
1,2,héllo)rO  rE   ztest.txtw)r  )u    à   b    è  z--- --- -----u     1   2 héllor   F)r4   r)   r  r5      èr-   )r   r\  rS  r   r8   r  r9   r:   )	tmp_pathr  r!   r   fmtcontentrH   r   r5   s	            r   test_read_with_encodingr    st    9BWXXD*$H

  W(C(333 	qGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
8h777u}"X"X"XXXXX" 		 		EJ%(RW  E ;$)S0000 5=?? ' ' '     		 s   AA	A	c                      t          j        t          j                  5  t          j        ddddd           d d d            d S # 1 swxY w Y   d S )Nr  Fr+   r  fast_csv)r5   r)   r  r4   )r6   rZ   r   ParameterErrorr8   r   r   r   #test_unsupported_read_with_encodingr    s    	u+	,	, 
 

	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA
A
c                     d} t          j        | dd          }t          |           5 }t          |           5 }| ||                                fD ]}t          j        |ddddddd	
          }t          |          }|D ]t}t	          |j                                        |j                                                  D ]3\  }}	|j        |	j        k    sJ |j        j	        |	j        j	        k    sJ 4ut          |          dk    sJ t          j        |          }
t          j        ||
k              sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          |           5 }t          |           5 }| ||                                fD ]6}t          j        |ddddi          }t          j        ||k              sJ 7	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zg
    Test chunked reading for different input types: file path, file object,
    and string input.
    rM  r   r   rd  Frl    T
chunk_sizechunk_generator)rO  r   r5   r4   r)   r   Nr  i,  rO  r   r)   )r   r8   r\  r   rz   rG  r|   r   r9   r:   rh   r   vstackr   r   )rt  r   fd1fd2fpt_gentsrN   r   r  r  t3s               r   test_read_chunks_input_typesr    s6   
 E	
 
 
B 
e $T%[[ $C#sxxzz* 	$ 	$BJ#+.4HH  E eB = =!$QY%5%5%7%79J9J9L9L!M!M = =IC8ty00009>TZ_<<<<<= r77a<<<<b!!B6"(#######	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $( 
e $T%[[ $C#sxxzz* 	$ 	$Bq|S>Q  B 6"(######	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sl   EDE;EE	EE	EE"%E"8G<AG$G<$G(	(G<+G(	,G<<H H r  c                 d   t          ddd|           }t          |j                  D ]!\  }}|                    |d|dz               "dD ]b}t	                      }t          j        |||           t          j        |                                |d	d
d          }t          |          }|D ]t}t          |j                                        |j                                                  D ]3\  }	}
|	j        |
j        k    sJ |	j        j        |
j        j        k    sJ 4ut!          |          dk    sJ t#          j        |          }t'          j        ||k              sJ t          j        |                                |dd	i          }t'          j        ||k              sJ ddS )z?
    Test different supported formats for chunked reading.
    f   rD  fS)rn  r   kindsr  r   r   )tabrE   r   rdbr2   rl   r  Tr  rP  r   r  N)r   r  r]   r^   r   r   rS  r8   rT  r   rz   rG  r|   r   r9   r:   rh   r   r  r   r   )r  r   rI   r   r4   r   r  r  rN   r   r  r  r  s                r   test_read_chunks_formatsr    s   
 
3RtF	C	C	CBR[)) . .4
}QU}}----
 <    jjBF++++
LLNN'*tDD
 
 

 %[[ 	9 	9A !1!1!3!3RZ5F5F5H5HII 9 9	Tx49,,,,y~888889 2ww{{{{\"vbBh ZvLRUCVWWWvbBh)   r   c                      d} t          j        t                    5 }t          j        | ddddi           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )NrM  r   r   r  rD  r  z1no newline found in chunk (chunk_size too small?)rw  )rt  r;  s     r   %test_read_chunks_chunk_size_too_smallr    s    E	z	"	" Xc
5qQ\SUDVWWWWX X X X X X X X X X X X X X X>#ci..PPPPPPs   AA
Ac                      dgdgdz  z   dgdz  z   } d                     |           }t          j        |d          }t          j        |dd	i
          }t          j        ||k              sJ dS )zeColumn changes type or size between chunks.  This also tests the case with
    no final newline.
    za b cz1.12334 xyz a2   zabcdefg 555 abcr  Frt   r  d   r   N)ry   r   r8   r   r   )r   r   r   r  s       r   test_read_chunks_table_changesr     s     )'",
,0A/BR/G
GCIIcNNE	E	'	'	'B	Ec':	;	;	;B 6"(r   c                      t          j        g dd          } t          j        | d         ddgk              sJ t          j        | d         dd	gk              sJ d
S )zcTest that pure-Python reader is used in case the file contains non-ASCII characters
    in it.
    )z
col1, col2u   ℙ, ƴr  rE   rl   r  u   ℙr1   r  u   ƴrm   N)r   r8   r   r   r   s    r   test_read_non_asciir  .  sk     J???NNNE6%-Hc?2333336%-Hc?23333333r   enablec                    t          j        dt          |                      t                      d         d         d         | du rt           j        nt           j        u sJ t                      D ]j}|                    dd	                              d	          s?|                    d                              d
                              d          | u sJ kdS )zHTest that fast_reader dictionary is preserved through guessing sequence.za	b
 1	2
3	 4.0)r  r   rw   rf  rR   FstatusDisabledr)   r  N)r   r8   ro  r   r  FastTabr   
startswith)r  r   s     r   test_kwargs_dict_guessr  7  s     
J%4v3F3F3FGGGGB)(3oo		EM     N NuuXz**55jAA 	N55??&&}5599(CCvMMMMN Nr   c                 F    dg}| r|dgz  }|ddgz  }| rd |D             }|S )Nza a_2 a_1 a az	N N N N Nz	1 2 3 4 5z10 20 30 40 50c                 \    g | ])}d                      |                                          *S )	)ry   split)r   r;  s     r   r0  z_get_lines.<locals>.<listcomp>K  s,    ;;;T4::<<((;;;r   r   )r  r   s     r   
_get_linesr  D  sN    E
 +	k+,,E
 <;;U;;;Lr   r  c                 v   t          |           }t          j        ||          }|j        g dk    sJ t	          |          dk    sJ t          j        ||g d          }t	          |          dk    sJ |j        g dk    sJ t          j        |d         ddgk              sJ t          j        |d	         dd
gk              sJ t          j        |d         ddgk              sJ t          j        ||g dg d          }t	          |          dk    sJ |j        g dk    sJ t          j        |d         ddgk              sJ t          j        |d         dd
gk              sJ t          j        |d         ddgk              sJ t          j        ||g dg d          }t	          |          dk    sJ |j        g dk    sJ t          j        |d         ddgk              sJ t          j        |d         dd
gk              sJ t          j        |d         ddgk              sJ dS )zTest that duplicate column names are successfully de-duplicated for the
    basic format.  Skip the case of rdb=True and fast_reader='force' when selecting
    include_names, since that fails and is tested below.
    r   )r0   a_2a_1a_3a_4re   r0   r  r  r)   r  r0   r   rD  r     r  r   (   b1b2b3b4b5)r  r  r  r  r)   rF   r  r  r  r  r  r  r  )r  r  r  r  )r)   rF   r  N)r  r   r8   r]   rh   r   r   )r  r)   r   r<   s       r   test_deduplicate_names_basicr  O  s    sOOE
*U
4
4
4C<<<<<<<<s88q====
*UCVCVCV
W
W
WCs88q====<.......6#c(q"g%&&&&&6#e*B'(((((6#e*B'(((((
*,,,///	  C s88q====<-------6#d)2w&'''''6#d)2w&'''''6#d)2w&'''''
*,,,000	  C s88q====<-------6#d)2w&'''''6#d)2w&'''''6#d)2w&'''''''r   c                      t          d          } d| d<   t          j        | dg d          }t          |          dk    sJ |d         j        t
          k    sJ |d	         j        t
          k    sJ d
S )zTest that selecting column names via `include_names` works for the RDB format
    with fast reader. This is testing the fix for a bug identified in #9939.
    Tza	a_2	a_1	a_3	a_4r   r+   r  r  re   r0   r  N)r  r   r8   rh   r9   rK   rJ  s     r   test_include_names_rdb_fastr  |  s     tE&E!H
*U?R?R?R
S
S
SCs88q====s8>S    u:s""""""r   c                    t          d          }d|d<   t          j        || g d          }t          |          dk    sJ |d         j        j        dk    sJ |d	         j        j        d
k    sJ t          j        || g dg d          }t          |          dk    sJ |j        g dk    sJ |d         j        j        dk    sJ |d         j        j        d
k    sJ dS )zTest that on selecting column names via `include_names` in the RDB format with
    different types and duplicate column names type assignment is correctly preserved.
    Tz	N	N	N	S	Sr   r  r  re   r  rI   r  r-   r  )a1r  r  r  r  r  r  r  r  N)r  r   r8   rh   r9   r:   r]   )r)   r   r<   s      r   !test_deduplicate_names_with_typesr    s   
 tEE!H
*UCVCVCV
W
W
WCs88q====u: C''''u: C''''
*,,,555	  C s88q====<-------t9?3&&&&t9?3&&&&&&r   c           	         t          |           }| rd}nd}t          j        t                    5 }t	          j        |||| g d           ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5 }t	          j        |||| g d           ddd           n# 1 swxY w Y   dt          |j                  v sJ dS )	zY
    Test exceptions for invalid (duplicate or `None`) names specified via argument.
    r  r2   )r  r  r  r  r  )r)   r4   r5   rF   NzDuplicate column names)r  r  r  NNz Cannot have None for column name)	r  r6   rZ   r  r   r8   rL   r   r   )r  r)   r   r  r;  s        r   test_set_invalid_namesr    s    sOOE
 	z	"	" 
c
#000	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 $s39~~5555	y	!	! 
S
#000	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 .SY??????s#   AAAB<<C C c                     d} t          j        | d          }|d         }t          |t                    sJ |j        j        dk    sJ |d         dk    sJ dt          t                    gi}t          j        | d|          }|d         }t          |t                    sJ |j        j        d	k    sJ t          j	        |j
        g d
k              sJ t          j	        |g dk              sJ d S )Nz<col0 col1
1       1
0       2
True    3
""      4
False   5
r2   rl   r  r-   r   r1   r4   rG   rU   )FFFTF)TFTFF)r   r8   
isinstancer   r9   r:   r
   boolr   r   r   )txtr<   r   rG   s       r   test_read_masked_boolr    s   C *S
)
)
)C
f+Cc<(((((9>S    q6S==== =../0J
*SZ
@
@
@C
f+Cc<(((((9>S    6#(@@@@AAAAA6#::::;;;;;;;r   c                  (   dt          j        t          j                  gi} t          j        ddg|           }t          j        |d         j        t          j                  sJ t          j        |d         j        t          j                  rJ dS )zLTest converters where the column name is specified with
    a wildcard.
    zF*z	Fabc Iabcr   rX  FabcIabcN)r   r
   r   rW  r8   
issubdtyper9   )rG   rN   s     r   test_read_converters_wildcardr    s}     ,RZ889:J
K'J???A=6"*55555}QvY_bj9999999r   c                     t                      } ddg| d<   ddg| d<   ddg| d	<   d
dg| d<   ddg| d<   t                      }|                     |d           t          t          j        d}t          j        |                                d|          }|                    d          g dk    sJ t          t          j
        t          t          t          gd}t          j        |                                d|          }|                    d          g dk    sJ dt          dt          t          gidt          t          fgidt          t          t          fgifD ]_}t          j        t           d          5  t          j        |                                d|d          }ddd           n# 1 swxY w Y   `dS )zdTest providing io.ascii read converters as type or dtypes instead of
    convert_numpy(type) outputsr   re   r0   g      @r   rU   TrueFalserS   truefalsedr      r  rn   rl   )r0   r  r  T)
show_dtype)z  a      b      c     d      e   z str1 float64  str5  str5 float32z ---- ------- ----- ----- -------z    1     3.5  True  true     5.0z    2     4.0 False false     6.0)r0   *)z!   a       b      c     d     e  z!float64 float64  bool  str5 int64z!------- ------- ----- ----- -----z!    1.0     3.5  True  true     5z!    2.0     4.0 False false     6r  z$Error: invalid format for convertersr.   F)r4   rG   r5   N)r   r   rS  rL   r   rW  r8   rT  r  rJ   int64r  pformat_allrK   r6   rZ   r  )rN   r   rG   r  s       r   test_read_converters_simplifiedr    s    	AVAcF1XAcFgAcFgAcFVAcF
**CGGCG&&&,,J	CLLNN=Z	P	P	PB:::&& + + +     BHeT3#?@@J	CLLNN=Z	P	P	PB>>T>** / / /     
sAtS!"	Szl	S#  
 

 ]:-STTT 	 	}SX  B	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
s   ;+F22F6	9F6	r(  )r|  r   r  r1  collectionsr   ior   r   numpyr   r6   astropyr   
astropy.ior   astropy.io.asciir	   astropy.io.ascii.corer
   astropy.io.ascii.uir   r   astropy.tabler   r   astropy.table.table_helpersr   astropy.unitsr   "astropy.utils.compat.optional_depsr   astropy.utils.datar   astropy.utils.exceptionsr   commonr   r   r   r   r   r   fixturer(   markparametrizer=   rO   r`   rj   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r$  r8  r@  rK  rT  rY  r^  rb  re  rk  rr  rv  rx  r|  ru  r  r  r  r  r  r  r  r   r  r  r  r  r,  r1  r3  r7  r<  xfailr?  rA  rH  rK  rX  r`  rj  rp  ru  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s      				 # # # # # #                                  ! ! ! ! ! ! / / / / / / > > > > > > > > - - - - - - - - 4 4 4 4 4 4       7 6 6 6 6 6 0 0 0 0 0 0 3 3 3 3 3 3 # " " " " " % % % % % % B B B B B B B B B B& & & , , , 	5'/2F1MwW 0 0	 0 $ $ $(0 0 0$& & &2& & &># # #$   (>(>(>??W W @?W (>(>(>??(O(O(OPPE E QP @?E6 (>(>(>??(O(O(OPPE E QP @?E8E E E&3 3 3,, , ,* * *1 1 1   + + + (>(>(>??
 
 @?
 (>(>(>??L L @?L
 (>(>(>??< < @?<
 (>(>(>??O O @?O
% % %
 (>(>(>??* * @?* (>(>(>??
2 
2 @?
2 (>(>(>??F F @?F2 2 2T T T
 
 

- 
- 
-@ @ @ < < <7 7 7 (>(>(>??/ / @?/ (>(>(>??/ / @?/ (>(>(>??/ / @?/M M M (>(>(>??	- 	- @?	- (>(>(>??  @? (>(>(>??
 
 @?
 (>(>(>??
 
 @?
- - - (>(>(>??
/ 
/ @?
/0 0 0% % %"- - -&   (>(>(>??E E @?E (>(>(>??< < @?<~G G G GT@ @ @*$ $ $ (>(>(>??$ $ @?$@ @ @@@@ @@ @@F	 	 	  : : :  @ w;~66> > 76>	( 	( 	(2 2 2  & %!122(& (& 32(&V*. *. *.Z (>(>(>??5 5 @?5p  B& & &- - -&1 1 14       8* * *&* * *" %A%A%ABB  CB.	
 	
 	
&$ &$ &$R D%=11    21 DQ Q Q  4 4 4 #9#9#9::	N 	N ;:	N   ..(899(( (( :9 /.((V	# 	# 	# (899' ' :9'0 ..(899@ @ :9 /.@>< < <4: : :, , , , ,r   