U
    f/e?                     @   s  d Z ddlmZ ddlmZ ddlZddlZddlm	Z	 ddl
mZmZmZ ddlmZ dd Zd	d
 Zejddddgddggdd Zejdddgdd Zdd Zdd Zdd Zdd Zejddd d!gid"fdd#gd d!gd$d%fdd#gd d!gd&d'fgd(d) Zed*d+d,gZejd-ddd#gid.d/d0d1d2d3d4gd5d.ed6d7ed6d8ed6d9ed:d;ed<d=ed<d>gd5gd?d@ Zejd-ddd#gidd/d0d1d2d3d4gd5ded6d7ed6d8ed6d9ed:d;ed<d=ed<d>gd5gdAdB Zejd-ddd#gidd/d0d1d2d3d4gd5ded6d7ed6d8ed6d9ed:d;ed<d=ed<d>gd5gdCdD ZdEdF Z dGdH Z!dIdJ Z"dKdL Z#ejdMdNdOgdPdQ Z$ejd-i ddigdRdS Z%ejdTi dd#dd.dgfdUdVidWdXdYdZd[gfd\d d!d]d^d_gid d!d]d^d_gfgd`da Z&ejdd6d:gdbgdcdd Z'dedf Z(ejdgdheddidjdkgge)dldmdndogdpfdqeddidjdkgge)dldmdrdogdpfdseddidjdkdkgge)dldmdrdodtgdpfgdudv Z*ejdddggejdwddxdygdydxgdydzggd{d| Z+d}d~ Z,dS )zx
Tests that the file header is properly handled or inferred
during parsing for all of the parsers defined in parsers.py
    )
namedtuple)StringION)ParserError)	DataFrameIndex
MultiIndexc              	   C   s>   | }d}t jt|d td}|j|dgd W 5 Q R X d S )Nzbut only \d+ lines in filematchz,,
   header)pytestraises
ValueErrorr   read_csv)all_parsersparsermsgs r   F/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/io/parser/test_header.pytest_read_with_bad_header   s
    r   c              	   C   s8   | }d}t jtdd |jt|dd W 5 Q R X d S )N$1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
zUPassing negative integer to header is invalid. For no header, use header=None insteadr   r   r   r   r   r   r   )r   r   datar   r   r   test_negative_header   s    r   r   r         c              	   C   s8   | }d}t jtdd |jt||d W 5 Q R X d S )Nz<1,2,3,4,5
        6,7,8,9,10
        11,12,13,14,15
        z8cannot specify multi-index header with negative integersr   r   r   )r   r   r   r   r   r   r    test_negative_multi_index_header.   s     r    TFc              	   C   s<   | }d}d}t jt|d |jt||d W 5 Q R X d S )NzMyColumn
a
b
a
bz#Passing a bool to header is invalidr   r   )r   r   	TypeErrorr   r   )r   r   r   r   r   r   r   r   test_bool_header_arg<   s
    r"   c                 C   sf   | }d}|j t|dd d}tdddddgd	d
dddgdddddggdddddgd}t|| d S )Nr   ZField)prefixr      r      r               	   r
                  ZField0ZField1ZField2ZField3ZField4columnsr   r   r   tmassert_frame_equal)r   r   r   resultexpectedr   r   r   test_no_header_prefixK   s    &r7   c                 C   sf   | }d}dddg}|j t||d}tdddgd	d
dgdddggdddgdddgd}t|| d S )Nzfoo,1,2,3
bar,4,5,6
baz,7,8,9
ABCnamesr$   r   r%   r   r&   r'   r(   r)   r*   foobarbazindexr1   r2   )r   r   r   r<   r5   r6   r   r   r   test_header_with_index_colY   s    
rB   c                 C   sD   | }d}d}|j t|ddd}|j t|ddd}t|| d S )Nzggot,to,ignore,this,line
got,to,ignore,this,line
index,A,B,C,D
foo,2,3,4,5
bar,7,8,9,10
baz,12,13,14,15
z7index,A,B,C,D
foo,2,3,4,5
bar,7,8,9,10
baz,12,13,14,15
r   r   r   	index_colr   r   r3   r4   )r   r   r   Zdata2r5   r6   r   r   r   test_header_not_first_linej   s    rF   c                 C   sJ   | }t jddddd}d}|jt|ddddgddgd	}t || d S )
Nr&   r%   r   r   )Zr_idx_nlevelsZc_idx_nlevels  C0,,C_l0_g0,C_l0_g1,C_l0_g2

C1,,C_l1_g0,C_l1_g1,C_l1_g2
C2,,C_l2_g0,C_l2_g1,C_l2_g2
C3,,C_l3_g0,C_l3_g1,C_l3_g2
R0,R1,,,
R_l0_g0,R_l1_g0,R0C0,R0C1,R0C2
R_l0_g1,R_l1_g1,R1C0,R1C1,R1C2
R_l0_g2,R_l1_g2,R2C0,R2C1,R2C2
R_l0_g3,R_l1_g3,R3C0,R3C1,R3C2
R_l0_g4,R_l1_g4,R4C0,R4C1,R4C2
r   r$   rC   )r3   ZmakeCustomDataframer   r   r4   r   r   r6   r   r5   r   r   r   test_header_multi_index~   s
     rI   z
kwargs,msgrD   r=   r>   zLindex_col must only contain row numbers when specifying a multi-index headerr$   )rD   r<   z9cannot specify names when specifying a multi-index header)rD   Zusecolsz;cannot specify usecols when specifying a multi-index headerc              	   C   sH   d}| }t jt|d( |jt|fdddddgi| W 5 Q R X d S )NrG   r   r   r   r$   r   r%   r   )r   kwargsr   r   r   r   r   r   test_header_multi_index_invalid   s    rK   
_TestTuplefirstsecondrJ   r%   aqrP   rrP   r   btcurY   v)Zskiprowsr<   rP   rQ   rS   r   rV   rW   rY   rZ   r\   c                 C   sr   | }t ddddddgddd	d
ddggddgtddddddgd}d}|jt|fddi|}t|| d S )Nr$   r   r%   r   r&   r'   r(   r)   r*   r
   r+   r,   onetworO   rR   rT   rU   rX   r[   r@   zC,a,a,a,b,c,c
,q,r,s,t,u,v
,,,,,,
one,1,2,3,4,5,6
two,7,8,9,10,11,12rD   r   r   r   from_tuplesr   r   r3   r4   r   rJ   r   r6   r   r5   r   r   r   &test_header_multi_index_common_format1   s    rb   c                 C   sr   | }t ddddddgddd	d
ddggddgtddddddgd}d}|jt|fddi|}t|| d S )Nr$   r   r%   r   r&   r'   r(   r)   r*   r
   r+   r,   r]   r^   rO   rR   rT   rU   rX   r[   r@   z<,a,a,a,b,c,c
,q,r,s,t,u,v
one,1,2,3,4,5,6
two,7,8,9,10,11,12rD   r   r_   ra   r   r   r   &test_header_multi_index_common_format2   s    rc   c                 C   s~   | }t ddddddgddd	d
ddggddgtddddddgd}|jdd}d}|jt|fdd i|}t|| d S )Nr$   r   r%   r   r&   r'   r(   r)   r*   r
   r+   r,   r]   r^   rO   rR   rT   rU   rX   r[   r@   T)Zdrop2a,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12rD   )r   r   r`   Zreset_indexr   r   r3   r4   ra   r   r   r   &test_header_multi_index_common_format3  s    re   c                 C   s   | }t tjdddddgdddd	d
ggddtddgtdddgdddddggdddddgdddddggddgdd}d}|jt|ddgdd}t|| d S )Nr   r%   r   r&   r'   r)   r*   r
   r+   r,   int64Zdtyper$   r(   rP   rV   rY   rS   r   rW   rZ   r\   r   rQ   levelscodesr<   r@   rd   rC   	r   nparrayr   r   r   r   r3   r4   rH   r   r   r   0test_header_multi_index_common_format_malformed1K  s    $
	rn   c                 C   s   | }t tjdddddgdddd	d
ggddtddgtdddgdddddggdddddgdddddggd dgdd}d}|jt|ddgdd}t|| d S )Nr   r%   r   r&   r'   r)   r*   r
   r+   r,   rf   rg   r$   r(   rP   rV   rY   rS   r   rW   rZ   r\   r   rQ   rh   r@   1,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12rC   rk   rH   r   r   r   0test_header_multi_index_common_format_malformed2_  s    $

rp   c              
   C   s   | }t tjddddgddddggd	d
tddgddggddgddggdtdddgddddggddddgddddggd dgdd}d}|jt|ddgddgd}t|| d S )Nr%   r   r&   r'   r*   r
   r+   r,   rf   rg   r$   r(   r   r)   r   )ri   rj   rP   rV   rY   r   rW   rZ   r\   rQ   rh   r@   ro   rC   )r   rl   rm   r   r   r   r3   r4   rH   r   r   r   0test_header_multi_index_common_format_malformed3t  s     "	rq   c                 C   s^   | }d d gddgddgg}t ddg}t||d}d}|jt|d	dgd
}t|| d S )Nr$   r   r%   r   )rP   r8   )rV   r9   r0   za,b
A,B
,
1,2
3,4r   r   )r   r`   r   r   r   r3   r4   )r   r   r   r1   r6   r5   r   r   r   "test_header_multi_index_blank_line  s    rr   zdata,header)1,2,3
4,5,6N)zfoo,bar,baz
1,2,3
4,5,6r   c                 C   sF   | }|j tddddgd}|j t|dddg|d}t|| d S )Nrs   rP   rV   rY   r;   )r<   r   rE   )r   r   r   r   r6   r5   r   r   r   !test_header_names_backward_compat  s    rt   c                 C   s6   | }t dddgd}|jtdf|}t|| d S )NrP   rV   rY   r0   za,b,cr   r   r   r3   r4   )r   rJ   r   r6   r5   r   r   r   test_read_only_header_no_rows  s    rv   zkwargs,namesr#   XZX0ZX1ZX2ZX3ZX4r<   r?   ZquuxZpandac                 C   sb   | }d}t dddddgddd	d
dgdddddgg|d}|jt|fdd i|}t|| d S )Nr   r$   r   r%   r   r&   r'   r(   r)   r*   r
   r+   r,   r-   r.   r/   r0   r   ru   )r   rJ   r<   r   r   r6   r5   r   r   r   test_no_header  s    & rx   Zstring_headerc              	   C   s<   d}d}| }t jt|d |jt||d W 5 Q R X d S )Nz*header must be integer or list of integersz1,2
3,4r   r   r   )r   r   r   r   r   r   r   r   test_non_int_header  s
    ry   c                 C   sH   d}| }t ddgddgddgd}|jt|dgd}t|| d S )Nza,b,c
0,1,2
1,2,3r   r$   r   r%   )rP   rV   rY   r   ru   )r   r   r   r6   r5   r   r   r   test_singleton_header  s
    rz   zdata,expectedz#A,A,A,B
one,one,one,two
0,40,34,0.1(   "   g?)r8   r]   )r8   zone.1)r8   zone.2)r9   r^   r0   z%A,A,A,B
one,one,one.1,two
0,40,34,0.1)r8   zone.1.1z/A,A,A,B,B
one,one,one.1,two,two
0,40,34,0.1,0.1)r9   ztwo.1c                 C   s*   | }|j t|ddgd}t|| d S )Nr   r$   r   rE   )r   r   r6   r   r5   r   r   r   test_mangles_multi_index  s    (r}   r1    ZUnnamedZ
NotUnnamedc              	   C   s  | }ddg}|d kr,d |p"ddgd }nd dg|p>ddg d }|d krd}tjt|d |jt|||d	 W 5 Q R X n|jt|||d	}g }t|D ]2\}	}
|
sd
|d kr|	n|	d  d}
||
 qt	t
|ddg}tddgddgg|d}t|| d S )Nr   r$   ,r~   z
0,1
2,3
4,5
z
,0,1
0,2,3
1,4,5
zGPassed header=\[0,1\] are too many rows for this multi_index of columnsr   rC   z	Unnamed: Z_level_001r   r%   r   r&   r0   )joinr   r   r   r   r   	enumerateappendr   r`   zipr   r3   r4   )r   rD   r1   r   r   r   r   r5   Zexp_columnsicolr6   r   r   r   test_multi_index_unnamed  s&     r   c                 C   s   | }d}d}t dddddg}tdd	d
ddgdd	d
ddgg|d}|jt|ddgd}t||jd d  |jt|ddgd}t|| d S )NzFMale, Male, Male, Female, Female
R, R, L, R, R
.86, .67, .88, .78, .81z^Male, Male, Male, Female, Female
R, R, L, R, R
.86, .67, .88, .78, .81
.86, .67, .88, .78, .82)ZMaleR) Male R)r   z L) Femaler   )r   z R.1gQ?gq=
ףp?g)\(?g(\?gQ?g=
ףp=?r0   r   r$   r   )r   r`   r   r   r   r3   r4   Ziloc)r   r   s1s2mir6   Zdf1Zdf2r   r   r    test_read_csv_multiindex_columns/  s(    	 r   )-__doc__collectionsr   ior   Znumpyrl   r   Zpandas.errorsr   Zpandasr   r   r   Zpandas._testingZ_testingr3   r   r   markZparametrizer    r"   r7   rB   rF   rI   rK   rL   rb   rc   re   rn   rp   rq   rr   rt   rv   rx   ry   rz   r`   r}   r   r   r   r   r   r   <module>   sR  	


	






 
	
	







&
 '