o
    g?                     @   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g d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,g d-d.d,ed/d0ed/d1ed/d2ed3d4ed5d6ed5d7gd.gd8d9 Zejd+ddd!gid:g d-d.d:ed/d0ed/d1ed/d2ed3d4ed5d6ed5d7gd.gd;d< Zejd+ddd!gid:g d-d.d:ed/d0ed/d1ed/d2ed3d4ed5d6ed5d7gd.gd=d> Zd?d@ Z dAdB Z!dCdD Z"dEdF Z#ejdGdHdIgdJdK Z$ejd+i ddigdLdM Z%ejdNi g dOfdPdQig dRfdSg dTig dTfgdUdV Z&ejdd/d3gdWgdXdY Z'dZd[ Z(ejd\d]eg d^ge)g d_d`fdaeg d^ge)g dbd`fdceg ddge)g ded`fgdfdg Z*ejdddggejdhddidjgdjdigdjdkggdldm Z+dndo Z,dS )pzx
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   sT   | }d}t jt|d td}|j|dgd W d    d S 1 s#w   Y  d S )Nzbut only \d+ lines in filematchz,,
   header)pytestraises
ValueErrorr   read_csv)all_parsersparsermsgs r   `/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/tests/io/parser/test_header.pytest_read_with_bad_header   s   "r   c                 C   sN   | }d}t jtdd |jt|dd W d    d S 1 s w   Y  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   sN   | }d}t jtdd |jt||d W d    d S 1 s w   Y  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   sR   | }d}d}t jt|d |jt||d W d    d S 1 s"w   Y  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   sN   | }d}|j t|dd d}tg dg dg dgg dd}t|| d S )	Nr   Field)prefixr      r      r               	   r
                  )Field0Field1Field2Field3Field4columnsr   r   r   tmassert_frame_equal)r   r   r   resultexpectedr   r   r   test_no_header_prefixK   s   r@   c                 C   sZ   | }d}g d}|j t||d}tg dg dg dgg dg dd}t|| d S )	Nzfoo,1,2,3
bar,4,5,6
baz,7,8,9
)ABCnames)r&   r   r'   )r   r(   r*   )r+   r,   r-   )foobarbazindexr:   r;   )r   r   r   rE   r>   r?   r   r   r   test_header_with_index_colY   s   rK   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   r<   r=   )r   r   r   data2r>   r?   r   r   r   test_header_not_first_linej   s   rP   c                 C   sF   | }t jddddd}d}|jt|g ddd	gd
}t || d S )Nr(   r'   r   r   )r_idx_nlevels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&   r   r'   r   r&   rL   )r<   makeCustomDataframer   r   r=   r   r   r?   r   r>   r   r   r   test_header_multi_index~   s
   rW   z
kwargs,msgrM   rF   rG   zLindex_col must only contain row numbers when specifying a multi-index headerr&   )rM   rE   z9cannot specify names when specifying a multi-index header)rM   usecolsz;cannot specify usecols when specifying a multi-index headerc                 C   sZ   d}| }t jt|d |jt|fdg di| W d    d S 1 s&w   Y  d S )NrS   r   r   rT   r   )r   kwargsr   r   r   r   r   r   test_header_multi_index_invalid   s
    "rZ   
_TestTuplefirstsecondrY   r'   )aq)r_   r)r_   r   )bt)cu)rd   v)skiprowsrE   r_   r`   ra   r   rb   rc   rd   re   rf   c                 C   Z   | }t g dg dgddgtg dd}d}|jt|fdd	i|}t|| d S )
Nr&   r   r'   r   r(   r*   r+   r,   r-   r
   r/   r0   onetwor^   rI   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,12rM   r   r   r   from_tuplesr   r   r<   r=   r   rY   r   r?   r   r>   r   r   r   &test_header_multi_index_common_format1   s   rp   r   c                 C   rh   )
Nri   rj   rk   rl   r^   rI   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,12rM   r   rm   ro   r   r   r   &test_header_multi_index_common_format2   s   rq   c                 C   sf   | }t g dg dgddgtg dd}|jdd}d	}|jt|fd
d i|}t|| d S )Nri   rj   rk   rl   r^   rI   T)drop2a,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12rM   )r   r   rn   reset_indexr   r   r<   r=   ro   r   r   r   &test_header_multi_index_common_format3  s   ru   c                 C   s   | }t tjg dg dgddtddgtg dg dgg d	g d
gddgdd}d}|jt|ddgdd}t|| d S )Nr   r'   r   r(   r*   r,   r-   r
   r/   r0   int64dtyper&   r+   r_   rb   rd   ra   r   rc   re   rf   r   r   r&   r   r   r   r&   r   r'   r   r_   r`   levelscodesrE   rI   rs   r   rL   	r   nparrayr   r   r   r   r<   r=   rV   r   r   r   0test_header_multi_index_common_format_malformed1K  s   
	r   c                 C   s   | }t tjg dg dgddtddgtg dg dgg d	g d
gd dgdd}d}|jt|ddgdd}t|| d S )Nrv   rw   rx   ry   r&   r+   r{   r|   r}   r~   r`   r   rI   1,a,a,b,c,c
q,r,s,t,u,v
1,2,3,4,5,6
7,8,9,10,11,12r   rL   r   rV   r   r   r   0test_header_multi_index_common_format_malformed2_  s   

r   c                 C   s   | }t tjg dg dgddtddgddggd	dgd	dggd
tg dg dgg dg dgd dgdd}d}|jt|d	dgd	dgd}t|| d S )N)r'   r   r(   r*   )r-   r
   r/   r0   rx   ry   r&   r+   r   r,   r   )r   r   r{   )r   rc   re   rf   )r   r&   r   r   rT   r`   r   rI   r   rL   )r   r   r   r   r   r   r<   r=   rV   r   r   r   0test_header_multi_index_common_format_malformed3t  s   "	r   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   )r_   rA   )rb   rB   r9   za,b
A,B
,
1,2
3,4r   r   )r   rn   r   r   r   r<   r=   )r   r   r   r:   r?   r>   r   r   r   "test_header_multi_index_blank_line  s   r   zdata,header)1,2,3
4,5,6N)zfoo,bar,baz
1,2,3
4,5,6r   c                 C   sB   | }|j tdg dd}|j t|g d|d}t|| d S )Nr   r{   rD   )rE   r   rN   )r   r   r   r   r?   r>   r   r   r   !test_header_names_backward_compat  s   r   c                 C   s8   | }t g dd}|jtdfi |}t|| d S )Nr{   r9   za,b,cr   r   r   r<   r=   )r   rY   r   r?   r>   r   r   r   test_read_only_header_no_rows  s   r   zkwargs,namesr~   r$   X)X0X1X2X3X4rE   )rF   rG   rH   quuxpandac                 C   sP   | }d}t g dg dg dg|d}|jt|fdd i|}t|| d S )Nr   r%   r)   r.   r9   r   r   )r   rY   rE   r   r   r?   r>   r   r   r   test_no_header  s   r   string_headerc                 C   sR   d}d}| }t jt|d |jt||d W d    d S 1 s"w   Y  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   "r   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'   r{   r   r   )r   r   r   r?   r>   r   r   r   test_singleton_header  s
   r   zdata,expectedz#A,A,A,B
one,one,one,two
0,40,34,0.1)r   (   "   皙?)rA   rk   rA   zone.1)rA   zone.2rB   rl   r9   z%A,A,A,B
one,one,one.1,two
0,40,34,0.1)r   r   rA   zone.1.1r   z/A,A,A,B,B
one,one,one.1,two,two
0,40,34,0.1,0.1)r   r   r   r   r   )r   r   r   r   )rB   ztwo.1c                 C   s*   | }|j t|ddgd}t|| d S )Nr   r&   r   rN   )r   r   r?   r   r>   r   r   r   test_mangles_multi_index  s   (r   r:    Unnamed
NotUnnamedc                 C   s,  | }ddg}|d u rd |pddgd }nd dg|pddg d }|d u rNd}tjt|d |jt|||d	 W d    d S 1 sGw   Y  d S |jt|||d	}g }t|D ]\}	}
|
srd
|d u rk|	n|	d  d}
||
 q^t	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   rL   z	Unnamed: _level_001r   r'   r   r(   r9   )joinr   r   r   r   r   	enumerateappendr   rn   zipr   r<   r=   )r   rM   r:   r   r   r   r   r>   exp_columnsicolr?   r   r   r   test_multi_index_unnamed  s(   "r   c                 C   s   | }d}d}t g d}tg dg d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))MaleR) Male R)r   z L) Femaler   )r   z R.1)Q?q=
ףp?)\(?(\?gQ?)r   r   r   r   g=
ףp=?r9   r   r&   r   )r   rn   r   r   r   r<   r=   iloc)r   r   s1s2mir?   df1df2r   r   r    test_read_csv_multiindex_columns/  s   	r   )-__doc__collectionsr   ior   numpyr   r   pandas.errorsr   pandasr   r   r   pandas._testing_testingr<   r   r   markparametrizer    r"   r@   rK   rP   rW   rZ   r[   rp   rq   ru   r   r   r   r   r   r   r   r   r   rn   r   r   r   r   r   r   r   <module>   s"   	


	







	
	








&'