U
    +if<*                     @   s   d Z ddlmZmZ ddlZddlZddlZddlm	  m
Z ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ G dd	 d	Zd
d ZdS )z\
Tests the TextReader class in parsers.pyx, which
is integral to the C engine in parsers.py
    )BytesIOStringION)
TextReader)	DataFrame)TextFileReaderread_csv)ensure_dtype_objsc                   @   s   e Zd Zejdddd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1S )2TestTextReaderT)Zautousec                 C   sR   |ddd| _ |ddd}tj|d| _tj| j d| _tj| j d| _d S )Nioparserdatacsvz	test1.csvz	test2.csvztest.xls)dirpathospathjoincsv1Zcsv2Zxls1)selfdatapathZcsv1_dirpath r   Y/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/io/parser/test_textreader.pysetup_method   s
    zTestTextReader.setup_methodc              	   C   s,   t | jd}t|}|  W 5 Q R X d S )Nrbopenr   r   readr   freaderr   r   r   test_file_handle$   s    zTestTextReader.test_file_handlec              	   C   s0   t | jd}t|d d}|  W 5 Q R X d S Nr   headerr   r   r   r   r   test_file_handle_mmap)   s    z$TestTextReader.test_file_handle_mmapc              	   C   s@   t | jd}| }W 5 Q R X t|}t|d d}|  d S r    )r   r   r   r   r   )r   r   textsrcr   r   r   r   test_StringIO/   s
    zTestTextReader.test_StringIOc                 C   s>   d}t t|d d}| }tttt|d dks:td S )Nz	a
b
a
b
ar!   r      )r   r   r   lensetmapidAssertionErrorr   r   r   resultr   r   r   test_string_factorize6   s    z$TestTextReader.test_string_factorizec                 C   sj   d}t t|dd d}| }t|d tjddddgtjd t|d tjddddgtjd d S )	Nza,   b
a,   b
a,   b
a,   bT)skipinitialspacer"   r   adtype   br   r   r   tmassert_numpy_array_equalnparrayobject_r-   r   r   r   test_skipinitialspace=   s      z$TestTextReader.test_skipinitialspacec                 C   s4   d}t t|d d}| }|d jtjks0td S )NzTrue
False
True
Truer!   r   )r   r   r   r3   r9   Zbool_r,   r-   r   r   r   test_parse_booleansJ   s    z"TestTextReader.test_parse_booleansc                 C   sf   d}t t|dd d}| }t|d tjdddgtjd t|d tjdddgtjd d S )	Nza  b
a		 "b"
"a"	 	 bT)delim_whitespacer"   r   r1   r2   r4   r5   r6   r-   r   r   r   test_delimit_whitespaceR   s      z&TestTextReader.test_delimit_whitespacec                 C   sF   d}t t|d d}| }tjdddgtjd}t|d | d S )Nza
"hello
there"
thisr!   r1   zhello
therethisr2   r   )r   r   r   r9   r:   r;   r7   r8   r   r   r   r.   expectedr   r   r   test_embedded_newline_   s
    z$TestTextReader.test_embedded_newlinec                 C   sB   d}t t|ddd d}| }tddg}t|d | d S )Nz12345,67
345,678:,)	delimiterdecimalr"   g)\@g+ٚu@r   )r   r   r   r9   r:   r7   assert_almost_equalrA   r   r   r   test_euro_decimalh   s
    z TestTextReader.test_euro_decimalc                 C   sH   d}t t|ddd d}| }tjddgtjd}t|d | d S )	Nz123,456
12,500rD   rE   rF   Z	thousandsr"   @ 0  r2   r   )r   r   r   r9   r:   int64r7   rH   rA   r   r   r   test_integer_thousandsq   s
    z%TestTextReader.test_integer_thousandsc                 C   s<   d}t t|ddd d}| }tddg}t|| d S )Nz123.456
12.500rD   .rJ   rK   rL   )r   r   r   r   r7   assert_frame_equalrA   r   r   r   test_integer_thousands_altz   s       z)TestTextReader.test_integer_thousands_altc              	   C   s   d}t t|dd d}d}tjtj|d |  W 5 Q R X t t|dd dd}| }tjdd	d
dgt	dtjddddgt	dtjddddgt	dd}t
|| t t|dd dd}|  | }d|jkstd|jkstd S )Nz'a:b:c
d:e:f
g:h:i
j:k:l:m
l:m:n
o:p:q:rrD   rF   r"   zCError tokenizing data\. C error: Expected 3 fields in line 4, saw 4)matchr'   )rF   r"   Zon_bad_linesr1   dglr2   r5   ehmcr   inr   r4   r'   r4   zSkipping line 4zSkipping line 6)r   r   pytestZraisesr   ZParserErrorr   r9   r:   objectassert_array_dicts_equalZ
readouterrerrr,   )r   Zcapsysr   r   msgr.   rB   Zcapturedr   r   r   test_skip_bad_lines   s6       
   z"TestTextReader.test_skip_bad_linesc                 C   s   d}t t|ddd}|j}dddgg}||ks4t| }tjdd	gtjd
tjddgtjd
tjddgtjd
d}t|| d S )Nz%skip this
skip this
a,b,c
1,2,3
4,5,6rE   r'   rR   r1   r5   rZ   r4      r2            r]   )	r   r   r"   r,   r   r9   r:   rM   r`   )r   r   r   r"   rB   Zrecsr   r   r   test_header_not_enough_lines   s    z+TestTextReader.test_header_not_enough_linesc                 C   sF   d}t t|dd dd}| }dtjdgd tdi}t|| d S )	Nz,\"hello world"
\"hello world"
\"hello world"rE   \)rF   r"   
escapecharr   z"hello world"rf   r2   )r   r   r   r9   r:   r_   r`   rA   r   r   r   test_escapechar   s
    zTestTextReader.test_escapecharc                 C   s   d S Nr   r   r   r   r   test_eof_has_eol   s    zTestTextReader.test_eof_has_eolc                 C   s   d S rl   r   rm   r   r   r   test_na_substitution   s    z#TestTextReader.test_na_substitutionc                    s   d  fdd}|dd}|  }|d jdks4ttjdd	d
ddgdd}|d |k s`t|d jdksrt|dd}|  }|d jdksttjdd	d
ddgdd}|d |k st|d jdkstd S )Nza,1
aa,2
aaa,3
aaaa,4
aaaaa,5c                     s2   d| krt | d | d< tt fdd d| S )Nr3   rE   rR   r   r   r   kwdsr   r   r   _make_reader   s    z<TestTextReader.test_numpy_string_dtype.<locals>._make_readerzS5,i4r2   r   ZS5r1   ZaaZaaaZaaaaZaaaaar4   i4ZS4)r   r3   r,   r9   r:   all)r   rt   r   r.   Z	ex_valuesr   rs   r   test_numpy_string_dtype   s    

z&TestTextReader.test_numpy_string_dtypec                    s   d  fdd}|dddd}|  }|d jdks:t|d	 jdksLt|tjtdd}|  }|d jdksxt|d	 jd
kst|tdtd
dd}|  }|d jdkst|d	 jd
kstd S )Nzone,two
1,a
2,b
3,c
4,dc                     s0   d| krt | d | d< tt fddi| S )Nr3   rF   rE   rp   rq   rs   r   r   rt      s    z4TestTextReader.test_pass_dtype.<locals>._make_readeru1ZS1)oner4   r2   r   r4   O)r   r3   r,   r9   Zuint8r_   )r   rt   r   r.   r   rs   r   test_pass_dtype   s    zTestTextReader.test_pass_dtypec                    sp   d  fdd}|dd}|  }|   }t|dks<t|d |d k sTt|d |d k sltd S )Nz a,b,c
1,2,3
4,5,6
7,8,9
10,11,12c                     s   t t fddi| S )NrF   rE   )r   r   rq   rs   r   r   rt     s    z1TestTextReader.test_usecols.<locals>._make_reader)r4   r'   )Zusecolsr'   r4   )r   r(   r,   rv   )r   rt   r   r.   expr   rs   r   test_usecols   s    

zTestTextReader.test_usecolsc                 C   sl   dd }d}||dd d}||dd d	}||dd d
}||dd d}||dd d}||dd d S )Nc                 [   sB   |  dd}tt| f| }tt|f| }t|| d S )Nz
)replacer   r   r   r`   )r$   kwargsZ	nice_textr.   rB   r   r   r   _test  s    z/TestTextReader.test_cr_delimited.<locals>._testz a,b,c1,2,34,5,67,8,910,11,12rE   rF   z*a  b  c1  2  34  5  67  8  910  11  12T)r>   z a,b,c1,2,34,5,6,88,910,11,12zdA,B,C,D,E,F,G,H,I,J,K,L,M,N,OAAAAA,BBBBB,0,0,0,0,0,0,0,0,0,0,0,0,0,BBBBB,0,0,0,0,0,0,0,0,0,0,0,0,0zA  B  C  2  34  5  6zA B C2 34 5 6r   )r   r   r   sampler   r   r   test_cr_delimited  s    z TestTextReader.test_cr_delimitedc           	      C   sf  d}t t|dd }tjddgtjdtjddgtdtjd	dgtdd
}t|| tdgtj	ggdgddgd}tddddgddddggt
dddgd}tddddgdtj	tj	tj	gddddgddtj	tj	ggt
dddddgd}tdD ]j}ttdddgdd}t|| ttd t
ddd!}t|| ttd"t
ddd!}t|| qd S )#Nza,b,c
1,2,3
4,,rE   r   r4   rd   r2   2 3r]   r5   r1   rZ   )columnsindexr   abcdr'   rf   rg      	   
            re         d   za,b
c
)Zskiprowsnamesenginez1,1,1,1,0
1,1,1,1,0


)r   r   z"0,1,2,3,4
5,6
7,8,9,10,11
12,13,14)r   r   r   r9   r:   rM   r_   r`   r   nanlistranger   r7   rP   )	r   r   r.   rB   r1   r5   rZ   _dfr   r   r   test_empty_field_eof*  sB    
*


  z#TestTextReader.test_empty_field_eofc              	   C   s6   t t dd dddgd}t|ts(tW 5 Q R X d S )N   r1   r5   rZ   )	chunksizer"   r   )r   r   
isinstancer   r,   )r   r   r   r   r   test_empty_csv_inputT  s       z#TestTextReader.test_empty_csv_inputN)__name__
__module____qualname__r^   Zfixturer   r   r#   r&   r/   r<   r=   r?   rC   rI   rN   rQ   rc   rh   rk   rn   ro   rw   r{   r}   r   r   r   r   r   r   r   r	      s0   

			*r	   c                 C   s2   |   D ]$\}}tt|t||  qd S rl   )itemsr7   r8   r9   Zasarray)leftrightkvr   r   r   r`   \  s    r`   )__doc__r
   r   r   r   numpyr9   r^   Zpandas._libs.parsersZ_libsparsersr   r   Zpandasr   Zpandas._testingZ_testingr7   Zpandas.io.parsersr   r   Z"pandas.io.parsers.c_parser_wrapperr   r	   r`   r   r   r   r   <module>   s     C