o
    5³c*U  ć                	   @   sd  d Z ddlmZmZmZ ddlZddlZddlZddlZ	ddl
Z
ddlmZmZ ddlmZ ddlm  mZ ddlmZmZ ddlmZ e
jjdg d¢g d	¢d
dd Zdd Zdd Zdd Ze
jjddddddifdddddgdfdddddifdej  dddd iifgd!d"d#ej  d gd
d$d% Z!ej"e
jj#d&d' Z$d(d) Z%d*d+ Z&d,d- Z'd.d/ Z(d0d1 Z)e
jj#d2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dDdE Z3e
j dFdGdHg”dIdJ Z4e
jj5e
jj6e dKdLdMdN Z7dOdP Z8dQdR Z9dSdT Z:dUdV Z;e
j dWg dX¢”e
j dYdZd[g”d\d] Z<d^d_ Z=dS )`zų
Tests that apply specifically to the CParser. Unless specifically stated
as a CParser-specific issue, the goal is to eventually move as many of
these tests out of this module as soon as the Python parser can accept
further arguments when parsing.
é    )ŚBytesIOŚStringIOŚTextIOWrapperN)ŚIS64Śis_ci_environment)ŚParserError)Ś	DataFrameŚconcatŚ	malformed)z111 1 1z111 1 111z111 1 1111)zwords pointerzstream pointerzlines pointer)Śidsc                 C   sJ   d}| }t jt|d | t|” W d    d S 1 sw   Y  d S )Nz7Buffer overflow caught - possible malformed input file.©Śmatch)ŚpytestŚraisesr   Śread_csvr   )Śc_parser_onlyr
   ŚmsgŚparser© r   ś_/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/io/parser/test_c_parser_only.pyŚtest_buffer_overflow"   s
   "’r   c              	   C   sH   d}| }t dD ]}z|jtdt|ddd W q ty!   Y qw d S )NuV  Ā      Ć­ĆA	   Ā±Ā·Ā¶ĀŗĆ¾Ā„Ć!lĀ°Ā¦MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU}Ć· ĀĆ GĀ8 Ā VTĀV Ć­]ĆÆOéd   zCcompression has no effect when passing a non-binary object as inputŚgzipT)ŚcompressionŚdelim_whitespace)ŚrangeŚread_csv_check_warningsŚRuntimeWarningr   Ś	Exception)r   Śdatar   Ś_r   r   r   Śtest_buffer_rd_bytes1   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 )
Nza b c~1 2 3~4 5 6~7 8 9ś~T)Ślineterminatorr   ©é   é   é   ©é   é   é   ©é   é   é	   ©ŚaŚbŚc©Ścolumns©r   r   r   ŚtmŚassert_frame_equal)r   r   r   ŚdfŚexpectedr   r   r   Ś'test_delim_whitespace_custom_terminatorK   s
   "r;   c                 C   sH  | }d}|j t|dd d}tddgddgdd	gg}t ||” |j t|dd d
dgd}tddgddgdd	ggd
dgd}t ||” |j t|dd d
dgd
tjid}tddgddgd	d	ggd
dgd}|d
  tj”|d
< t ||” d}tj	t
dd |j t|dd d
dgd
tjid W d    d S 1 sw   Y  d S )Nz
1.0 1
2.0 2
3.0 3
ś\s+)ŚsepŚheaderē      š?r%   ē       @r&   g      @r'   r1   r2   )r=   r>   Śnamesr4   )r=   r>   rA   Śdtypez
1.0 1
nan 2
3.0 3
zcannot safely convertr   )r   r   r   r7   r8   ŚnpŚint32Śastyper   r   Ś
ValueError©r   r   r   Śresultr:   r   r   r   Śtest_dtype_and_names_errorU   s0   "’"ū"’rI   zmatch,kwargsz]the dtype datetime64 is not supported for parsing, pass this column using parse_dates insteadrB   Ś
datetime64Śfloat64)ŚAŚBrM   )rB   Śparse_datesz2the dtype timedelta64 is not supported for parsingŚtimedelta64z
the dtype zU8 is not supported for parsingrL   ŚU8zdt64-0zdt64-1Śtd64c              	   C   s²   | }t tj dd”tdg d¢d}t d”8}| |” tj	t
|d |j|fdd	i|¤ W d    n1 s:w   Y  W d    d S W d    d S 1 sRw   Y  d S )
Nr*   r&   ŚAB)Ś1AŚ1BŚ1CŚ1DŚ1E)r5   Śindexz__unsupported_dtype__.csvr   Ś	index_colr   )r   rC   ŚrandomŚrandŚlistr7   Śensure_cleanŚto_csvr   r   Ś	TypeErrorr   )r   r   Śkwargsr   r9   Śpathr   r   r   Śtest_unsupported_dtype   s   ’
’ż"żrb   c           
         s  ddl m  | }g }g }tjddddD ]^}d|d}t|jt|d	d
d d }t|jt|dd
d d }t|jt|dd
d d } |dd   fdd}	| |	|” | |	|” |t|dd  ksrJ qt|t|ks}J t	|t	|ksJ d S )Nr   )ŚDecimalr?   r@   iō  )Śnumza
z.25Ślegacy©Śfloat_precisionr1   ŚhighŚ
round_tripr&   c                    s   t  | d S )Nz.100)Śabs)Śval©rc   Ś
actual_valr   r   ŚerrorĆ   s   z&test_precise_conversion.<locals>.error)
Śdecimalrc   rC   ŚlinspaceŚfloatr   r   ŚappendŚsumŚmax)
r   r   Śnormal_errorsŚprecise_errorsrd   ŚtextŚ
normal_valŚprecise_valŚroundtrip_valrn   r   rl   r   Śtest_precise_conversion©   s,   ’’’r{   c              	   C   s   | }d}|j t|ddd dtittdd}|j t|ddd dtittdd}|jtttgk ” s4J |jttgk ” s?J d S )Nz1,2,3
4,5,6
7,8,9
10,11,12)r   r%   r&   r0   r1   )r2   r3   )ŚusecolsrA   r>   Ś
convertersrB   )r   r&   )r   r   ŚstrŚintrq   ŚdtypesŚobjectŚall)r   r   r   rH   Śresult2r   r   r   Śtest_usecols_dtypesŠ   s(   śś	r   c                 C   sX   | }d}|j t|td}|jtk ” sJ |j t|tdd}|d d dks*J d S )Nz-A,B,C
Yes,No,Yes
No,Yes,Yes
Yes,,Yes
No,No,No)rB   F)rB   Ś	na_filterrM   r&   Ś )r   r   r   r   r   )r   r   r   rH   r   r   r   Śtest_disable_bool_parsingķ   s   r   c                 C   s@   | }d}|j t|dd}|  t| dd””}t ||” d S )Nza,b,c~1,2,3~4,5,6r"   )r#   Ś
©r   r   Śreplacer7   r8   rG   r   r   r   Śtest_custom_lineterminatorž   s
   r   c                 C   s   | }d}d}|j t|d g d¢d}|j t|d g d¢d}t ||” d}|j t|d tdd}|j t|d tddjtdd}t ||” d S )	Nz#1,2,3
1,2,3,4
1,2,3,4,5
1,2
1,2,3,4z*1,2,3,,
1,2,3,4,
1,2,3,4,5
1,2,,,
1,2,3,4,)r1   r2   r3   ŚdŚe)r>   rA   z	1,2
3,4,5é2   r'   r4   )r   r   r7   r8   r   Śreindex)r   r   r   Ś	nice_datarH   r:   r   r   r   Śtest_parse_ragged_csv  s    ’’’r   c                 C   st   | }d}|j t|d d}|j t| dd”d d}t ||” |  t|”}|  t| dd””}t ||” d S )Nz a,b,c"a,b","e,d","f,f"©r>   śr   r   rG   r   r   r   Śtest_tokenize_CR_with_quoting*  s   r   c                    s,   |   fdd}t ddD ]}|| qd S )Nc                    sb   t d|  }tdd t| d D d}  |”}W d    n1 s$w   Y  t ||” d S )Nś,c                 S   s   g | ]}d | qS )z	Unnamed: r   ©Ś.0Śir   r   r   Ś
<listcomp>F  s    zMtest_grow_boundary_at_cap.<locals>.test_empty_header_read.<locals>.<listcomp>r%   r4   )r   r   r   r   r7   r8   )ŚcountŚsr:   r9   ©r   r   r   Śtest_empty_header_readD  s
   žz9test_grow_boundary_at_cap.<locals>.test_empty_header_readr%   ée   )r   )r   r   Ścntr   r   r   Śtest_grow_boundary_at_cap8  s
   

’r    c           	         s  | }d}d\}}d  |g| ”d }tdd | d”D  t fddt|D td d d	}|jt|d t|d
}t|ddd}W d    n1 sLw   Y  t	 
||” |jt|d t|dd}t|ddd}W d    n1 suw   Y  t	 
||” d S )Na  9999-9,99:99,,,,ZZ,ZZ,,,ZZZ-ZZZZ,.Z-ZZZZ,-9.99,,,9.99,ZZZZZ,,-99,9,ZZZ-ZZZZ,ZZ-ZZZZ,,9.99,ZZZ-ZZZZZ,ZZZ-ZZZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,999,ZZZ-ZZZZ,,ZZ-ZZZZ,,,,,ZZZZ,ZZZ-ZZZZZ,ZZZ-ZZZZ,,,9,9,9,9,99,99,999,999,ZZZZZ,ZZZ-ZZZZZ,ZZZ-ZZZZ,9,ZZ-ZZZZ,9.99,ZZ-ZZZZ,ZZ-ZZZZ,,,,ZZZZ,,,ZZ,ZZ,,,,,,,,,,,,,9,,,999.99,999.99,,,ZZZZZ,,,Z9,,,,,,,ZZZ,ZZZ,,,,,,,,,,,ZZZZZ,ZZZZZ,ZZZ-ZZZZZZ,ZZZ-ZZZZZZ,ZZ-ZZZZ,ZZ-ZZZZ,ZZ-ZZZZ,ZZ-ZZZZ,,,999999,999999,ZZZ,ZZZ,,,ZZZ,ZZZ,999.99,999.99,,,,ZZZ-ZZZ,ZZZ-ZZZ,-9.99,-9.99,9,9,,99,,9.99,9.99,9,9,9.99,9.99,,,,9.99,9.99,,99,,99,9.99,9.99,,,ZZZ,ZZZ,,999.99,,999.99,ZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,,,ZZZZZ,ZZZZZ,ZZZ,ZZZ,9,9,,,,,,ZZZ-ZZZZ,ZZZ999Z,,,999.99,,999.99,ZZZ-ZZZZ,,,9.999,9.999,9.999,9.999,-9.999,-9.999,-9.999,-9.999,9.999,9.999,9.999,9.999,9.999,9.999,9.999,9.999,99999,ZZZ-ZZZZ,,9.99,ZZZ,,,,,,,,ZZZ,,,,,9,,,,9,,,,,,,,,,ZZZ-ZZZZ,ZZZ-ZZZZ,,ZZZZZ,ZZZZZ,ZZZZZ,ZZZZZ,,,9.99,,ZZ-ZZZZ,ZZ-ZZZZ,ZZ,999,,,,ZZ-ZZZZ,ZZZ,ZZZ,ZZZ-ZZZZ,ZZZ-ZZZZ,,,99.99,99.99,,,9.99,9.99,9.99,9.99,ZZZ-ZZZZ,,,ZZZ-ZZZZZ,,,,,-9.99,-9.99,-9.99,-9.99,,,,,,,,,ZZZ-ZZZZ,,9,9.99,9.99,99ZZ,,-9.99,-9.99,ZZZ-ZZZZ,,,,,,,ZZZ-ZZZZ,9.99,9.99,9999,,,,,,,,,,-9.9,Z/Z-ZZZZ,999.99,9.99,,999.99,ZZ-ZZZZ,ZZ-ZZZZ,9.99,9.99,9.99,9.99,9.99,9.99,,ZZZ-ZZZZZ,ZZZ-ZZZZZ,ZZZ-ZZZZZ,ZZZ-ZZZZZ,ZZZ-ZZZZZ,ZZZ,ZZZ,ZZZ,ZZZ,9.99,,,-9.99,ZZ-ZZZZ,-999.99,,-9999,,999.99,,,,999.99,99.99,,,ZZ-ZZZZZZZZ,ZZ-ZZZZ-ZZZZZZZ,,,,ZZ-ZZ-ZZZZZZZZ,ZZZZZZZZ,ZZZ-ZZZZ,9999,999.99,ZZZ-ZZZZ,-9.99,-9.99,ZZZ-ZZZZ,99:99:99,,99,99,,9.99,,-99.99,,,,,,9.99,ZZZ-ZZZZ,-9.99,-9.99,9.99,9.99,,ZZZ,,,,,,,ZZZ,ZZZ,,,,,)é   i  r   c                 s   s    | ]
}|r|nt jV  qd S )N)rC   Śnan)r   Śval_r   r   r   Ś	<genexpr>  s    z*test_parse_trim_buffers.<locals>.<genexpr>r   c                    s   g | ]} qS r   r   ©r   r    ©Śrowr   r   r     ó    z+test_parse_trim_buffers.<locals>.<listcomp>)rB   r5   rX   )r>   rB   Ś	chunksizer   T)ŚaxisŚignore_indexŚutf_8)r>   rB   r©   Śencoding)ŚjoinŚtupleŚsplitr   r   r   r   r   r	   r7   r8   )	r   r   Śrecord_r©   Śn_linesŚcsv_datar:   Śchunks_rH   r   r¦   r   Śtest_parse_trim_buffersN  s6   ’$’’żūłrµ   c                 C   sT   | }g d¢}d}t g d¢dtjdgg d¢g|d}|jt||d}t ||” d S )	Nr0   z1,2,3
4, ,6
7,8,9)r%   r@   r'   r)   r+   r,   r4   )rA   )r   rC   r¢   r   r   r7   r8   )r   r   rA   r   r:   rH   r   r   r   Śtest_internal_null_byte¦  s   
"r¶   c                 C   s²   | }d  dd tdD ”d }d  dd tdD ”d }d  dd tdD ”d }d  d	d tdD ”d }||d
  | |d  }|jt|ddd}|jdksWJ d S )Nś	c                 S   ó   g | ]}d t | qS ©ŚCOL_HEADER_©r~   r   r   r   r   r   ½  ó    z)test_read_nrows_large.<locals>.<listcomp>é
   r   c                 S   ó   g | ]}d qS )Śsomedatasomedatasomedata1r   r„   r   r   r   r   ¾  rØ   c                 S   rø   r¹   r»   r   r   r   r   r   æ  r¼   é   c                 S   r¾   )Śsomedatasomedatasomedata2r   r„   r   r   r   r   Ą  rØ   i  r&   iņ  )r=   Śnrowsit'  )r®   r   r   r   Śsize)r   r   Śheader_narrowŚdata_narrowŚheader_wideŚ	data_wideŚ
test_inputr9   r   r   r   Śtest_read_nrows_largeŗ  s   rÉ   c                 C   s2   | }|j tdd dd}t |tddgi” d S )Nr1   ri   )r>   rg   r   )r   r   r7   r8   r   )r   r   r9   r   r   r   Ś)test_float_precision_round_trip_with_textČ  s   rŹ   c           	      C   sv   | }d}d| d d d }d}||d  d d }|j t|d dgd}| d”}td	d
 |D }t ||” d S )Ni'  zX,é’’’’r   zXXXXXX XXXXXX,111111111111111
r+   r   )r>   r|   c                 S   s   g | ]	}|  d ”d qS )r   r   )r°   )r   r§   r   r   r   r   Ū  s    z4test_large_difference_in_columns.<locals>.<listcomp>)r   r   r°   r   r7   r8   )	r   r   r   Ś	large_rowŚ
normal_rowrČ   rH   Śrowsr:   r   r   r   Ś test_large_difference_in_columnsĻ  s   
rĻ   c                 C   s6   | }d}|  t|”}tdddgi}t ||” d S )Nza
1
"b"ar1   Ś1Śbar6   rG   r   r   r   Śtest_data_after_quoteß  s
   rŅ   c                 C   s   | }d}|j t|dd dddd}| ” }dD ]}d| |jv s#J qtd	d
gdd
gdd
gdtjgdtjgg}t ||” d S )Nz1 2
2 2 3
3 2 3 # 3 fields
4 2 3# 3 fields
5 2 # 2 fields
6 2# 2 fields
7 # 1 field, NaN
8# 1 field, NaN
9 2 3 # skipped line
# commentś#r<   r   Śwarn)Ścommentr>   Ś	delimiterŚskiprowsŚon_bad_lines)r&   r'   r)   r/   zSkipping line r%   r&   r*   r+   r-   r.   )	r   r   Ś
readouterrŚerrr   rC   r¢   r7   r8   )r   Ścapsysr   rČ   r9   ŚcapturedŚline_numr:   r   r   r   Ś!test_comment_whitespace_delimitedź  s   ś*rŽ   c                 C   sD   G dd dt }| }d}tddgi}| ||”}t ||” d S )Nc                   @   s   e Zd Zdd ZeZdS )z,test_file_like_no_next.<locals>.NoNextBufferc                 S   s   t d)NzNo next method)ŚAttributeError)Śselfr   r   r   Ś__next__  s   z5test_file_like_no_next.<locals>.NoNextBuffer.__next__N)Ś__name__Ś
__module__Ś__qualname__rį   Śnextr   r   r   r   ŚNoNextBuffer  s    rę   za
1r1   r%   )r   r   r   r7   r8   )r   rę   r   r   r:   rH   r   r   r   Śtest_file_like_no_next  s   rē   c                 C   s\   t d}t|ddd}d}tjt|d | j|dd W d    d S 1 s'w   Y  d S )	Nó   °ŚasciiŚsurrogateescape)r­   Śerrorsz$'utf-8' codec can't encode characterr   zUTF-8)r­   )r   r   r   r   ŚUnicodeErrorr   )r   Śtr   r   r   r   Ś test_buffer_rd_bytes_bad_unicode  s   "’rī   Ś
tar_suffixz.tarz.tar.gzc           	      C   sv   | }t j |d| ”}t |d” }| d”}| |”}tddgi}t 	||” W d    d S 1 s4w   Y  d S )NŚtar_csvŚrztar_data.csvr1   r%   )
Śosra   r®   ŚtarfileŚopenŚextractfiler   r   r7   r8   )	r   Ścsv_dir_pathrļ   r   Śtar_pathŚtarŚ	data_fileŚoutr:   r   r   r   Śtest_read_tarfile$  s   

"ūrū   zToo memory intensive for CI.)Śreasonc                 C   sL   | }|j r
t d” tdd dd tdD ” }| |”}|jr$J d S )Nznot a low_memory testzstrings
r   c                 S   s   g | ]}d d qS )Śxi   r   r„   r   r   r   r   A  s    z)test_bytes_exceed_2gb.<locals>.<listcomp>i4  )Ś
low_memoryr   Śskipr   r®   r   r   Śempty)r   r   Ścsvr9   r   r   r   Śtest_bytes_exceed_2gb6  s   
 
r  c                 C   sL   | }dd d }d}|j t|| d d}tdd ddg}t ||” d S )Nr1   iž’ z
az
 ar   z ar6   )r   r   Śchunk1Śchunk2rH   r:   r   r   r   Ś!test_chunk_whitespace_on_boundaryF  s   r  c              	   C   s   | }t |6}tj| ” dtjd}| |” |jrJ W d    n1 s'w   Y  W d    d S W d    d S 1 s?w   Y  d S )Nr   )Śaccess)rō   ŚmmapŚfilenoŚACCESS_READr   Śclosed)r   Ścsv1r   ŚfŚmr   r   r   Śtest_file_handles_mmapU  s   

ž’"’r  c              	   C   sĪ   | }t g d¢g d¢g}t ” M}t|d}| d” W d    n1 s&w   Y  t|d}|j|d d}t ||” W d    n1 sHw   Y  W d    d S W d    d S 1 s`w   Y  d S )Nr$   r(   Śwz1,2,3
4,5,6Śrbr   )r   r7   r]   rō   Śwriter   r8   )r   r   r:   ra   r  rH   r   r   r   Śtest_file_binary_modea  s   
’žü"ür  c              	   C   s   | }t  ” -}t|ddd}| d” W d    n1 sw   Y  |j|dddd}W d    n1 s6w   Y  tg d	¢d
}t  ||” d S )Nr  r   )Śnewlinezblah

col_1,col_2,col_3

r&   zutf-8r3   )r×   r­   Śengine)Ścol_1Ścol_2Ścol_3r4   )r7   r]   rō   r  r   r   r8   )r   r   ra   r  rH   r:   r   r   r   Śtest_unix_style_breakso  s   
’żr  rg   )Nre   rh   ri   zdata,thousands,decimal)zA|B|C
1|2,334.01|5
10|13|10.
r   Ś.)zA|B|C
1|2.334,01|5
10|13|10,
r  r   c                 C   sH   | }t ddgddgddgd}|jt|d|||d	}t ||” d S )
Nr%   r½   gģQø<¢@é   r*   g      $@)rL   rM   ŚCś|)r=   Ś	thousandsro   rg   )r   r   r   r7   r8   )r   r   r  ro   rg   r   r:   rH   r   r   r   Śtest_1000_sep_with_decimalz  s   ūr  c                 C   sĘ   | }d}|  t|”}|j t|dd}t ||” |j t|dd}tr2|jd |jd kr1J n|jd |jd ks>J d}tjt|d |j t|dd W d    d S 1 s\w   Y  d S )	Nzfoo
243.164
rh   rf   re   )r   r   z)Unrecognized float_precision option: junkr   Śjunk)	r   r   r7   r8   r   Śilocr   r   rF   )r   r   r   r9   Śdf2Śdf3r   r   r   r   Śtest_float_precision_options   s   "’r#  )>Ś__doc__Śior   r   r   r  rņ   ró   ŚnumpyrC   r   Śpandas.compatr   r   Śpandas.errorsr   Śpandas.util._test_decoratorsŚutilŚ_test_decoratorsŚtdŚpandasr   r	   Śpandas._testingŚ_testingr7   ŚmarkŚparametrizer   r!   r;   rI   ŚENDIANrb   Śskip_if_32bitŚslowr{   r   r   r   r   r   r    rµ   r¶   rÉ   rŹ   rĻ   rŅ   rŽ   rē   rī   rū   Ś
single_cpuŚskipifr  r  r  r  r  r  r#  r   r   r   r   Ś<module>   s    ż


*ū	ūž
žģå
%
"
X	
÷ž