U
    e»{jÍ ã                   @   s�  d dl Z d dlZd dlZd dlZd dlmZ 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%m&Z&m'Z'm(Z(m)Z) dd„ Z*ej+dd„ ƒZ,ej- .dddddiddidg¡dd„ ƒZ/dd„ Z0dd„ Z1d d!„ Z2d"d#„ Z3d$d%„ Z4d&d'„ Z5ej- .ddddg¡d(d)„ ƒZ6ej- .ddddg¡ej- .d*d+d,d-g¡d.d/„ ƒƒZ7ej- .ddddg¡ej- .d*d+d,d-g¡d0d1„ ƒƒZ8d2d3„ Z9d4d5„ Z:d6d7„ Z;d8d9„ Z<d:d;„ Z=d<d=„ Z>d>d?„ Z?ej- .ddddg¡d@dA„ ƒZ@ej- .ddddg¡dBdC„ ƒZAej- .ddddg¡dDdE„ ƒZBej- .ddddg¡dFdG„ ƒZCdHdI„ ZDej- .ddddg¡dJdK„ ƒZEej- .ddddg¡dLdM„ ƒZFej- .ddddg¡dNdO„ ƒZGdPdQ„ ZHdRdS„ ZIdTdU„ ZJdVdW„ ZKdXdY„ ZLdZd[„ ZMd\d]„ ZNej- .ddddg¡d^d_„ ƒZOej- .ddddg¡d`da„ ƒZPej- .ddddg¡dbdc„ ƒZQddde„ ZRej- .ddddg¡dfdg„ ƒZSej- .ddddg¡dhdi„ ƒZTej- .ddddg¡djdk„ ƒZUej- .ddddg¡dldm„ ƒZVdndo„ ZWej- .ddddg¡dpdq„ ƒZXdrds„ ZYdtdu„ ZZdvdw„ Z[dxdy„ Z\ej- .ddddg¡dzd{„ ƒZ]ej- .ddddg¡d|d}„ ƒZ^dÚd~d„Z_d€d�„ Z`d‚dƒ„ Zaej- .ddddg¡d„d…„ ƒZbd†d‡„ Zcdˆd‰„ ZddŠd‹„ ZedŒd�„ ZfdŽd�„ Zgd�d‘„ Zhej-jie d’d“�d”d•„ ƒZjd–d—„ Zkd˜d™„ Zldšd›„ Zmej- .dœddg¡d�dž„ ƒZndŸd „ Zoej- .ddddg¡d¡d¢„ ƒZpd£d¤„ Zqd¥d¦„ Zrd§d¨„ Zsd©dª„ Ztd«d¬„ Zud­d®„ Zvd¯d°„ Zwd±d²„ Zxej- .d³d´dµd¶g¡d·d¸„ ƒZyd¹dº„ Zzd»d¼„ Z{ej- .d½ddg¡d¾d¿„ ƒZ|dÀdÁ„ Z}dÂdÃ„ Z~dÄdÅ„ Zej- .dÆdddg¡dÇdÈ„ ƒZ€dÉdÊ„ Z�ej- .dËddg¡ej- .dddg¡dÌdÍ„ ƒƒZ‚dÎdÏ„ Zƒej- .dddg¡dÐdÑ„ ƒZ„ej- .dËddg¡ej- .dddg¡dÒdÓ„ ƒƒZ…dÔdÕ„ Z†dÖd×„ Z‡dØdÙ„ Zˆd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é   )Úassert_almost_equalÚassert_equalÚassert_trueÚsetup_functionÚteardown_functionc                 C   s   t |  d¡ƒS )Nr   )r   Úencode)Úx© r   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/ascii/tests/test_read.pyÚasciiIO%   s    r   c                 C   s$   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   Zsetenv)ZmonkeypatchÚrequestÚpathr   r   r   Úhome_is_data)   s    r#   Úfast_readerTFÚuse_fast_converterÚforcec              	   C   sP   d}t jtdd��  tjddd gd| dd	�}W 5 Q R X |d jj|ksLt‚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)ÚpytestZwarnsr   r   ÚreadÚdtypeÚkindÚAssertionError)r$   Zexpected_kindÚdatr   r   r   Útest_convert_overflow8   s    
 ÿ
   ÿr6   c                  C   sŠ   dddg} dddg}t  t¡gt  t¡gt  t¡gdœ}t j| d||d	�}|d jjd
ks^t‚|d jjdksrt‚|d jjdks†t‚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,3ú4,5,6ÚAÚBÚC)r:   r;   r<   Úcsv)r.   ÚnamesÚ
convertersÚfÚir'   N)	r   r	   ÚfloatÚintÚstrr1   r2   r3   r4   )Úcsv_textr>   r?   Útr   r   r   Ú'test_read_specify_converters_with_namesL   s    




ýrG   c               	   C   s¬   dddg} t jt jd�}| | ¡ |j}tjtdd�� | dg¡ W 5 Q R X | dg¡ |j	d	ksht
‚| d
d¡ |j	dks‚t
‚tjtdd�� | dd¡ W 5 Q R X d S )Nr7   r8   r9   ©ÚReaderzColumn NOT-EXIST does not existr(   z	NOT-EXISTÚc©r*   Úbr*   Úaa)rM   rL   )r   Ú
get_readerÚCsvr1   Úheaderr0   ÚraisesÚKeyErrorZremove_columnsÚcolnamesr4   Úrename_column)rE   ÚreaderrP   r   r   r   Ú#test_read_remove_and_rename_columns`   s    

rV   c                  C   s    t jddgdd�} t| ƒdks"t‚| jddgks4t‚t jddgdd�} t| ƒd	ksVt‚| jddgksht‚t jd
dgdd�} t| ƒd	ksŠt‚| jddgksœt‚dS )zr
    Make sure reading a table with guess=True gives the expected result when
    the names arg is specified.
    ú1,2ú3,4rK   ©r>   é   r*   rL   zc,dr   úc dúe fN)r   r1   Úlenr4   rS   ©r5   r   r   r   Útest_guess_with_names_argr   s    r_   c                  C   sL  t jddgdd�} t| ƒdks"t‚| jddgks4t‚t jddgddd	�} t| ƒdksXt‚| jd
dgksjt‚t jddgt jd�} t| ƒdksŽt‚| jddgks t‚t jddgdt jd�} t| ƒdksÆt‚| jd
dgksØt‚tjddgdd�} t| ƒdksút‚| jddgk�st‚tjddgddd�} t| ƒdk�s4t‚| jd
dgk�sHt‚dS )zu
    When the format or Reader is explicitly given then disable the
    strict column name checking in guessing.
    rW   rX   r,   ©r.   r   r+   Ú2rK   )r>   r.   r*   rL   rH   )r>   rI   úascii.basic©r.   r>   N)r   r1   r]   r4   rS   ÚBasicr   r^   r   r   r   Útest_guess_with_format_arg‹   s$    re   c                  C   s¶   ddddg} ddddg}t jtd	 | ¡ƒd
d�}t|j|ƒD ]\}}|| d |ks<t‚q<t jtd	 | ¡ƒd
dd�}t|jdd… | dd… ƒD ] \}}|| d |d ks�t‚q�dS )zT
    When the delimiter is explicitly given then do not try others in guessing.
    z10.1E+19z3.14Z2048z-23gÐ)„S æDg…ëQ¸	@i   iéÿÿÿz, T©r/   r   ú )r/   Ú	delimiterNéÿÿÿÿú,)r   r1   r   ÚjoinÚziprS   r4   )ÚfieldsÚvaluesÚt0ÚnÚvÚt1r   r   r   Útest_guess_with_delimiter_argª   s    $rs   c                  C   sR   t jddtdƒd�} t| ƒdks$t‚tjddgddd	d
gd� t| ƒdksNt‚d S )Nz1 2	3
1 2	3Ú	no_headerÚabcrc   rZ   z1 2	3zascii.no_headerr*   rL   rJ   )r   r1   Úlistr]   r4   r   r^   r   r   r   Ú(test_reading_mixed_delimiter_tabs_spaces¼   s    rw   c              	   C   s2   t  tj¡� tjddgdd| d� W 5 Q R X dS )z?
    Test that a bad value of `names` raises an exception.
    r[   r\   )r*   F)r>   r/   r$   N©r0   rQ   r   ÚInconsistentTableErrorr1   ©r$   r   r   r   Útest_read_with_names_argÅ   s    r{   Úpath_formatÚplainz	tilde-strztilde-pathlibc                 C   s&  t ƒ D �]}| d¡r*td|d › �ƒ qd|krpd|krTd|d dd …  |d< nt d|d dd … ¡|d< td|d › �ƒ d	D ]˜}|d
  ¡ }d|kr¦||d< d|krÔd|d j› �tjkrÔd|krÔ| |d< t	j
|d f|Ž}t|jj|d ƒ |jjD ]}tt|| ƒ|d ƒ �q q†qd S )NÚskipú

******** SKIPPING ÚnameÚtilderD   ú~/é   ú

******** READING ©TFÚoptsr/   rI   Úfast_ÚInputterr$   ÚcolsÚnrows)Úget_testfilesÚgetÚprintÚpathlibÚPathÚcopyÚ_format_namer   ÚFAST_CLASSESr   r1   r   r2   r>   r]   )r$   r|   r#   Útestfiler/   Ú	test_optsr   Úcolnamer   r   r   Útest_read_all_filesÏ   s.    
ÿþr–   c           	      C   s<  t ƒ D �].}| d¡r*td|d › �ƒ qd|krpd|krTd|d dd …  |d< nt d|d dd … ¡|d< td|d › �ƒ d	D ]®}|d
  ¡ }d|kr¦||d< d|krÆd|d j› �}|d= nd}d|› �tjkrâ| |d< t	j
|d fd|i|—Ž}t|jj|d ƒ |jjD ]}tt|| ƒ|d ƒ �qq†qd S )Nr~   r   r€   r�   rD   r‚   rƒ   r„   r…   r†   r/   rI   zascii.r   r‡   r$   r.   r‰   rŠ   )r‹   rŒ   r�   rŽ   r�   r�   r‘   r   r’   r   r1   r   r2   r>   r]   )	r$   r|   r#   r“   r/   r”   r.   r   r•   r   r   r   Útest_read_all_files_via_tableì   s.    
r—   c                     sÐ   t ƒ D ]Ä} |  d¡r(td| d › �ƒ q| d  dd¡s:qtd| d › �ƒ dd	d
gg fD ]n‰ ‡ fdd„| d  ¡ D ƒ}tj| d fddi|—Ž}t|jj| d ƒ |jjD ]}tt	|| ƒ| d ƒ q¬qZqd S )Nr~   r   r€   r†   r/   Tr„   rI   rh   Ú	quotecharc                    s   i | ]\}}|ˆ kr||“qS r   r   )Ú.0Úkrq   ©Zfilter_read_optsr   r   Ú
<dictcomp>  s      z(test_guess_all_files.<locals>.<dictcomp>r‰   rŠ   )
r‹   rŒ   r�   Úitemsr   r1   r   r2   r>   r]   )r“   Z
guess_optsr   r•   r   r›   r   Útest_guess_all_files
  s    



ÿrž   c               	   C   sŠ   dddg} t j| t d¡d�}t |d dgk¡s6t‚tjtdd	�� t j| d
d� W 5 Q R X tjtdd	�� t j| dd� W 5 Q R X d S )Núa bú1 2ú3 4rZ   )Ú
data_startr*   é   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   r1   ÚnpZint16Úallr4   r0   rQ   Ú	TypeError)ÚlinesÚoutr   r   r   Útest_validate_read_kwargs  s    
þþr¬   c                  C   sL   t jdt jd�} |  ¡ D ].}|jdkr8t |j¡sFt‚qt	|dƒrt‚qdS )z;Test that INDEF is correctly interpreted as a missing valueúdata/daophot2.datrH   )ZOTIMEÚMAGÚMERRZXAIRMASSÚmaskN)
r   r1   ÚDaophotZitercolsr€   r§   r¨   r°   r4   Úhasattr)r   Úcolr   r   r   Útest_daophot_indef3  s
    
r´   c                  C   sd   t jdt jd�} | d jjdks$t‚| d jjdks8t‚| d jjdksLt‚| d jjd	ks`t‚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­   rH   ZLIDÚfdr®   ÚPIERZUSr¥   ÚilN)r   r1   r±   r2   Úcharr4   r   r   r   r   Útest_daophot_types>  s    ÿr¹   c                  C   sf   t jdt jd�} d}| jd }|D ]>\}}}}|| }t|d |ƒ t|d |ƒ t|d |ƒ q"d S )Núdata/daophot.datrH   ))Z	NSTARFILEz
test.nst.1Úfilenameú%-23s)ZREJFILEz"hello world"r»   r¼   )ZSCALEz1.z	units/pixz%-23.7gÚkeywordsÚvalueÚunitsr.   )r   r1   r±   Úmetar   )r   Zexpected_keywordsr½   r€   r¾   r¿   Zformat_Úkeywordr   r   r   Útest_daophot_header_keywordsM  s    
rÂ   c                  C   s`   t jdt jd�} d| jkst‚| d d dks2t‚| d d dksFt‚t | d	 d
k¡s\t‚d S )Nzdata/daophot3.datrH   ZMAG5é   gáz®G!6@ÚMERR2r   g#Ûù~j¼ò?ÚRAPERT5gÍÌÌÌÌL7@©r   r1   r±   rS   r4   r§   r¨   r   r   r   r   Útest_daophot_multiple_aperture]  s    
ÿrÇ   c                  C   s`   t jdt jd�} d| jkst‚| d d dks2t‚| d d dksFt‚t | d	 d
k¡s\t‚d S )Nzdata/daophot4.datrH   ZMAG15r   g˜nƒÀJÀrÄ   r   gJ+‡©?rÅ   g      @rÆ   r   r   r   r   Útest_daophot_multiple_aperture2g  s
    rÈ   c              	   C   s0   t  tj¡� tjdtjd| d� W 5 Q R X d S )Nzdata/no_data_without_header.datF)rI   r/   r$   )r0   rQ   r   ry   r1   ÚNoHeaderrz   r   r   r   Útest_empty_table_no_headero  s    ürÊ   c              	   C   s,   t  tj¡� tjdd| d� W 5 Q R X d S )Núdata/simple.txtF)r/   r$   rx   rz   r   r   r   Útest_wrong_quotez  s    rÌ   c              	   C   s*   t  tj¡� tjd| d� W 5 Q R X d S )Nzdata/bad.txtrz   rx   rz   r   r   r   Útest_extra_data_col€  s    rÍ   c              	   C   s,   t  tj¡� tjdd| d� W 5 Q R X d S )Nzdata/simple5.txtú|)rh   r$   rx   rz   r   r   r   Útest_extra_data_col2†  s    rÏ   c                	   C   s$   t  t¡� t d¡ W 5 Q R X d S )NZdoes_not_exist)r0   rQ   ÚOSErrorr   r1   r   r   r   r   Útest_missing_fileŒ  s    rÑ   c                 C   s(   d}t jd|d| d�}t|jj|ƒ d S )N©Úc1Úc2Úc3Zc4Zc5Zc6údata/simple3.txtrÎ   )r>   rh   r$   ©r   r1   r   r2   r>   )r$   r>   r   r   r   r   Útest_set_names‘  s       ÿrØ   c                 C   s.   d}d}t jd||d| d�}t|jj|ƒ d S )NrÒ   )rÓ   rÕ   rÖ   rÎ   )r>   Úinclude_namesrh   r$   r×   )r$   r>   rÙ   r   r   r   r   Útest_set_include_namesš  s    ûrÚ   c                 C   s(   d}t jd|d| d�}t|jjdƒ d S )N)ÚYÚobjectrÖ   rÎ   )Úexclude_namesrh   r$   )ÚobsidÚredshiftÚXÚradr×   )r$   rÝ   r   r   r   r   Útest_set_exclude_names¨  s    ürâ   c                  C   s$   d} t jd| d�}t|jj| ƒ d S )N)r¥   r®   r¶   rº   )rÙ   r×   )rÙ   r   r   r   r   Útest_include_names_daophot´  s    rã   c                  C   s$   d} t jd| d�}t|jjdƒ d S )N)r¥   ÚYCENTERr¯   ÚNITERÚCHIÚPERRORrº   )rÝ   )ÚXCENTERr®   ÚMSKYÚ	SHARPNESSr¶   r×   )rÝ   r   r   r   r   Útest_exclude_names_daophotº  s    rë   c                  C   sF   dd„ } t jdd�}| |j_| d¡}t|jjdƒ tt|ƒdƒ d S )Nc                    s.   t  dt j¡‰ dd„ | D ƒ}‡ fdd„|D ƒS )Nz	^\| | \|$c                 s   s   | ]}|  ¡ V  qd S )N)Ústrip©r™   r   r   r   r   Ú	<genexpr>Ã  s     zCtest_custom_process_lines.<locals>.process_lines.<locals>.<genexpr>c                    s$   g | ]}t |ƒd krˆ  d|¡‘qS )r   Ú )r]   Úsubrí   ©Zbars_at_endsr   r   Ú
<listcomp>Ä  s      zDtest_custom_process_lines.<locals>.process_lines.<locals>.<listcomp>)ÚreÚcompileÚVERBOSE)rª   Z
striplinesr   rñ   r   Úprocess_linesÁ  s    z0test_custom_process_lines.<locals>.process_linesrÎ   )rh   zdata/bars_at_ends.txt©rÞ   rß   rà   rÛ   rÜ   rá   r£   )	r   rN   Zinputterrö   r1   r   r2   r>   r]   )rö   rU   r   r   r   r   Útest_custom_process_linesÀ  s    
rø   c                  C   sZ   dd„ } t jddd�}| |jj_| |jj_| d¡}tdƒd }t|j	j
|dd … ƒ d S )	Nc                 S   s   t  dd|  ¡ ¡}|S )Nz^\|\s*rï   )ró   rð   rì   )ÚlineZline_outr   r   r   Úprocess_lineÎ  s    z.test_custom_process_line.<locals>.process_linerZ   rÎ   )r¢   rh   údata/nls1_stackinfo.dboutr‰   r   )r   rN   rP   Úsplitterrú   r   r1   r‹   r   r2   r>   )rú   rU   r   r‰   r   r   r   Útest_custom_process_lineÍ  s    


rý   c                  C   sÂ   t  ¡ } t  ¡ | j_t  ¡ | 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.nhrZ   giÖÒT µ?úp1.gammagÃ�î’Û(ô?úp1.amplg¸Z*2ÒF?ÚstatnameZ
chi2modvarÚstatvalg-…ò@)r   rN   ZBaseSplitterrP   rü   r   r1   r‹   r   r2   r>   r]   r   Úfield)rU   r@   r   r“   r   r   r   Útest_custom_splittersÚ  s    
r  c                  C   sL   t jd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¤   é   r  r   Zchi2xspecvarri   Zchi2gehrels)r   r1   r   r]   r  ©r   r   r   r   Útest_start_endê  s    r  c                  C   sZ   t  d¡t  d¡gt  d¡gdœ} t jd| d�}tt|d jƒdƒ t|d d	 d
ƒ d S )NZint32Úfloat32rD   )rÿ   r   rþ   ©r?   rÿ   r   r   z1.26764500000)r   r	   r1   r   rD   r2   )r?   r   r   r   r   Útest_set_convertersñ  s    
þr  c              	   C   sn   d}t |ƒ�}| ¡ }W 5 Q R X t|ƒd }tj|fd| i|d —Ž}t|jj|d ƒ tt|ƒ|d ƒ d S ©NrË   r   r$   r†   r‰   rŠ   )Úopenr1   r‹   r   r   r2   r>   r]   ©r$   r@   rµ   r   r“   r   r   r   r   Útest_from_stringû  s    
r  c              	   C   sh   d}t |ƒd }t|dƒ� }tj|fd| i|d —Ž}W 5 Q R X t|jj|d ƒ tt|ƒ|d ƒ d S )NrË   r   Úrbr$   r†   r‰   rŠ   )r‹   r  r   r1   r   r2   r>   r]   )r$   r@   r“   rµ   r   r   r   r   Útest_from_filelike  s    $r  c              	   C   sn   d}t |ƒ�}| ¡ }W 5 Q R X t|ƒd }tj|fd| i|d —Ž}t|jj|d ƒ tt|ƒ|d ƒ d S r  )	r  Ú	readlinesr‹   r   r1   r   r2   r>   r]   r  r   r   r   Útest_from_lines  s    
r  c                  C   s@   t jt jd�} |  d¡}t| jddgƒ t|jd ddgƒ d S )NrH   údata/apostrophe.rdbz# first commentz  # second commentÚcommentszfirst commentzsecond comment)r   rN   ÚRdbr1   r   Zcomment_linesrÀ   )r   r   r   r   r   Útest_comment_lines  s    
r  c                 C   s�   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©r*   r+   ©Úfill_valuesr$   r†   r*   FTr   rL   rZ   )r‹   r   r1   r   r°   r¨   ©r$   r@   r“   r   r   r   r   Útest_fill_values"  s    ÿ ÿÿr   c                 C   s4   d}t |ƒ}tj|fd| dœ|d —Ž}t|ƒ d S )Nr  )r*   r+   rL   r  r†   ©r‹   r   r1   Úcheck_fill_valuesr  r   r   r   Útest_fill_values_col/  s    ÿ ÿÿr#  c                 C   s8   d}t |ƒ}tj|fd| dgdœ|d —Ž}t|ƒ d S )Nr  r  rL   )r  r$   r¦   r†   r!  r  r   r   r   Útest_fill_values_include_names9  s    ÿüûr$  c                 C   s8   d}t |ƒ}tj|fd| dgdœ|d —Ž}t|ƒ d S )Nr  r  r*   )r  r$   Zfill_exclude_namesr†   r!  r  r   r   r   Útest_fill_values_exclude_namesG  s    ÿüûr%  c                 C   s‚   t | d dƒrt‚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 expectationr*   r°   r+   rL   FTrZ   iüÿÿr   N)r²   r4   r   r¨   r°   r
  r   r   r   r"  U  s    
r"  c                 C   sR   d}t |ƒ}tj|fddg| dœ|d —Ž}d|d _t|d ddgk ¡ ƒ d S )	Nr  )r*   Ú42)r+   r&  r*   r  r†   Fr*   é*   )r‹   r   r1   r°   r   r¨   r  r   r   r   Útest_fill_values_list`  s    ÿýü
r(  c                  C   sL   d} t | ƒD ]:}tj| f|d Ž}t|d jd ƒ t|d dƒrt‚qd S )Núdata/cds.datr†   ÚAKr   ÚFitr°   )r‹   r   r1   r   r°   r²   r4   )r@   r“   r   r   r   r   Útest_masking_Cds_Mrtn  s
    r,  c                  C   sV   d} t | ƒd }tj| f|d Ž}tjddgdddd	d
gd�}t |j|k¡sRt‚d S )Núdata/ipac.datr   r†   )TFTFT)FFFFF)Úraú|b1)Údecr/  )Úsair/  )Úv2r/  )Úsptyper/  )r2   )r‹   r   r1   r§   Úarrayr¨   r°   r4   )r@   r“   r   r°   r   r   r   Útest_null_Ipacv  s    ûþ
r5  c                  C   s’   t dƒ} dg}d}t|ƒd }tj|f|d Ž}|jd  ¡ |  ¡ ksJt‚t|jd  ¡ |  ¡ ƒD ]\}}|d |ksbt‚qb|jd |ksŽt‚d S )	N))Zintvalr   )Zfloatvalg     ø¡@)ÚdatezWed Sp 20 09:48:36 1995)Zkey_continuez'IPAC keywords can continue across linesz%This is an example of a valid commentr-  r   r†   r½   r¾   r  )	r   r‹   r   r1   rÀ   Úkeysr4   rl   rn   )r½   r  r@   r“   r   Zdata_kvÚkvr   r   r   Útest_Ipac_meta‡  s    ÿ r9  c                  C   s4   t jdddd�} | jjdks t‚t| ƒdks0t‚dS )zLRead a file using guess with one of the typical guess_kwargs explicitly set.údata/space_delim_no_header.datrj   T)rh   r/   )z1 3.4 hellor   N)r   r1   r2   r>   r4   r]   r
  r   r   r   Útest_set_guess_kwargš  s    r;  c              	   C   s0   d}t  t¡� tj|tj| d� W 5 Q R X dS )z:Read RDB data with inconsistent data type (except failure)zcol1	col2
N	N
1	Hello)rI   r$   N)r0   rQ   Ú
ValueErrorr   r1   r  )r$   r   r   r   r   Útest_read_rdb_wrong_type¡  s    r=  c                 C   sB  d  dddg¡}tj|| d�}|jdks,t‚| ¡ ddd	d
gksDt‚d}tj|| d�}| ¡ dddgkslt‚|d jjdks€t‚d  ddddg¡}tj|tjd�}|jdks°t‚| ¡ ddd	d
gksÈt‚tj|tjdd�}|jdksèt‚| ¡ ddddgk�st‚tj|tjg d�}|jdk�s$t‚| ¡ ddddgk�s>t‚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 rz   Fz a   b   c   d z--- --- --- ---z  1   3  --  --z  2  -- 4.0  ssz a 
 "" z a z---z --r*   rA   z  1   3        z  2     4.0  ssrH   N)rI   r  )	rk   r   r1   Úmaskedr4   Úpformatr2   r3   ÚFixedWidthTwoLine)r$   r   r5   r   r   r   Útest_default_missing«  sb    ýÿü
üÿü
üürC  c              ,      sL  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œg(}z&d#d@l}| dWdXddt jidœ¡ W n tk
�r   Y nX ˆ d@k	�rD‡ fdYdZ„|D ƒ}t|ƒd	k�rH|d# }n|}|S )[z�Set 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.)Zagasc_idZn_noidsZn_obsr  rZ   rI   )r‰   r€   rŠ   r†   zdata/apostrophe.tab)ÚIndexZRAhZRAmZRAszDE-ZDEdZDEmZDEsÚMatchÚClassr*  r+  r)  r   zdata/cds_malformed.datr/   )rI   r¢   )r*   rL   rJ   zdata/commented_header.datzdata/commented_header2.datri   )rI   r  )Úcol1Úcol2Úcol3Úcol4Úcol5zdata/continuation.dat)rˆ   rI   )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.  r0  r1  r2  r3  r-  )Úcol0ZobjIDZosrcidZxsrcidZ	SpecObjIDr.  r0  rÞ   ZccdidÚzZ
modelMag_iZmodelMagErr_iZ
modelMag_rZmodelMagErr_rZexpoÚthetaZ
rad_ecf_39Zdetlim90ZfBlim90rû   é:   rÎ   F)r¢   rh   r/   zdata/no_data_cds.datr   zdata/no_data_daophot.dat)rL  rM  rN  ZVALUESZVALUES_1rO  zdata/no_data_sextractor.datzdata/no_data_ipac.dat)r.  r2  r.  r2  )rI   rÙ   zdata/no_data_with_header.datzdata/short.rdbé   zdata/short.tab)útest 1aÚtest2Útest3Útest4rË   r˜   ú')Ztop1Ztop2Ztop3Ztop4)r˜   r  r¢   )r˜   r  r÷   zdata/simple2.txtrh   rÖ   )rG  rH  rI  rJ  rK  Zcol6zdata/simple4.txt)rI   rh   )rG  rH  rI  r:  N)rÞ   Úoffsetr   Úyr€   Zoaaz data/space_delim_blank_lines.txt)rÿ   r   r  r  r  rþ   é	   r  rj   zdata/whitespace.dat)zquoted colname with tab	insiderH  rI  z\s)r€   r‰   rŠ   r†   zdata/simple_csv.csvzdata/simple_csv_missing.csvT)r€   r‰   rŠ   r~   r†   )ZcolaZcolbZcolczdata/latex1.tex)ZFacilityZIdZexposurer6  zdata/latex2.texzdata/latex3.tex)ZCol1ZCol2ZCol3ZCol4zdata/fixed_width_2_line.txt)zColumn 1zColumn 2zColumn 3údata/html.htmlc                    s   g | ]}|d  ˆ kr|‘qS ©r€   r   rí   r^  r   r   rò   l  s      z!get_testfiles.<locals>.<listcomp>)r   r  ÚTabÚCdsÚMrtZCommentedHeaderZContinuationLinesInputterrÉ   r±   Ú
SExtractorÚIpacrO   ZLatexZAASTexrB  Úbs4ÚappendÚHTMLÚImportErrorr]   )r€   Z	testfilesrd  r«   r   r^  r   r‹   ë  sÂ   üüïï
ïü
üþü
ðõü
èïïðüüüüüüü
üü
üüü
üü
üüüüüüûüüüü€ € œ  nüÿ

r‹   c               
   C   sT   t jt jt jt jt jt jt jt jfD ]*} t	 
t¡� t jj| dd� W 5 Q R X q$dS )zñCheck 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ƒ   )r  N)r   rÉ   rb  rc  Z
BaseReaderZFixedWidthNoHeaderr`  ra  r±   r0   rQ   r<  r   Z_get_reader)Zreaderclassr   r   r   Útest_header_start_exceptionu  s    ø
rh  c                  C   s*   dddg} t  | ¡}|jddgks&t‚dS )zf
    Check for a regression introduced by #1935.  Pseudo-CSV file with
    commented header line.
    z# a, bú1, 2z3, 4r*   rL   N©r   r1   rS   r4   )rª   rF   r   r   r   Útest_csv_table_readŠ  s    

rk  c                 C   s.   t jddgddg| d�}|jddgks*t‚dS )z{
    Check that the names argument list can overlap with the existing column names.
    This tests the issue in #1991.
    rŸ   r    rL   r*   )r>   r$   Nrj  )r$   rF   r   r   r   Útest_overlapping_names”  s    rl  c               
   C   sž   t jdt jdd�} dtdƒtdƒtdƒtdƒdtdƒtdƒtd	ƒg	}d
ddddddddg	}t| jƒD ]4\}}| | j|| ks‚t‚| | j|| ksdt‚qddS )zW
    Make sure that the SExtractor reader correctly inputs descriptions and units.
    zdata/sextractor2.datF©rI   r/   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 flagsz%Barycenter position along MAMA x axisz(Peak surface brightness above background)	r   r1   rb  r   Ú	enumeraterS   Úunitr4   Údescription)r   Úexpected_unitsÚexpected_descrsrA   r•   r   r   r   Útest_sextractor_unitsž  s0    ÷÷rw  c                  C   s<  t jdt jdd�} dddddd	d
dddddddddddddg}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}dddddd gd!gd"  d#gd"  }t| jƒD ]N\}}| | j|| k�st‚| | j|| k�s t‚| | j	|| ksèt‚qèdS )$zg
    Make sure that the SExtractor reader handles the last column correctly when it is array-like.
    zdata/sextractor3.datFrm  ZX_IMAGEZY_IMAGEZALPHA_J2000ZDELTA_J2000ZMAG_AUTOZMAGERR_AUTOZMAG_APERZ
MAG_APER_1Z
MAG_APER_2Z
MAG_APER_3Z
MAG_APER_4Z
MAG_APER_5Z
MAG_APER_6ZMAGERR_APERZMAGERR_APER_1ZMAGERR_APER_2ZMAGERR_APER_3ZMAGERR_APER_4ZMAGERR_APER_5ZMAGERR_APER_6rn  Údegro  zObject position along xNz%Right ascension of barycenter (J2000)z!Declination of barycenter (J2000)rp  rq  zFixed aperture magnitude vectorrT  z(RMS error vector for fixed aperture mag.)
r   r1   rb  r   rr  rS   r€   r4   rs  rt  )r   Zexpected_columnsru  rv  rA   r•   r   r   r   Ú!test_sextractor_last_column_array¾  sv    ììúø	÷ÿry  c                  C   s`   t  dddddg¡} | jdgks$t‚t| ƒdks4t‚| d d dksHt‚| d d d	ks\t‚d
S )zr
    Check that lists of strings where some strings consist of just a newline
    ("
") are parsed correctly.
    ru   z123
z456
r>  rZ   r   é{   r   iÈ  N©r   r1   rS   r4   r]   ©rF   r   r   r   Útest_list_with_newlines  s
    r}  c                  C   sN   t jdddgdd�} | jddgks&t‚t| ƒdks6t‚| d d	 d
ksJt‚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,brW   z#3,4r=   r`   z#arL   rZ   r   z#3Nr{  r|  r   r   r   Útest_commented_csv  s    r~  c                  C   s@   t  ddddg¡} | jdddgks&t‚| jd d	d
gks<t‚dS )zf
    Make sure that line comments are included in the ``meta`` attribute
    of the output Table.
    z	#comment1z#   comment2 	r7   r8   r*   rL   rJ   r  Zcomment1Zcomment2N)r   r1   rS   r4   rÀ   r|  r   r   r   Útest_meta_comments  s    r  c               	   C   s®   t  tj¡�} tjddd� W 5 Q R X dt| jƒks8t‚t  t¡�} tjddd� W 5 Q R X dt| jƒksnt‚t  t¡�} tjddddd	d
� W 5 Q R X dt| jƒksªt‚dS )z2
    Check the error message when guess fails
    zasfdasdf
1 2 3r,   r`   z@** To figure out why the table did not read, use guess=False andÚipaczEAt least one header line beginning and ending with delimiter requiredú"rg   F)r.   r˜   rh   r$   z?Number of header columns (1) inconsistent with data columns (3)N)	r0   rQ   r   ry   r1   rD   r¾   r4   r<  )Úerrr   r   r   Útest_guess_fail"  s,    ÿ
ÿÿûÿrƒ  zrequires bz2)Úreasonc               	   C   s<   t ddƒ�} t | ¡}W 5 Q R X |jdddddgks8t‚dS )	zU
    Test guessing a file object.  Fixes #3013 and similar issue noted in #3019.
    zdata/ipac.dat.bz2r  r.  r0  r1  r2  r3  N)r  r   r1   rS   r4   )rµ   rF   r   r   r   Útest_guessing_file_objectB  s    r…  c                  C   sv   d  dddg¡} t | ¡}t | ¡ ¡}t|ƒt|ƒks<t‚|j|jksLt‚|jD ]}t || || k¡sRt‚qRd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)	rk   r   r1   rA  r]   r4   rS   r§   r¨   )r   r5   r«   rJ   r   r   r   Útest_pformat_roundtripL  s    

r†  c                  C   s”   dddg} t j| dd�}|jdd… D ]}|| jjdks&t‚q&|jdd	… D ]}|| jjd
ksNt‚qN|jd	d… D ]}|| jjdksvt‚qvd S )Nz=| 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 r€  r`   r   é   r@   é
   rA   é   )r'   ÚS)r   r1   Úcolumnsr2   r3   r4   )rª   r5   r€   r   r   r   Útest_ipac_abbrevX  s    ýrŒ  c                  C   s,   dddddg} t  | ¡}t|ƒdks(t‚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   r1   r]   r4   ©rª   r5   r   r   r   Ú!test_almost_but_not_quite_daophotg  s    	û
rŽ  Úfastc                 C   sÔ  dddg}dddddd	g}t j|d
| d�}|jd |ks<t‚|jddgksNt‚tƒ }t j||d
| d� | ¡  ¡ |kszt‚| 	d| 
d¡¡ t j|d
d| d�}|jd |ks°t‚|jddgksÂt‚| 	d| 
d¡¡ t j|d
d| d�}|jd |ksøt‚|jddgk�st‚t j|d
d| d�}|jd |k�s2t‚|jddgk�sFt‚| 	d| 
d¡¡ t j|d
d| d�}|jd |k�s~t‚|jddgk�s’t‚ddd	g}t j|d
| d�}d|jk�s¼t‚|jddgk�sÐt‚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 3z# a bz# comment 1z# comment 2z# comment 3r    r¡   Úcommented_header©r.   r$   r  r*   rL   )r.   Zfast_writerr   r   )r.   r  r$   rZ   éþÿÿÿr£   ri   N)r   r1   rÀ   r4   rS   r   ÚwriteÚgetvalueÚ
splitlinesÚinsertÚpop)r�  r  rª   r5   r«   r   r   r   Útest_commented_header_commentsz  sJ    
   ÿ   ÿ
r˜  c                 C   s|   ddddddddd	d
ddddgdfD ]}t |ƒdks$t‚q$ddddddd
ddddgddddggf	D ]}t |ƒdksbt‚qbd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> junkzjunk < table baz>z
 <tr foo >z
 <td bar> z</td> </tr>z</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> junkz	 <t foo >)z <! doctype htm > r™  r   rZ   r£   FN)r
   r4   )r#   Ztabl0r   r   r   Útest_probably_html¦  sD    ûïû
ñrš  c              
   C   s  ddddddgddidd	d
œgfdddddddddg	ddd
œgfddddddddgdd	d
œdd	igfg}|D ]�\}}|D ]‚}t j|fd| ddœ|—Ž}|jddgks¨t‚t|ƒdks¸t‚t |d dgk¡sÐt‚tƒ d d d | dkrît jnt j	ksxt‚qxqld S )Nz	# commentrï   rg   zskip this linerŸ   r    r  r   rZ   ©r  r¢   z 	r£   r   r¢   r,   Tr-   r*   rL   ri   ÚkwargsrI   F)
r   r1   rS   r4   r]   r§   r¨   r   rd   Z	FastBasic)r$   Ztestsrª   Zkwargs_listrœ  rF   r   r   r   Útest_data_header_startÓ  sd    ú÷÷
ôø
õæ)ÿ  ÿÿÿr�  c               	   C   s   t ƒ } t tj¡� t | ¡ W 5 Q R X t ƒ } t t¡�}tj| dddd� W 5 Q R X dt|jƒksht	‚t ƒ } tj| dddd�}|s’| 
¡ jdks–t	‚tƒ tdddd�tdddd�fD ]D}t ƒ } |  d¡ tj| f|Ž}|jd	d
gksêt	‚t|ƒdks¶t	‚q¶d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.
    Fr,   )r/   r$   r.   zNo header line foundTÚ
fast_basicr   s   a br*   rL   N)r   r0   rQ   r   ry   r1   r<  rD   r¾   r4   Zas_arrayÚsizeÚdictr“  rS   r]   )r   r‚  rF   rœ  r   r   r   Útest_table_with_no_newline  s&    ý
r¡  c                  C   sZ   t  d¡} t | ¡}t|ƒdks$t‚tt|jƒƒddddgksBt‚|d d dksVt‚d S )	NrË   rZ   rU  rV  rW  rX  r   Zhat2)	rŽ   r�   r   r1   r]   r4   Úsortedrv   r‹  )Úfpathr   r   r   r   Útest_path_object-  s
    

r¤  c               	   C   s‚   d} t  t¡�}tj| ddd� W 5 Q R X dt|jƒks<t‚t  t¡� }tjddgddd	g id
� W 5 Q R X dt|jƒks~t‚dS )zr
    Test that context information (upstream exception message) from column
    conversion error is provided.
    z| col0   |
| double |
 1  2
Fr€  )r/   r.   zColumn col0 failed to convert:rŸ   r    r,   r*   )r/   r.   r?   zno convertersN©r0   rQ   r<  r   r1   rD   r¾   r4   )r€  r‚  r   r   r   Útest_column_conversion_error6  s    $r¦  c               
   C   sÎ   t  t j¡} z¬zrt ¡ dkr,t  t jd¡ nt  t jd¡ ddddiddifD ].}tjddgd	d|d
�}|d jjdksNt	‚qNW n4 t j
k
r´ } zt d|› �¡ W 5 d}~X Y nX W 5 t  t j| ¡ X dS )zBTest code that forces "C" locale while calling fast reader (#4364)ÚDarwinÚfr_FRz
fr_FR.utf8TFr%   rŸ   z1.5 2r,   )r.   r/   r$   r*   r@   zLocale error: N)ÚlocaleÚ	setlocaleÚLC_ALLÚplatformÚsystemr   r1   r2   r3   r4   ÚErrorr0   r~   )Úcurrentr$   rF   Úer   r   r   Ú"test_non_C_locale_with_fast_readerI  s(    ü   ÿ&r±  c                  C   sP   t dggdd�} tƒ }tj| |dd� tj| ¡ ddd�}|d jdksLt‚dS )	zXTest that a char column of a Table is assigned no unit and not
    a dimensionless unit.r:   r;   rY   r€  r`   F)r.   r/   N)r   r   r   r“  r1   r”  rs  r4   )rr   r«   Út2r   r   r   Útest_no_units_for_char_columnsc  s
    r³  c                     sV   G dd„ dt jƒ‰ G ‡ fdd„dt jƒ} t j| d�}| d¡d d tjjksRt‚d	S )
z!Regression test for #5336, #5338.c                   @   s   e Zd Zdd„ ZdS )z3test_initial_column_fill_values.<locals>.TestHeaderc                 S   s,   dd„ | j D ƒ| _| jD ]}ddi|_qd S )Nc                 S   s   g | ]}t j|d �‘qS )r^  )r   ÚColumnrí   r   r   r   rò   r  s     z\test_initial_column_fill_values.<locals>.TestHeader._set_cols_from_names.<locals>.<listcomp>z--Ú0)r>   r‰   r  )Úselfr³   r   r   r   Ú_set_cols_from_namesq  s    
zHtest_initial_column_fill_values.<locals>.TestHeader._set_cols_from_namesN)Ú__name__Ú
__module__Ú__qualname__r·  r   r   r   r   Ú
TestHeaderp  s   r»  c                       s   e Zd Z” ZdS )z/test_initial_column_fill_values.<locals>.TesterN)r¸  r¹  rº  Zheader_classr   ©r»  r   r   ÚTesterw  s   r½  rH   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 r*   r   N)	r   ZBasicHeaderrd   rN   r1   r§   Úmar@  r4   )r½  rU   r   r¼  r   Útest_initial_column_fill_valuesm  s    ÿùùøÿr¿  c                  C   s^   d} t j| dd�}|jdddgks&t‚t |d ddgk¡s@t‚t |d dd	gk¡sZt‚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}
Úlatexr`   r*   rL   rJ   r+   ú3\%r°  N©r   r1   rS   r4   r§   r¨   r�  r   r   r   Ú test_latex_no_trailing_backslash‰  s
    	rÃ  c                  C   s^   d} t j| dd�}|jdddgks&t‚t |d ddgk¡s@t‚t |d dd	gk¡sZt‚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}
Zaastexr`   r*   rL   rJ   r+   rÁ  r°  rÂ  r�  r   r   r   Ú!text_aastex_no_trailing_backslashœ  s
    
rÄ  ÚencodingÚutf8Úlatin1Úcp1252c           	   
   C   s¸   dddœ}| d }|  ¡ D ]˜\}}t|d|d��}| |¡ W 5 Q R X tj||d�}| ¡ ddd	gksjt‚d
D ]B}tj||d||d�}|d jjdksšt‚| ¡ ddd	gksnt‚qnqd S )Nu   # Ã  b Ã¨ 
 1 2 hÃ©llou   Ã ,b,Ã¨
1,2,hÃ©llo)r�  r=   ztest.txtÚw)rÅ  u    Ã    b    Ã¨  z--- --- -----u     1   2 hÃ©llor…   F)r.   r$   rÅ  r/   õ   Ã¨r'   )	r�   r  r“  r   r1   rA  r4   r2   r3   )	Ztmp_pathrÅ  r   r“   ÚfmtÚcontentr@   r   r/   r   r   r   Útest_read_with_encoding­  s*    
    ÿýrÍ  c                	   C   s0   t  tj¡� tjdddddd� W 5 Q R X d S )NrÖ   Fr&   rÇ  Zfast_csv)r/   r$   rÅ  r.   )r0   rQ   r   ZParameterErrorr1   r   r   r   r   Ú#test_unsupported_read_with_encodingÅ  s    ûrÎ  c                  C   sZ  d} t j| ddd�}t| ƒ�Ì}t| ƒ�¸}| || ¡ fD ]¢}t j|ddddddd	œd
�}t|ƒ}|D ]H}t|j ¡ |j ¡ ƒD ],\}}	|j|	jks”t‚|j	j
|	j	j
ks|t‚q|qbt|ƒdks¼t‚t |¡}
t ||
k¡s6t‚q6W 5 Q R X W 5 Q R X t| ƒ�Z}t| ƒ�F}| || ¡ fD ]0}t j|ddddid�}t ||k¡�st‚�qW 5 Q R X W 5 Q R X dS )zg
    Test chunked reading for different input types: file path, file object,
    and string input.
    r  r   r£   r›  Frž  é�  T©Ú
chunk_sizeZchunk_generator)r  r¢   r/   r.   r$   rÃ   rÑ  i,  ©r  r¢   r$   N)r   r1   r  rv   rl   r‹  rn   r€   r4   r2   r3   r]   r   Úvstackr§   r¨   )r£  rr   Zfd1Úfd2ÚfpÚt_genÚtsrF   r³   rG  r²  Út3r   r   r   Útest_read_chunks_input_typesÑ  sB    ýú
(   ÿrÙ  r@  c                 C   s$  t ddd| d�}t|jƒD ]\}}| |d|d › �¡ qdD ]à}tƒ }tj|||d� tj| ¡ |d	d
dœd�}t	|ƒ}|D ]H}t
|j ¡ |j ¡ ƒD ],\}	}
|	j|
jks°t‚|	jj|
jjks˜t‚q˜q~t|ƒdksØt‚t |¡}t ||k¡sôt‚tj| ¡ |dd	id�}t ||k¡s>t‚q>dS )z?
    Test different supported formats for chunked reading.
    éf   rˆ  ZfS)rŸ  r‰   Úkindsr@  r³   r   )Útabr=   rt   Úrdbr,   r`   rÏ  TrÐ  r‘  rÃ   rÑ  N)r   rr  rS   rT   r   r   r“  r1   r”  rv   rl   r‹  rn   r€   r4   r2   r3   r]   r   rÓ  r§   r¨   )r@  rr   rA   r€   r.   r«   rÖ  r×  rF   r³   rG  r²  rØ  r   r   r   Útest_read_chunks_formatsú  s*    ý
rÞ  c               	   C   sF   d} t  t¡�}tj| ddddid� W 5 Q R X dt|jƒksBt‚d S )Nr  r   r£   rÑ  rˆ  rÒ  z1no newline found in chunk (chunk_size too small?)r¥  )r£  r‚  r   r   r   Ú%test_read_chunks_chunk_size_too_small  s     rß  c                  C   sZ   dgdgd  dgd  } d  | ¡}tj|dd�}tj|dd	id
�}t ||k¡sVt‚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 aé2   zabcdefg 555 abcr>  Frf   rÑ  éd   rz   N)rk   r   r1   r§   r¨   r4   )r³   r   rr   r²  r   r   r   Útest_read_chunks_table_changes$  s
    
râ  c                  C   sL   t jdddgdd�} t | d ddgk¡s.t‚t | d	 d
dgk¡sHt‚dS )zcTest that pure-Python reader is used in case the file contains non-ASCII characters
    in it.
    z
col1, col2u   â„™, Æ´ri  r=   r`   rG  u   â„™r+   rH  u   Æ´ra   N)r   r1   r§   r¨   r4   r   r   r   r   Útest_read_non_ascii2  s    rã  Úenablec                 C   s~   t jdt| d�d� tƒ d d d | dkr2t jnt jks>t‚tƒ D ]4}| dd	¡ d	¡sD| d¡ d
¡ d¡| ksDt‚qDdS )zHTest that fast_reader dictionary is preserved through guessing sequence.za	b
 1	2
3	 4.0)rä  rz   ri   rœ  rI   FÚstatusZDisabledr$   rä  N)	r   r1   r   r   r_  ZFastTabr4   rŒ   Ú
startswith)rä  rš   r   r   r   Útest_kwargs_dict_guess;  s    ÿ
rç  c                 C   s6   dg}| r|dg7 }|ddg7 }| r2d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                 S   s   g | ]}d   | ¡ ¡‘qS )ú	)rk   Úsplit)r™   rù   r   r   r   rò   O  s     z_get_lines.<locals>.<listcomp>r   )rÝ  rª   r   r   r   Ú
_get_linesH  s    
rê  rÝ  c                 C   s  t | ƒ}tj||d�}|jdddddgks.t‚t|ƒdks>t‚tj||dddgd�}t|ƒdksdt‚|jdddgksxt‚t |d d	d
gk¡s’t‚t |d ddgk¡s¬t‚t |d ddgk¡sÆt‚tj||dddddgddddgd�}t|ƒdksút‚|jdddgk�st‚t |d d	d
gk¡�s,t‚t |d ddgk¡�sHt‚t |d ddgk¡�sdt‚tj||dddddgddddgd�}t|ƒdk�sšt‚|jdddgk�s°t‚t |d d	d
gk¡�sÌt‚t |d ddgk¡�sèt‚t |d ddgk¡�st‚dS )zÙTest 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.
    rz   r*   Úa_2Za_1Úa_3Za_4rZ   ©r$   rÙ   r   rˆ  é   rÃ   é(   Úb1Úb2Úb3Úb4Úb5©r$   r>   rÙ   )r$   r>   rÝ   N)rê  r   r1   rS   r4   r]   r§   r¨   )rÝ  r$   rª   r5   r   r   r   Útest_deduplicate_names_basicS  s@    
ü
ürö  c                  C   s^   t dƒ} d| d< tj| ddddgd�}t|ƒd	ks6t‚|d jtksHt‚|d jtksZt‚d
S )zŸTest 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ë  rì  rí  rZ   N)rê  r   r1   r]   r4   r2   rC   r�  r   r   r   Útest_include_names_rdb_fast€  s    r÷  c              	   C   sÔ   t dƒ}d|d< tj|| dddgd�}t|ƒdks6t‚|d jjd	ksJt‚|d jjd
ks^t‚tj|| dddddgdddddgd�}t|ƒdks”t‚|jdddgks¨t‚|d jjd	ks¼t‚|d jjd
ksÐt‚dS )zªTest 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ë  rì  rí  rZ   rA   r'   rð  rñ  rò  ró  rô  Za1rõ  N)rê  r   r1   r]   r4   r2   r3   rS   )r$   rª   r5   r   r   r   Ú!test_deduplicate_names_with_typesŒ  s     ürø  c                 C   s¦   t | ƒ}| rd}nd}t t¡�$}tj|||| dddddgd� W 5 Q R X dt|jƒks\t‚t t	¡�$}tj|||| dddd	d	gd� W 5 Q R X d
t|jƒks¢t‚d	S )zY
    Test exceptions for invalid (duplicate or `None`) names specified via argument.
    rÝ  r,   rð  rñ  ró  rô  )r$   r.   r/   r>   zDuplicate column namesNz Cannot have None for column name)
rê  r0   rQ   r<  r   r1   rD   r¾   r4   r©   )rÝ  r$   rª   rË  r‚  r   r   r   Útest_set_invalid_names¥  s,    ûûrù  c                  C   sÊ   d} t j| dd�}|d }t|tƒs(t‚|jjdks8t‚|d dksHt‚dttƒgi}t j| d|d�}|d }t|tƒs|t‚|jjd	ksŒt‚t	 
|jd
d
d
dd
gk¡sªt‚t	 
|dd
dd
d
gk¡sÆt‚d S )Nz<col0 col1
1       1
0       2
True    3
""      4
False   5
r,   r`   rP  r'   r   r+   ©r.   r?   rL   FT)r   r1   Ú
isinstancer   r4   r2   r3   r	   Úboolr§   r¨   r°   )Útxtr5   r³   r?   r   r   r   Útest_read_masked_boolÆ  s    	rþ  c                  C   sX   dt  tj¡gi} t jddg| d�}t |d jtj¡s<t‚t |d jtj¡rTt‚dS )zLTest converters where the column name is specified with
    a wildcard.
    zF*z	Fabc Iabcr    r  ZFabcZIabcN)r   r	   r§   r  r1   Z
issubdtyper2   r4   )r?   rF   r   r   r   Útest_read_converters_wildcardà  s    rÿ  c               
   C   sB  t ƒ } ddg| d< ddg| d< ddg| d	< d
dg| d< ddg| d< tƒ }| j|dd� ttjdœ}t j| ¡ d|d�}|jdd�dddddgks”t	‚t
tjt
ttgdœ}t j| ¡ d|d�}|jdd�ddddd gksÚt	‚d!tdttgidttfgidtttfgifD ]6}tjtd"d#�� t j| ¡ d|d$d%�}W 5 Q R X �qd&S )'zdTest providing io.ascii read converters as type or dtypes instead of
    convert_numpy(type) outputsr   rZ   r*   g      @rÃ   rL   ÚTrueÚFalserJ   ÚtrueÚfalseÚdrƒ   é   r°  rb   r`   )r*   r°  rú  T)Z
show_dtypez  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)r*   Ú*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)r.   r?   r/   N)r   r   r“  rD   r§   r  r1   r”  rA  r4   rB   Zint64rü  Zpformat_allrC   r0   rQ   r<  )rF   r«   r?   r²  r   r   r   Útest_read_converters_simplifiedê  sJ    
û

û

û   ÿr  )N)‰r©  rŽ   r¬  ró   Úcollectionsr   Úior   r   Únumpyr§   r0   Zastropyr   Z
astropy.ior   Zastropy.io.asciir   Zastropy.io.ascii.corer	   Zastropy.io.ascii.uir
   r   Zastropy.tabler   r   Zastropy.table.table_helpersr   Zastropy.unitsr   Z"astropy.utils.compat.optional_depsr   Zastropy.utils.datar   Zastropy.utils.exceptionsr   Úcommonr   r   r   r   r   r   Zfixturer#   ÚmarkZparametrizer6   rG   rV   r_   re   rs   rw   r{   r–   r—   rž   r¬   r´   r¹   rÂ   rÇ   rÈ   rÊ   rÌ   rÍ   rÏ   rÑ   rØ   rÚ   râ   rã   rë   rø   rý   r  r  r  r  r  r  r  r   r#  r$  r%  r"  r(  r,  r5  r9  r;  r=  rC  r‹   rh  rk  rl  rw  ry  r}  r~  r  rƒ  Zxfailr…  r†  rŒ  rŽ  r˜  rš  r�  r¡  r¤  r¦  r±  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>   s0  	
þ
	
	












	



	



	
?
   

	 C
 
	
+-
8!	

)
"	
+

