o
    5c6                     @  s\  d Z ddlmZ ddlZddlmZmZ ddlZddlm	Z	m
Z
 ddlmZmZmZ ddlmZ dd Zejd	g d
dd Zdd Zejdddiddigdd Zdd Zejdddgdd Zdd Zejdd	diddigd d! Zejd"d#d$gd%d& Zd'd( Zd)d* Zejd+d,d-gd.d/ Zejdg d0ejdg d1d2d3 Z ejd4ej!ej"gd5d6 Z#d7d8 Z$ejd9d:d;gejd	dd<gd=d> Z%d?d@ Z&dAdB Z'ejdCdDdE dFdE gdGdH Z(dIdJ Z)ejdCdKdE dLdE gejddMdNgdOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0dS )]z
Tests that apply specifically to the Python parser. Unless specifically
stated as a Python-specific issue, the goal is to eventually move as many of
these tests out of this module as soon as the C parser can accept further
arguments when parsing.
    )annotationsN)BytesIOStringIO)ParserErrorParserWarning)	DataFrameIndex
MultiIndexc                 C  s@   d}| }t ddgddgd}|jt|d d}t|| d S )Nzaob
1o2
3o4            absepr   read_csvr   tmassert_frame_equalpython_parser_onlydataparserexpectedresult r   d/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/io/parser/test_python_parser_only.pytest_default_separator   s
   r   
skipfooter)foog      ?Tc                 C  sR   d}| }d}t jt|d |jt||d W d    d S 1 s"w   Y  d S )Na
1
2zskipfooter must be an integermatchr    pytestraises
ValueErrorr   r   )r   r    r   r   msgr   r   r   test_invalid_skipfooter_non_int*   s   "r+   c                 C  sR   d}| }d}t jt|d |jt|dd W d    d S 1 s"w   Y  d S )Nr"   zskipfooter cannot be negativer#   r%   r&   )r   r   r   r*   r   r   r    test_invalid_skipfooter_negative5   s   "r-   kwargsr   	delimiter|c                 C  sb   d}| }|j t|fddi|}tg dg dg dgg dtg dd	d
d}t|| d S )Nz*index|A|B|C
foo|1|2|3
bar|4|5|6
baz|7|8|9
	index_colr   r
   r   r   r               	   ABCr!   barbazindexnamecolumnsrA   r   r   r   r   r   r   r   r.   r   r   r   r   r   r   r   test_sniff_delimiter?   s   rH   c                 C  s^   d}| }|j t|dd dd}tg dg dg dgg dtg d	d
dd}t|| d S )NzX# comment line
index|A|B|C
# comment line
foo|1|2|3 # ignore | this
bar|4|5|6
baz|7|8|9
r   #)r1   r   commentr2   r3   r6   r:   r>   rA   rB   rD   rF   )r   r   r   r   r   r   r   r   test_sniff_delimiter_commentP   s   rK   encodingzutf-8c                 C  s   | }d}|d urddl m} ||}t|}|||d}nt|}|j|dd d|d}tg dg dg d	gg d
tg dddd}t	|| d S )NzFignore this
ignore this too
index|A|B|C
foo|1|2|3
bar|4|5|6
baz|7|8|9
r   )TextIOWrapper)rL   r   )r1   r   skiprowsrL   r2   r3   r6   r:   r>   rA   rB   rD   )
iorM   encoder   r   r   r   r   r   r   )r   rL   r   r   rM   r   r   r   r   r   test_sniff_delimiter_encodingb   s   
rQ   c                 C  s@   | }|j tdddgd d d}tdgdgd}t|| d S )Nz1,2r   r   )namesheaderr   r
   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   test_single_line   s   rU   r   nrowsr   c                 C  sP   d}| }|j t|fi |}tg dg dg dgg dd}t|| d S )Nz>A,B,C
1,2,3
4,5,6
7,8,9
want to skip this
also also skip this
r2   r3   r6   r:   )rE   rT   rG   r   r   r   test_skipfooter   s
   "rW   zcompression,klass)gzipGzipFile)bz2BZ2Filec              	   C  s   | }t |d}| }W d    n1 sw   Y  |dd}||}t|}t||}t 2}	||	dd}
|
	| W d    n1 sKw   Y  |j|	d|d}t
|| W d    d S 1 siw   Y  d S )Nrb   ,s   ::wb)mode::)r   compression)openreadreplacer   r'   importorskipgetattrr   ensure_cleanwriter   )r   csv1ra   klassr   fr   r   modulepathtmpr   r   r   r   test_decompression_regex_sep   s   




"ro   c                 C  s`   d}| }t g dg dg dgg dtjg dg ddd	}|jt|d
d}t|| d S )Na                        A       B       C       D        E
one two three   four
a   b   10.0032 5    -0.5109 -2.3358 -0.4645  0.05076  0.3640
a   q   20      4     0.4473  1.4152  0.2834  1.00661  0.1744
x   q   30      3    -0.6662 -0.5243 -0.3580  0.89145  2.5838)gEJYgr鷯g|?5^ݿg6?gK?)g-?gT?g9#?g9]?g46<R?)gQg^)gxֿgI&?g=U@)r;   r<   r=   DE))r   r   gı.n$@r4   )r   q   r   )xrr      r   )onetwothreefour)rR   rD   \s+r   )r   r	   from_tuplesr   r   r   r   r   r   r   r   #test_read_csv_buglet_4x_multi_index   s   r|   c                 C  sF   d}| }t jddgtdtdd}|jt|dd}t|| d S )	Nz)      A B C
a b c
1 3 7 0 3 6
3 1 4 1 5 9)r
   r   r7   r   r   r5   )r   r
   r   r
   r4   r9   abcABCabcrD   rz   r   )r   from_recordslistr   r   r   r   r   r   r   r   $test_read_csv_buglet_4x_multi_index2   s   r   
add_footerTFc                 C  s`   d}| }t dddgi}|rddi}|d7 }ni }|jt|fdgdd	|}t|| d S )
Nz1#2
3#4r   g333333?g333333@r    r
   z
FooterrI   )rR   decimalr   )r   r   r   r   r   r.   r   r   r   r   test_skipfooter_with_decimal   s   
r   )r`   z#####z!!!123z#1!c5z%!c!dz@@#4:2z_!pd#_)zutf-16z	utf-16-bez	utf-16-lezutf-32cp037c                 C  sV   t dgdgd}| }d| d }||}|jt||ddg|d}t|| d S )	Nr
   r   r   12r   r   )r   rR   rL   )r   rP   r   r   r   r   )r   r   rL   r   r   r   encoded_datar   r   r   r   $test_encoding_non_utf8_multichar_sep   s   
r   quotingc                 C  s   ddi}| }d}|t jkr6d}tjt|d |jt|fd|i| W d    d S 1 s/w   Y  d S d}tjt|d |jt|fd|i| W d    d S 1 sXw   Y  d S )Nr   z,,za,,b
1,,a
2,,"2,,b"z"Expected 2 fields in line 3, saw 3r#   r   z+ignored when a multi-char delimiter is used)csv
QUOTE_NONEr'   r(   r   r   r   )r   r   r.   r   r   r*   r   r   r   test_multi_char_sep_quotes   s   
""r   c                 C  s`   | }d}t ddgddgddgd}|jt|dd d	d
}t|| | }d|jv s.J d S )Nza,b,c
0,1,2
3,4,5,6
7,8,9r   r7   r
   r8   r   r9   )r   r   cwarn)rS   r   on_bad_lineszSkipping line 3)r   r   r   r   r   
readouterrerr)r   capsysr   r   r   r   capturedr   r   r   test_none_delimiter  s   r   r   za
1
"b"aza,b,c
cat,foo,bar
dog,foo,"bazr
   c                 C  s   | }|r)d}t jt|d |jt||d W d    d S 1 s"w   Y  d S d}t jt|d |jt||d W d    d S 1 sGw   Y  d S )Nz)parsing errors in the skipped footer rowsr#   r%   z%unexpected end of data|expected afterr'   r(   r   r   r   )r   r   r    r   r*   r   r   r   test_skipfooter_bad_row!  s   ""r   c                 C  sV   | }d}d}t jt|d |jt|dddd W d    d S 1 s$w   Y  d S )Nz4ignore
A,B,C
1,2,3 # comment
1,2,3,4,5
2,3,4
footer
z"Expected 3 fields in line 4, saw 5r#   r
   rI   )rS   rJ   r    r   )r   r   r   r*   r   r   r   test_malformed_skipfooter0  s   "r   c                 C  s$   | }G dd d}| |d d S )Nc                   @  s.   e Zd ZdddZdd Zdd Zd	d
 ZdS )z5test_python_engine_file_no_next.<locals>.NoNextBufferreturnNonec                 S  s
   || _ d S Nr   )selfcsv_datar   r   r   __init__B     
z>test_python_engine_file_no_next.<locals>.NoNextBuffer.__init__c                 S  s
   | j  S r   )r   __iter__r   r   r   r   r   E  r   z>test_python_engine_file_no_next.<locals>.NoNextBuffer.__iter__c                 S     | j S r   r   r   r   r   r   rc   H     z:test_python_engine_file_no_next.<locals>.NoNextBuffer.readc                 S  r   r   r   r   r   r   r   readlineK  r   z>test_python_engine_file_no_next.<locals>.NoNextBuffer.readlineN)r   r   )__name__
__module____qualname__r   r   rc   r   r   r   r   r   NoNextBufferA  s
    
r   za
1)r   )r   r   r   r   r   r   test_python_engine_file_no_next>  s   r   bad_line_funcc                 C     ddgS Nr   3r   rt   r   r   r   <lambda>Q      r   c                 C     | d d S Nr   r   r   r   r   r   r   Q      c                 C  sD   | }d}t |}|j||d}tg dg dd}t|| d S )Na,b
1,2
2,3,4,5,6
3,4
r   r2   r   r   r   r   r   r   r   r   r   )r   r   r   r   bad_sior   r   r   r   r   test_on_bad_lines_callableQ  s   r   c                   sh   | }d}t |}g  d fdd}|j||d}tg dg d	d
}t||  g dgks2J d S )Nr   bad_line	list[str]r   c                   s     |  ddgS r   )appendr   lstr   r   r   k  s   
zHtest_on_bad_lines_callable_write_to_external_list.<locals>.bad_line_funcr   r2   r   r   )r   r   456)r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   1test_on_bad_lines_callable_write_to_external_list`  s   r   c                 C  r   )Nr!   r?   r   r   r   r   r   r   u  r   c                 C  r   r   r   r   r   r   r   r   u  r   ,111c                 C  s   | }d| d| d| d| d| d}t |}|j||dd|d	}d
ddddddddg}tt||D ]\}\}	}
t|
t||d d}
t|	|
 q7d S )Nz
0z1
hiz	there
foor?   zbaz
goodzbye
r
   T)r   	chunksizeiteratorr   hithere)0r   r!   goodbyerA   )r   r   	enumeratezipr   ranger   r   )r   r   r   r   r   r   result_iter	expectedsir   r   r   r   r   (test_on_bad_lines_callable_iterator_trueu  s0   
r   c                   sb   | }d}t |}d  fdd}tjt d |j||d W d    d S 1 s*w   Y  d S )Nr   zThis function is buggy.c                   s   t  r   )r)   r   r*   r   r   r     s   zEtest_on_bad_lines_callable_dont_swallow_errors.<locals>.bad_line_funcr#   r   )r   r'   r(   r)   r   )r   r   r   r   r   r   r   r   .test_on_bad_lines_callable_dont_swallow_errors  s   "r   c                 C  sL   | }d}t |}|jtd|dd d}tg dg dd}t|| d S )	Nr   zLength of header or namesc                 S  s   | S r   r   r   r   r   r   r         z@test_on_bad_lines_callable_not_expected_length.<locals>.<lambda>r   r2   r   r   r   read_csv_check_warningsr   r   r   r   r   r   r   r   r   r   r   r   r   .test_on_bad_lines_callable_not_expected_length  s   r   c                 C  sH   | }d}t |}|j|dd d}tddgddgd	}t|| d S )
Nr   c                 S  s   d S r   r   r   r   r   r   r     r   z9test_on_bad_lines_callable_returns_none.<locals>.<lambda>r   r
   r   r   r   r   r   r   r   r   r   'test_on_bad_lines_callable_returns_none  s   r   c                 C  sP   | }d}t |}|j|dd d}tddgddgd	d
dgd}t|| d S )Nza,b
1,2,3
4,5,6
c                 S  s   ddgS )N99r   r   r   r   r   r     r   z6test_on_bad_lines_index_col_inferred.<locals>.<lambda>r   r   r4   r   r5   r   r
   r   r   r   r   r   r   r   $test_on_bad_lines_index_col_inferred  s   r   c                 C  sH   | }d}|j tdt|dd dd}tddgdd	gd
}t|| d S )Nz
0.5,0.03
0.1,0.2,0.3,2
Length of headerr   F)r   rS   r1   g      ?g?gQ?g?)r   r
   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   $test_index_col_false_and_header_none  s   r   c                 C  s@   | }t d}|jtd|ddd}tdg di}t|| d S )Nza
a,b
c,d,e
f,g,hr   pythonF)enginer1   r   )r   r   rk   r   r   r   r   r   ?test_header_int_do_not_infer_multiindex_names_on_different_line  s   
r   )1__doc__
__future__r   r   rO   r   r   r'   pandas.errorsr   r   pandasr   r   r	   pandas._testing_testingr   r   markparametrizer+   r-   rH   rK   rQ   rU   rW   ro   r|   r   r   r   QUOTE_MINIMALr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sn    




	




