U
    sVc                     @   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 ddlmZ ejdZejdeed	d	gd
d Zdd Zdd Zejddddgie
dddgdddggdddgdfdddgde
ddd ggd!d"d#gdfd$dddgde
d%d&ggd'd(gdfgd)d* Zd+d, Zejd-d.dd/dgdd0dggfd1dd2dgdd3dggfd4dd5dgdd6dggfgd7d8 Zejd9d:d;d<gd=d> Zd?d@ ZejdAi e
dBddCgifddDgdEe
dDddCgifgdFdG ZdHdI ZdJdK ZdLdM Z dNdO Z!dS )Pzj
Tests that skipped rows are properly handled during
parsing for all of the parsers defined in parsers.py
    )datetime)StringION)EmptyDataError)	DataFrameIndexZpyarrow_skipskiprows   c                 C   s|   | }d}|j t||d ddd}ttdddtdddtdddgdd	}ttd
dddddg|d}t	|| d S )Nzr#foo,a,b,c
#foo,a,b,c
#foo,a,b,c
#foo,a,b,c
#foo,a,b,c
#foo,a,b,c
1/1/2000,1.,2.,3.
1/2/2000,4,5,6
1/3/2000,7,8,9
r   Tr   headerZ	index_colZparse_dates           name      ?      $@r   r   columnsindex
read_csvr   r   r   r   npZarangeZreshapetmassert_frame_equal)all_parsersr   parsertextresultr   expected r!   H/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/io/parser/test_skiprows.pytest_skip_rows_bug   s&    
        r#   c                 C   sl   | }dd dd tdD  }dd dd dD  }|jt|dd	gd
}|t|}t|| d S )Nza,b,c

c              	   S   s0   g | ](}d  t|t|d t|d gqS ,r   r   joinstr.0ir!   r!   r"   
<listcomp>7   s     z'test_deep_skip_rows.<locals>.<listcomp>
   c              	   S   s0   g | ](}d  t|t|d t|d gqS r%   r'   r*   r!   r!   r"   r-   :   s     )r   r   r   r      r      	   r   r0   r   )r(   ranger   r   r   r   )r   r   dataZcondensed_datar   Zcondensed_resultr!   r!   r"   test_deep_skip_rows3   s    r5   c                 C   s|   | }d}|j t|dd ddd}ttdddtdddtddd	gdd
}ttdddddd	g|d}t	|| d S )Nz^#foo,a,b,c
#foo,a,b,c

#foo,a,b,c
#foo,a,b,c

1/1/2000,1.,2.,3.
1/2/2000,4,5,6
1/3/2000,7,8,9
r   r   Tr	   r   r   r   r   r   r   r   r   r   r   )r   r   r   r4   r   r    r!   r!   r"   test_skip_rows_blankB   s&    
        r6   zdata,kwargs,expectedzKid,text,num_lines
1,"line 11
line 12",2
2,"line 21
line 22",2
3,"line 31",1r   r   zline 21
line 22r   zline 31idr   	num_linesr   z+a,b,c
~a
 b~,~e
 d~,~f
 f~
1,2,~12
 13
 14~~)	quotecharr   za
 bze
 dzf
 fabczdText,url
~example
 sentence
 one~,url1
~example
 sentence
 two~,url2
~example
 sentence
 three~,url3zexample
 sentence
 twourl2Texturlc                 C   s&   | }|j t|f|}t|| d S )Nr   r   r   r   )r   r4   kwargsr    r   r   r!   r!   r"   test_skip_row_with_newline\   s    #rD   c                 C   sR   | }d}dddgdddgg}t |ddd	gd
}|jt|dgd}t|| d S )NzYid,text,num_lines
1,"line '11' line 12",2
2,"line '21' line 22",2
3,"line '31' line 32",1r   zline '21' line 22r   zline '31' line 32r   r7   r   r8   r9   r2   r   r   r   r   r   )r   r   r4   exp_datar    r   r!   r!   r"   test_skip_row_with_quote   s    rG   zdata,exp_dataz\id,text,num_lines
1,"line 
'11' line 12",2
2,"line 
'21' line 22",2
3,"line 
'31' line 32",1zline 
'21' line 22zline 
'31' line 32z\id,text,num_lines
1,"line '11
' line 12",2
2,"line '21
' line 22",2
3,"line '31
' line 32",1zline '21
' line 22zline '31
' line 32zbid,text,num_lines
1,"line '11
' 	line 12",2
2,"line '21
' 	line 22",2
3,"line '31
' 	line 32",1zline '21
' 	line 22zline '31
' 	line 32c                 C   s:   | }|j t|dgd}t|dddgd}t|| d S )Nr   r2   r7   r   r8   r9   r   r   r   r   r   )r   r4   rF   r   r   r    r!   r!   r"   $test_skip_row_with_newline_and_quote   s    rI   lineterminatorr$   z
c              	   C   s   | }d ddddg}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}|jdkr||dkr|tjjdd}|j| |d|}|j	t
|dddddddgd}t|| d S )Nr$   zSMOSMANIA ThetaProbe-ML2X z2007/01/01 01:00   0.2140 U M z2007/01/01 02:00   0.2141 M O z2007/01/01 04:00   0.2142 D M z
2007/01/01z01:00g1Zd?UMz02:00gk	g?Oz04:00gBfj?DdatetimevarflagZoflagr9   pythonrK   z+'CR' not respect with the Python parser yet)reasonr   T)r   Zdelim_whitespacenames)r(   r   ZenginepytestmarkZxfailnodeZ
add_markerreplacer   r   r   r   )r   rJ   requestr   r4   r    rX   r   r!   r!   r"   test_skiprows_lineterminator   s4    	r\   c                 C   s8   | }d}t ddgi}|jt|dd}t|| d S )Nz	a"
b"
a
1r<   r   r   r2   rE   r   r   r4   r    r   r!   r!   r"   test_skiprows_infield_quote   s
    r^   zkwargs,expected1   Zfoo)r
   rV   c                 C   s6   | }d}|j t|fddd i|}t|| d S )Na
1
2
3
4
5r   c                 S   s   | d dkS )Nr   r   r!   xr!   r!   r"   <lambda>       z)test_skip_rows_callable.<locals>.<lambda>rB   )r   rC   r    r   r4   r   r!   r!   r"   test_skip_rows_callable   s    rf   c                 C   sD   | }d}t ddgddgg}|jt|d dd d}t|| d S )	Nz0,a
1,b
2,c
3,d
4,er   r=   r   dc                 S   s   | dkS )N)r   r   r!   rb   r!   r!   r"   rd      re   z0test_skip_rows_callable_not_in.<locals>.<lambda>)r
   r   rE   r]   r!   r!   r"   test_skip_rows_callable_not_in   s      rh   c              	   C   s@   | }d}d}t jt|d |jt|dd d W 5 Q R X d S )Nra   zNo columns to parse from filematchc                 S   s   dS )NTr!   rb   r!   r!   r"   rd     re   z)test_skip_rows_skip_all.<locals>.<lambda>r2   )rW   raisesr   r   r   )r   r   r4   msgr!   r!   r"   test_skip_rows_skip_all   s
    rm   c              	   C   s@   d}| }d}t jt|d |jt|dd d W 5 Q R X d S )Nzby zerora   ri   c                 S   s   dd S )Nr   r   r!   rb   r!   r!   r"   rd     re   z-test_skip_rows_bad_callable.<locals>.<lambda>r2   )rW   rk   ZeroDivisionErrorr   r   )r   rl   r   r4   r!   r!   r"   test_skip_rows_bad_callable  s
    ro   c                 C   sT   d}| }|j t|ddddgd}tdddd	d
gdddddgd}t|| d S )Nz$a,b
1,a
2,b
3,c
4,d
5,e
6,f
7,g
8,h
r`   r   r/   r   )Znrowsr   r   r      r0   r<   r>   egh)r<   r=   rH   )r   r4   r   r   r    r!   r!   r"   test_skip_rows_and_n_rows  s
    
"rt   )"__doc__r   ior   Znumpyr   rW   Zpandas.errorsr   Zpandasr   r   Zpandas._testingZ_testingr   rX   ZusefixturesZ
pytestmarkZparametrizelistr3   r#   r5   r6   rD   rG   rI   r\   r^   rf   rh   rm   ro   rt   r!   r!   r!   r"   <module>   s   

!

	 
"

		