U
    ¾mœd›)  ã                   @   s�   d Z ddlmZm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„ ƒ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ej d)d*d+d,ifd-d.d/ifd0d+d,ifd1d+d,ifd2d.d/ifd3d.d/ifg¡d4d5„ ƒZd6d7„ Zd8d9„ Zd:S );ÚTestTextReaderc                 C   s   |ddddƒS )NÚioÚdataÚcsvz	test1.csv© )ÚselfÚdatapathr   r   ú_/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/io/parser/test_textreader.pyÚcsv_path   s    zTestTextReader.csv_pathc              	   C   s*   t |dƒ�}t|ƒ}| ¡  W 5 Q R X d S )NÚrb©Úopenr   Úread©r   r   ÚfÚreaderr   r   r   Útest_file_handle   s    zTestTextReader.test_file_handlec              	   C   s.   t |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 |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_factorize1   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_skipinitialspace8   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   r-   r3   Zbool_r&   r'   r   r   r   Útest_parse_booleansE   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   r+   r,   r.   r/   r0   r'   r   r   r   Útest_delimit_whitespaceM   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   r+   zhello
thereÚthisr,   r   )r   r   r   r3   r4   r5   r1   r2   ©r   r   r   r(   Úexpectedr   r   r   Útest_embedded_newlineZ   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   r3   r4   r1   Úassert_almost_equalr;   r   r   r   Útest_euro_decimalc   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,500r>   r?   ©r@   Z	thousandsr   é@â éÔ0  r,   r   )r   r   r   r3   r4   Úint64r1   rB   r;   r   r   r   Útest_integer_thousandsl   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.500r>   Ú.rD   rE   rF   )r   r   r   r   r1   Úassert_frame_equalr;   r   r   r   Útest_integer_thousands_altu   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sØt‚d|jksæt‚d S )Nz'a:b:c
d:e:f
g:h:i
j:k:l:m
l:m:n
o:p:q:rr>   ©r@   r   zCError tokenizing data\. C error: Expected 3 fields in line 4, saw 4)Úmatchr!   )r@   r   Zon_bad_linesr+   ÚdÚgÚlr,   r/   ÚeÚhÚmÚcr   ÚiÚn©r   r.   r!   r.   zSkipping line 4zSkipping line 6)r   r   ÚpytestZraisesÚparserZParserErrorr   r3   r4   ÚobjectÚassert_array_dicts_equalZ
readouterrÚerrr&   )r   Zcapsysr   r   Úmsgr(   r<   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,6r?   r!   rL   r+   r/   rT   r.   é   r,   é   é   é   rW   )	r   r   r   r&   r   r3   r4   rG   r[   )r   r   r   r   r<   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"r?   ú\)r@   r   Ú
escapecharr   z"hello world"ra   r,   )r   r   r   r3   r4   rZ   r[   r;   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 rg   r   rh   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s–t‚tjdd	d
ddgdd�}|d |k ¡ sÂt‚|d jdksÔt‚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 )Nr-   r?   rL   ©r   r   r   ©Úkwds©r   r   r   Ú_make_readerÄ   s    z<TestTextReader.test_numpy_string_dtype.<locals>._make_readerzS5,i4r,   r   ZS5r+   ZaaZaaaZaaaaZaaaaar.   Úi4ZS4)r   r-   r&   r3   r4   Úall)r   ro   r   r(   Z	ex_valuesr   rn   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sŠt‚|t d¡t d
¡dœd�}|  ¡ }|d jdksÀt‚|d	 jd
ksÒt‚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 )Nr-   r@   r?   rk   rl   rn   r   r   ro   á   s    z4TestTextReader.test_pass_dtype.<locals>._make_readerÚu1ZS1)Úoner.   r,   r   r.   ÚO)r   r-   r&   r3   Zuint8rZ   )r   ro   r   r(   r   rn   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 )Nr@   r?   )r   r   rl   rn   r   r   ro   ý   s    z1TestTextReader.test_usecols.<locals>._make_reader)r.   r!   )Zusecolsr!   r.   )r   r"   r&   rq   )r   ro   r   r(   Úexpr   rn   r   Útest_usecolsõ   s    

zTestTextReader.test_usecolsztext, kwargsz a,b,c1,2,34,5,67,8,910,11,12r@   r?   z*a  b  c1  2  34  5  67  8  910  11  12r8   Tz 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 6c                 C   sB   |  dd¡}tt|ƒf|Ž ¡ }tt|ƒf|Ž ¡ }t||ƒ d S )Núz
)Úreplacer   r   r   r[   )r   r   ÚkwargsZ	nice_textr(   r<   r   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 ||¡ qöd S )#Nza,b,c
1,2,3
4,,r?   )r@   r.   r_   r,   Ú2Ú Ú3rW   r/   r+   rT   )ÚcolumnsÚindexr   Úabcdr!   ra   rb   é   é	   é
   é   é   é   r`   é   é   é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   r3   r4   rG   rZ   r[   r   ÚnanÚlistÚranger   r1   rJ   )	r   r   r(   r<   r+   r/   rT   Ú_Ú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é   r+   r/   rT   )Ú	chunksizer   rŒ   )r   r   Ú
isinstancer   r&   )r   r’   r   r   r   Útest_empty_csv_inputM  s       ÿz#TestTextReader.test_empty_csv_inputN)Ú__name__Ú
__module__Ú__qualname__rX   Zfixturer   r   r   r    r)   r6   r7   r9   r=   rC   rH   rK   r^   rc   rf   ri   rj   rr   rv   rx   ÚmarkZparametrizer|   r“   r—   r   r   r   r   r	      sL   
			
þ
ú

ðþ
*r	   c                 C   s2   |   ¡ D ]$\}}t t |¡t || ¡¡ qd S rg   )Úitemsr1   r2   r3   Zasarray)ÚleftÚrightÚkÚvr   r   r   r[   U  s    r[   )Ú__doc__r
   r   r   Únumpyr3   rX   Zpandas._libs.parsersZ_libsÚparsersrY   r   Zpandasr   Zpandas._testingZ_testingr1   Zpandas.io.parsersr   r   Z"pandas.io.parsers.c_parser_wrapperr   r	   r[   r   r   r   r   Ú<module>   s     =