3
Ud                 @   s  d dl Z d dlmZmZ d dlmZ d dlZd dlmZ d dlZd dl	Z
d dlZd dljjZd dlZd dlmZmZmZmZ d dljZe jdd Zdd	d
ddgZejdejdejjdgdejdejdejjdgdejdejdejjdgdejdejddejdejddgZ e!e"dddZ#dd Z$ej%ddd e D ddd Z&ej%dd  Z'ej%d!d" Z(G d#d$ d$Z)G d%d& d&Z*dS )'    N)datetimetime)partial)URLError)	DataFrameIndex
MultiIndexSeriesc               c   s.   t j  t jddtd dV  W dQ R X dS )z
    Context manager to ignore warnings raised by the xlrd library,
    regarding the deprecation of `time.clock` in Python 3.7.
    ignoreztime.clock has been deprecated)actionmessagecategoryN)warningscatch_warningsfilterwarningsDeprecationWarning r   r   V/var/www/html/virt/lib64/python3.6/site-packages/pandas/tests/io/excel/test_readers.pyignore_xlrd_time_clock_warning   s    
r   z.xlsz.xlsxz.xlsmz.xlsbz.odsZxlrdz#ignore:.*(tree\.iter|html argument))marksopenpyxlzignore:.*html argumentpyxlsbodf)read_extreturnc             C   sr   | j d } | dkr|dkrdS | dkr2|dkr2dS |dkrF| dkrFdS | dkrZ|dkrZdS |dkrn| dkrndS d	S )
zm
    Filter out invalid (engine, ext) pairs instead of skipping, as that
    produces 500+ pytest.skips.
    r   r   z.xlsFr   z.odsr   z.xlsbT)values)enginer   r   r   r   _is_valid_engine_ext_pair@   s    
r   c             C   s    | j |f }tj|| jd}|S )z
    engine gives us a pytest.param objec with some marks, read_ext is just
    a string.  We need to generate a new pytest.param inheriting the marks.
    )r   )r   pytestparamr   )r   r   r   	new_paramr   r   r   _transfer_marksS   s    r!   Tc             C   s*   g | ]"}t D ]}t||rt||qqS r   )read_ext_paramsr   r!   ).0Zengextr   r   r   
<listcomp>`   s   r%   )autouseparamsc             C   s   | j S )zS
    Fixture for Excel reader engine and read_ext, only including valid pairs.
    )r   )requestr   r   r   engine_and_read_ext]   s    r)   c             C   s   | \}}|S )Nr   )r)   r   r   r   r   r   r   m   s    r   c             C   s   | \}}|S )Nr   )r)   r   r   r   r   r   r   s   s    r   c               @   s  e Zd Zejdddd Zdd Zdd Zd	d
 Zej	j
ddddgdddgdddgdddgdddgdddggdd Zej	j
dddgddggdd Zdd Zdd Zdd Zdd Zdd Zej	j
dd d!gd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zej	j
d4d edd!dd5gd6d7d8d9gdd!dd5gd:d;ejd<gd=fd>d?eed=eedd!dd5gd>d@ed6d7d8d9gd?d@dAdBdCdDgdEdFejdGgd=fgdHdI Z dJdK Z!ej	j
dLdMedNdOgifdPedQgdRfgdSdT Z"dUdV Z#dWdX Z$dYdZ Z%d[d\ Z&d]d^ Z'd_d` Z(dadb Z)dcdd Z*dedf Z+e,j-dgdh Z.e/j0didj Z1ej	j2ej	j3dkdldm Z4dndo Z5e/j6dpe/j7dqdr Z8e/j7dsdt Z9dudv Z:dwdx Z;dydz Z<d{d| Z=d}d~ Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd ZEd S )TestReadersT)r&   c             C   s2   t tj|d}|j|ddd |jtd| dS )zG
        Change directory and set engine for read_excel calls.
        )r   iodataexcel
read_excelN)r   pdr.   chdirsetattr)selfr   datapathmonkeypatchfuncr   r   r   cd_and_set_enginez   s    zTestReaders.cd_and_set_enginec          #   C   s   |j dddgd}d}tjt|d. t  tjd| dd	d
d W d Q R X W d Q R X tjt|d2 t   tjd| ddgd	d
d W d Q R X W d Q R X d S )NABC)columnsz Passing an integer for `usecols`)matchtest1Sheet1r      )
sheet_name	index_colusecolsSheet2   )r?   skiprowsr@   rA   )reindexr   raises
ValueErrorr   r/   r.   )r2   r   df_refmsgr   r   r   test_usecols_int   s    &zTestReaders.test_usecols_intc             C   s   t jjd dkrtjd |jddgd}t jd| dd	d	d
dgd}t jd| ddgd	d	d
dgd}tj||dd tj||dd d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbr8   r9   )r:   r<   r=   r      r>   )r?   r@   rA   rB   rC   )r?   rD   r@   rA   F)check_names)r/   r.   keywordsr   xfailrE   tmassert_frame_equal)r2   r   rH   df1df2r   r   r   test_usecols_list   s    
zTestReaders.test_usecols_listc             C   s@  t jjd dkrtjd |jdddgd}t jd| d	d
dd}t jd| ddgd
dd}tj||dd tj||dd |jddgd}t jd| d	d
dd}t jd| ddgd
dd}tj||dd tj||dd |jddgd}t jd| d	d
dd}t jd| ddgd
dd}tj||dd tj||dd d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbr7   r8   r9   )r:   r<   r=   r   zA:D)r?   r@   rA   rB   rC   )r?   rD   r@   rA   F)rL   zA,C,DzA,C:D)r/   r.   rM   r   rN   rE   rO   rP   )r2   r   rH   rQ   rR   df3r   r   r   test_usecols_str   sF    
zTestReaders.test_usecols_strrA   r   rC   r>   c             C   sP   t jjd dkrtjd |ddg }t jd| dd|d	}tj||d
d d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbr7   r9   r<   r=   r   )r?   r@   rA   F)rL   )r/   r.   rM   r   rN   rO   rP   )r2   r   rA   rH   expectedresultr   r   r   .test_usecols_diff_positional_int_columns_order   s    
z:TestReaders.test_usecols_diff_positional_int_columns_orderr8   Dc             C   sB   |ddg }t t||_tjd| d|d}tj||dd d S )Nr8   rY   r<   r=   )r?   rA   F)rL   )rangelenindexr/   r.   rO   rP   )r2   r   rA   rH   rV   rW   r   r   r   .test_usecols_diff_positional_str_columns_order   s    z:TestReaders.test_usecols_diff_positional_str_columns_orderc             C   sF   t jjd dkrtjd |}t jd| ddd}tj||dd	 d S )
Nr   r   z3Sheets containing datetimes not supported by pyxlsbr<   r=   r   )r?   r@   F)rL   )r/   r.   rM   r   rN   rO   rP   )r2   r   rH   rV   rW   r   r   r   test_read_excel_without_slicing   s
    
z+TestReaders.test_read_excel_without_slicingc             C   sP   t jjd dkrtjd |ddg }t jd| ddd	d
}tj||dd d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbr9   rY   r<   r=   r   zA,D:E)r?   r@   rA   F)rL   )r/   r.   rM   r   rN   rO   rP   )r2   r   rH   rV   rW   r   r   r   test_usecols_excel_range_str   s    
z(TestReaders.test_usecols_excel_range_strc             C   s6   d}t jt|d tjd| ddd W d Q R X d S )NzInvalid column name: E1)r;   r<   r=   zD:E1)r?   rA   )r   rF   rG   r/   r.   )r2   r   rI   r   r   r   $test_usecols_excel_range_str_invalid  s    z0TestReaders.test_usecols_excel_range_str_invalidc             C   s>   d}t jt|d" tjd| ddgddgd W d Q R X d S )Nz(list indices must be integers.*, not str)r;   r<   r=   r7   r9   )r?   r@   rA   )r   rF   	TypeErrorr/   r.   )r2   r   rI   r   r   r   test_index_col_label_error  s    z&TestReaders.test_index_col_label_errorc             C   sX   t jd| ddddgd}tddd	gtg gd
 g gd
 dddgdd}tj|| d S )Nr<   Sheet3r7   r8   r9   )r?   r@   rY   EFr>   )levelscodesnames)r:   r\   )r/   r.   r   r   rO   rP   )r2   r   rW   rV   r   r   r   test_index_col_empty  s    $z TestReaders.test_index_col_emptyr@   NrK   c             C   sZ   t jd| d|d}tdddgddd	ggd
ddgd}|rJ|j|j| }tj|| d S )Nr<   ZSheet4)r?   r@   i1axi2byz
Unnamed: 0Zcol1Zcol2)r:   )r/   r.   r   	set_indexr:   rO   rP   )r2   r   r@   rW   rV   r   r   r   test_index_col_with_unnamed!  s     z'TestReaders.test_index_col_with_unnamedc             C   s6   d}t jt|d tjd| dgd W d Q R X d S )Nz>Usecols do not match columns, columns expected but not found: z\['E'\])r;   r<   rd   )rA   zEUsecols do not match columns, columns expected but not found: \['E'\])r   rF   rG   r/   r.   )r2   r   rI   r   r   r   %test_usecols_pass_non_existent_column/  s     z1TestReaders.test_usecols_pass_non_existent_columnc             C   s8   d}t jt|d tjd| ddgd W d Q R X d S )Nz['usecols' must either be list-like of all strings, all unicode, all integers or a callable.)r;   r<   ZE1r   )rA   )r   rF   rG   r/   r.   )r2   r   rI   r   r   r   test_usecols_wrong_type8  s    z#TestReaders.test_usecols_wrong_typec             C   s8   t jd| dd}tddggddgd}tj|| d S )	NZtest2r=   )r?   ZaaaaZbbbbbTestZTest1)r:   )r/   r.   r   rO   rP   )r2   r   parsedrV   r   r   r   test_excel_stop_iteratorA  s    z$TestReaders.test_excel_stop_iteratorc             C   sP   t jjd dkrtjd t jd| dd}ttjggdgd}tj	|| d S )	Nr   r   z3Sheets containing datetimes not supported by pyxlsbZtest3r=   )r?   rt   )r:   )
r/   r.   rM   r   rN   r   npnanrO   rP   )r2   r   ru   rV   r   r   r   test_excel_cell_error_naG  s
    
z$TestReaders.test_excel_cell_error_nac             C   s   t jjd dkrtjd t jd| ddd}t jd| dd	gdd
}tj||dd tj||dd t jd| ddd	d}tj||jd d  d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbr<   r=   r   )r?   r@   rB   rC   )r?   rD   r@   F)rL   )r?   r@   
skipfooter)r/   r.   rM   r   rN   rO   rP   iloc)r2   r   rH   rQ   rR   rT   r   r   r   test_excel_tableO  s    
zTestReaders.test_excel_tablec       
      C   s  t jjd dkrtjd tjddd)ddgd	d
dddgdddddgdddddgdddddgtdddtdddtdddtdddtdddgd}d}t j|| dd }tj	|| |j
 }|d! jt|d!< d"|j|jd d#f< t j|| ddd$}tj	|| xBt|jD ]4\}}t j|| d|d%}|j|}tj	|| qW |d& jt|d&< t j|| dd&tid'}tj	|| |j
 }	|	d& jt|	d&< t j|| ddd&tid(}tj	||	 d S )*Nr   r   z3Sheets containing datetimes not supported by pyxlsbrC   rK   r>      r   g      ?g      @gHzG?gQ?g&.>TF   rk   cdei  
         iq        i  )IntColFloatColBoolColStrColStr2ColZDateColZ
test_typesr=   )r?   r   g      @r   )r?   convert_float)r?   r@   r   )r?   
converters)r?   r   r   )r/   r.   rM   r   rN   r   	from_dictr   rO   rP   copyastypefloatlocr\   	enumerater:   rp   applystr)
r2   r   rV   basenameactualZfloat_expectedZicolnameexpZno_convert_floatr   r   r   test_reader_special_dtypes`  sN    





z&TestReaders.test_reader_special_dtypesc          	   C   s   d}t jdddddgdtjdd	d
gdddddgdtjdddgd}dd dd dd dd d}tj|| d|d}tj|| d S )NZtest_convertersrC   rK   r>   i  r   g      )@gL2@g3333333@g:0y5>Foundz	Not found1345)r   r   r   r   c             S   s   | dkrt | S dS )N i  i)int)rl   r   r   r   <lambda>  s    z4TestReaders.test_reader_converters.<locals>.<lambda>c             S   s   | rd|  S t jS )Nr   )rw   rx   )rl   r   r   r   r     s    c             S   s   | dkrdS dS )Nr   r   z	Not foundr   )rl   r   r   r   r     s    c             S   s   | rt | S dS )Nr   )r   )rl   r   r   r   r     s    )r   r   rK   r>   r=   )r?   r   r   i)r   r   rw   rx   r/   r.   rO   rP   )r2   r   r   rV   r   r   r   r   r   test_reader_converters  s    z"TestReaders.test_reader_convertersc             C   s   d}t j|| }tddddgdddd	gddddgd
dtjdgdjddddgd}tj|| t j|| ddtdd}|d j	d|d< |d j	d|d< ddddg|d< tj|| d}t
jt|d t j|| ddid W d Q R X d S )N	testdtyperC   rK   r>   r~   g      @g      @g      @g      @g      ?g       @g      @)rk   rn   r   r   rk   rn   r   r   )r:   float64float32)rk   rn   r   )dtype001002003004z(Unable to convert column d to type int64)r;   int64)r/   r.   r   rw   rx   rE   rO   rP   r   r   r   rF   rG   )r2   r   r   r   rV   rI   r   r   r   test_reader_dtype  s$    


zTestReaders.test_reader_dtypezdtype,expectedr~   g      @g      @g      @g      @g      ?g       @g      @)rk   rn   r   r   r   r   )r   r   r   r   r   r   2r   c             C   s&   d}t j|| |d}tj|| d S )Nr   )r   )r/   r.   rO   rP   )r2   r   r   rV   r   r   r   r   r   test_reader_dtype_str  s    z!TestReaders.test_reader_dtype_strc             C   s8   d}t j|| }tddddddgi}tj|| d S )NZtest_spacesZtestcolzthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  times)r/   r.   r   rO   rP   )r2   r   r   r   rV   r   r   r   test_reader_spaces  s    
zTestReaders.test_reader_spaceszbasename,expectedzgh-35802ZCOLUMNzTest (1)zgh-36122z
got 2nd sa)r:   c             C   sB   t jjd }|dkr$tjd|  t j|| }tj|| d S )Nr   r   zSkipped for engine: )r/   r.   rM   r   skiprO   rP   )r2   r   r   rV   r   r   r   r   r   test_read_excel_ods_nested_xml  s
    	z*TestReaders.test_read_excel_ods_nested_xmlc             C   sH   d}t j|| d d}dddg}tj||j  |t|j ksDtd S )Ntest_multisheet)r?   CharlieAlphaBeta)r/   r.   rO   assert_contains_allkeyslistAssertionError)r2   r   r   dfsexpected_keysr   r   r   test_reading_all_sheets  s
    
z#TestReaders.test_reading_all_sheetsc             C   sX   d}dddg}t j|| |d}tt|}tj||j  t|t|j ksTtd S )Nr   rK   r   )r?   )	r/   r.   r   setrO   r   r   r[   r   )r2   r   r   r   r   r   r   r   %test_reading_multiple_specific_sheets(  s    
z1TestReaders.test_reading_multiple_specific_sheetsc             C   s4   d}t j|| d d}dddg}tj||j  d S )Nblank_with_header)r?   r=   rB   rc   )r/   r.   rO   r   r   )r2   r   r   r   r   r   r   r   "test_reading_all_sheets_with_blank6  s    
z.TestReaders.test_reading_all_sheets_with_blankc             C   s$   t jd| dd}tj|t  d S )NZblankr=   )r?   )r/   r.   rO   rP   r   )r2   r   r   r   r   r   test_read_excel_blank@  s    z!TestReaders.test_read_excel_blankc             C   s0   t ddgd}tjd| dd}tj|| d S )NZcol_1Zcol_2)r:   r   r=   )r?   )r   r/   r.   rO   rP   )r2   r   rV   r   r   r   r   !test_read_excel_blank_with_headerD  s    z-TestReaders.test_read_excel_blank_with_headerc             C   s   t jjd dkrtjd t jt jddgt jddgdd	ggd
dgd}t jjd dkrdtjd t jd| }tj|| d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbz
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@xDzTimothy BrownZDateColWithBigIntZ	StringCol)r:   r   zMaybe not supported by openpyxlZtestdateoverflow)	r/   r.   rM   r   rN   r   	TimestamprO   rP   )r2   r   rV   rW   r   r   r   test_date_conversion_overflowI  s    

z)TestReaders.test_date_conversion_overflowc             C   s   t jjd dkrtjd d}d}t jjd dkr<tjd t j|| |dd	}t  t j|| d|d
}W d Q R X tj||dd tj||dd d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbr<   r=   r   zMaybe not supported by openpyxlr   )r?   r@   )r@   r?   F)rL   )r/   r.   rM   r   rN   r   rO   rP   )r2   r   rH   filenamer?   rQ   rR   r   r   r   test_sheet_name]  s    

zTestReaders.test_sheet_namec             C   sN   d| }t j|ddd}t|d"}t j|ddd}tj|| W d Q R X d S )Nr<   r=   r   )r?   r@   rb)r/   r.   openrO   rP   )r2   r   pthrV   fr   r   r   r   test_excel_read_buffero  s
    z"TestReaders.test_excel_read_bufferc             C   s0   d}t jtdd tjd|d W d Q R X d S )NfoozUnknown engine: foo)r;   r   )r   )r   rF   rG   r/   r.   )r2   r   Z
bad_enginer   r   r   test_bad_engine_raisesw  s    z"TestReaders.test_bad_engine_raisesc             C   s0   d| }t j|}t jd| }tj|| d S )Nz[https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/io/data/excel/test1r<   )r/   r.   rO   rP   )r2   r   url	url_tablelocal_tabler   r   r   test_read_from_http_url|  s
    
z#TestReaders.test_read_from_http_urlc             C   sb   t d| d}|jdjd| |d W d Q R X d| }tj|}tjd| }tj|| d S )Nr<   r   zpandas-test)KeyZBodyzs3://pandas-test/test1)r   ZBucketZ
put_objectr/   r.   rO   rP   )r2   r   Zs3_resourcer   r   r   r   r   r   r   test_read_from_s3_url  s    "
z!TestReaders.test_read_from_s3_urlz+ignore:This metho:PendingDeprecationWarningc             C   s   t jj|dddd| }tj|}ytjd| }W n> tk
rt   dd l}dj|j j }t	j
d|  Y nX tj|| d S )	Nr+   r,   r-   r<   zfile://localhost/r    zfailing on )ospathjoinr/   r.   r   platformunamestripr   r   rO   rP   )r2   r   r3   Z
localtabler   r   r   Zplatform_infor   r   r   test_read_from_file_url  s    
z#TestReaders.test_read_from_file_urlc             C   sP   ddl m} d| }tj|ddd}|d| }tj|ddd}tj|| d S )Nr   )Pathr<   r=   )r?   r@   )pathlibr   r/   r.   rO   rP   )r2   r   r   str_pathrV   path_objr   r   r   r   test_read_from_pathlib_path  s    z'TestReaders.test_read_from_pathlib_pathzpy.pathc             C   s\   ddl m} tjjd| }tj|ddd}| jd| }tj|ddd}tj|| d S )Nr   )localr<   r=   )r?   r@   )	Zpy.pathr   r   r   r   r/   r.   rO   rP   )r2   r   Z	LocalPathr   rV   r   r   r   r   r   test_read_from_py_localpath  s    z'TestReaders.test_read_from_py_localpathc             C   sD   t jjd| }t|d }tj|ddd}~|j  W d Q R X d S )Nr<   r   r=   r   )r?   r@   )r   r   r   r   r/   r.   read)r2   r   r   r   rl   r   r   r   test_close_from_py_localpath  s
    z(TestReaders.test_close_from_py_localpathc             C   s   t jjd dkrtjd tjdtdddtddd	d
tddddtddddtddddtddddtddddtdddd tdd!dd"td#d$d%d&td'd(d)gi}t jd*| d+d,}tj	|| t jd-| d+d,}tj	|| d S ).Nr   r   z3Sheets containing datetimes not supported by pyxlsbZTimerC   rK   r>   -   8   i r~      1   i@       *   i    9   #   i 	   )      i           i'	 r   i`
 5   i 5    %   r   i       6   Z
times_1900r=   )r?   Z
times_1904)
r/   r.   rM   r   rN   r   r   r   rO   rP   )r2   r   rV   r   r   r   r   test_reader_seconds  s&    

zTestReaders.test_reader_secondsc             C   s>  t jjd dkrtjd tjddgddgg}d| }td	d
t jddgddt jddgddt jddgddt jddgg|d}t j|ddd	gdd}t	j
|| ||_ddddg|_t j|ddd	gd}t	j
||dd ||_t j|d dd	gdd	gd!}t	j
||dd ddddg|_|jd"d#g|_t j|d$dd	gd}t	j
|| ttd|_|jd%d&g|_t j|d'dd	gdd}t	j
|| |jd	dgd	d(jd%d&g|_t j|d)ddd	gd!}t	j
|| |jd%d&g|_|jd"d#g|_t j|d*dd	gdd	gd!}t	j
|| t j|d+dd	gdd	gdd,}t	j
|| d S )-Nr   r   z3Sheets containing datetimes not supported by pyxlsbr   barrk   rn   testmultiindexrC   g      @z
2015-01-01TrK   g      @z
2015-01-02Fr>   g      @z
2015-01-03r~   g      @z
2015-01-04)r:   Z	mi_columnr   )r?   headerr@   r   r   Zmi_index)r?   r@   )rL   Zboth)r?   r@   r  Zilvl1Zilvl2Zmi_index_namec1c2Zmi_column_name)levelZname_with_intZ	both_nameZboth_name_skiprows)r?   r@   r  rD   )r/   r.   rM   r   rN   r   from_productr   r   rO   rP   r\   r:   Z	set_namesr   rZ   Z
set_levels)r2   r   mimi_filerV   r   r   r   r   test_read_excel_multiindex  s\    
z&TestReaders.test_read_excel_multiindexc             C   sT   d| }t j|dddgd}tjddg}tdd
ddggd
 |d}tj|| d S )Nr   index_col_noner   rC   )r?   r  r7   r8   keyvalrK   r>   r~   )r:   )r7   r8   )r
  r  )r/   r.   r   r  r   rO   rP   )r2   r   r  rW   Zexp_columnsrV   r   r   r   &test_read_excel_multiindex_header_only;  s
    z2TestReaders.test_read_excel_multiindex_header_onlyc       	      C   s"  d| }t jd d d d d gdddddgddd	d
dg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}td d!d"d#d$d%gd&d'd(d)d*d+ggd,d-d.d/d0d1gd,d-d.d/d0d1ggd d gd2}td d!d"d#d$d%gd d3}tj|||d4}tj|d5d,d6}tj|| ||_	tj|d7d,d-gd6}tj|| t jdddddgddd	d
dg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}td!d"d#d$d%gd'd(d)d*d+ggd,d-d.d/d0gd,d-d.d/d0ggd d gd2}td!d"d#d$d%gd d3}tj|||d4}tj|d8d,d6}tj|| ||_	tj|d9d,d-gd6}tj||d:d; d S )<NZtest_index_name_pre17ZR0C0ZR0C1ZR0C2ZR0C3ZR0C4ZR1C0ZR1C1ZR1C2ZR1C3ZR1C4ZR2C0ZR2C1ZR2C2ZR2C3ZR2C4ZR3C0ZR3C1ZR3C2ZR3C3ZR3C4ZR4C0ZR4C1ZR4C2ZR4C3ZR4C4ZC_l0_g0ZC_l0_g1ZC_l0_g2ZC_l0_g3ZC_l0_g4ZR0ZR_l0_g0ZR_l0_g1ZR_l0_g2ZR_l0_g3ZR_l0_g4ZR1ZR_l1_g0ZR_l1_g1ZR_l1_g2ZR_l1_g3ZR_l1_g4r   rC   rK   r>   r~   r   )rf   rg   rh   )r   )r\   r:   Zsingle_names)r?   r@   Zmulti_namesZsingle_no_namesZmulti_no_namesF)rL   )
rw   arrayr   r   r/   r   r.   rO   rP   r\   )	r2   r   r   r,   r:   r  sirV   r   r   r   r   test_excel_old_index_formatF  sR    z'TestReaders.test_excel_old_index_formatc             C   sB   d}x8dD ]0}t jt|d tjd| |d W d Q R X q
W d S )Nz#Passing a bool to header is invalidTF)r;   r<   )r  )TF)r   rF   ra   r/   r.   )r2   r   rI   argr   r   r   test_read_excel_bool_header_arg  s    
z+TestReaders.test_read_excel_bool_header_argc             C   s   t jjd dkrtjd t jd| dddgd}td	d
t jddgddt jddgddt jddgddt jddggddddgd}tj|| t jd| dt	j
ddgd}tj|| d S )Nr   r   z3Sheets containing datetimes not supported by pyxlsbZtestskiprowsZskiprows_listr   rK   )r?   rD   rC   g      @z
2015-01-01Tg      @z
2015-01-02Fr>   g      @z
2015-01-03r~   g      @z
2015-01-04rk   rn   r   r   )r:   )r/   r.   rM   r   rN   r   r   rO   rP   rw   r  )r2   r   r   rV   r   r   r   test_read_excel_skiprows_list  s     
z)TestReaders.test_read_excel_skiprows_listc             C   s@   d}t jd| |d}t jd| }|d | }tj|| d S )Nr   r<   )nrows)r/   r.   rO   rP   )r2   r   num_rows_to_pullr   rV   r   r   r   test_read_excel_nrows  s
    z!TestReaders.test_read_excel_nrowsc             C   s@   t jd| }t|}|d }t jd| |d}tj|| d S )Nr<   r   )r  )r/   r.   r[   rO   rP   )r2   r   rV   Znum_records_in_filer  r   r   r   r   0test_read_excel_nrows_greater_than_nrows_in_file  s
    z<TestReaders.test_read_excel_nrows_greater_than_nrows_in_filec             C   s4   d}t jt|d tjd| dd W d Q R X d S )Nz'nrows' must be an integer >=0)r;   r<   r   )r  )r   rF   rG   r/   r.   )r2   r   rI   r   r   r   +test_read_excel_nrows_non_integer_parameter  s    z7TestReaders.test_read_excel_nrows_non_integer_parameterc             C   s   d| }t j|dddd}t jdddgdd	d
gdd}d|j_tj|| t j|ddd}t jdd	d
gdddgd}tj|| t j|ddd}t jdddgdd}tj|| d S )NZtest_squeezeZtwo_columnsr   T)r?   r@   squeezerK   r>   r~   r   r   rn   )r   rk   )r?   r  )rk   rn   Z
one_columnrC   )	r/   r.   r	   r\   r   rO   Zassert_series_equalr   rP   )r2   r   r   r   rV   r   r   r   test_read_excel_squeeze  s    z#TestReaders.test_read_excel_squeezec             C   s>   t jtdd tjd| dd W d Q R X tjd|  d S )NF)Zraise_on_extra_warningsr<   r=   r   )rO   Zassert_produces_warningFutureWarningr/   r.   )r2   r   r   r   r   test_deprecated_kwargs  s    z"TestReaders.test_deprecated_kwargsc             C   sb   d| }ddddg}t jjddddgdd}t j||dd}t j|dd
dgd d}tj|| d S )Nr   r8   r
  r  r>   r~   r7   rC   rK   r   )rh   )r\   r:   r	  )r?   r@   r  )r8   r8   )r
  r  )r>   r~   )r>   r~   )r7   r7   )r
  r  )rC   rK   )rC   rK   )r   rC   )rK   r>   )r/   r   from_tuplesr   r.   rO   rP   )r2   r   	file_namer,   idxrV   rW   r   r   r   "test_no_header_with_list_index_col  s    z.TestReaders.test_no_header_with_list_index_col)F__name__
__module____qualname__r   fixturer6   rJ   rS   rU   markparametrizerX   r]   r^   r_   r`   rb   ri   rq   rr   rs   rv   ry   r}   r   r   r   r   rw   rx   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   rO   networkr   tdZskip_if_not_us_localer   Zslowr   r   r   
skip_if_noZcheck_file_leaksr   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r*   y   s   	1@"
		>



"

RHr*   c               @   s   e Zd Zejdddd Zdd Zejjdddd	g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jdddgdd Zdd  ZdS )!TestExcelFileReadT)r&   c             C   s2   t tj|d}|j|ddd |jtd| dS )zH
        Change directory and set engine for ExcelFile objects.
        )r   r+   r,   r-   	ExcelFileN)r   r/   r*  r0   r1   )r2   r   r3   r4   r5   r   r   r   r6     s    z#TestExcelFileRead.cd_and_set_enginec          "   C   s  t jd| }t j|dddgd}W d Q R X tdgdgdgtjgdggd	gd
}tj|| t jd| }t j|dddgd}W d Q R X ttjgdgtjgtjgdggd	gd
}tj|| t jd| }t j|dddgd}W d Q R X tdgdgdgtjgdggd	gd
}tj|| t jd| }t j|dddgd}W d Q R X ttjgdgtjgtjgdggd	gd
}tj|| d S )NZtest4r=   Fapple)r?   keep_default_na	na_valuesZNArC   rabbitrt   )r:   Ttest5z1.#QNANrx   )r/   r*  r.   r   rw   rx   rO   rP   )r2   r   r-   ru   rV   r   r   r   test_excel_passes_na  s0    "&"&z&TestExcelFileRead.test_excel_passes_na	na_filterNFc             C   s   i }|d k	r||d< t jd| "}t j|fdddgd|}W d Q R X |dkrldgd	gd
gdgdgg}ntjgd	gtjgtjgdgg}t|dgd}tj|| d S )Nr1  r/  r=   Tr+  )r?   r,  r-  Fz1.#QNANrC   rx   r.  rt   )r:   )r/   r*  r.   rw   rx   r   rO   rP   )r2   r   r1  kwargsr-   ru   rV   r   r   r   test_excel_passes_na_filter  s    z-TestExcelFileRead.test_excel_passes_na_filterc          !   C   sP  |dkrt jd tjd| *}tj|ddd}tj|ddgdd}W d Q R X tj||dd	 tj||dd	 tjd| &}|jddd
}|jddgdd}W d Q R X tj||dd	 tj||dd	 tjd| }tj|dddd}W d Q R X tj||jd d  tjd| }|jdddd}W d Q R X tj||jd d  d S )Nz.xlsbz3Sheets containing datetimes not supported by pyxlsbr<   r   )r?   r@   rC   )r?   rD   r@   F)rL   )r@   )rD   r@   )r?   r@   rz   )r@   rz   r{   r{   )	r   rN   r/   r*  r.   rO   rP   parser|   )r2   r   rH   r-   rQ   rR   rT   r   r   r   test_excel_table_sheet_by_index3  s$    
z1TestExcelFileRead.test_excel_table_sheet_by_indexc             C   s   |dkrt jd d}d}tj|| }|j|dd}W d Q R X tj|| }|jd|d}W d Q R X tj||dd	 tj||dd	 d S )
Nz.xlsbz3Sheets containing datetimes not supported by pyxlsbr<   r=   r   )r?   r@   )r@   r?   F)rL   )r   rN   r/   r*  r4  rO   rP   )r2   r   rH   r   r?   r-   Z	df1_parseZ	df2_parser   r   r   r   N  s    
z!TestExcelFileRead.test_sheet_namec             C   sf   d| }t j|dd|d}t|d,}t j|}t j|ddd}W d Q R X W d Q R X tj|| d S )Nr<   r=   r   )r?   r@   r   r   )r?   r@   )r/   r.   r   r*  rO   rP   )r2   r   r   r   rV   r   Zxlsr   r   r   r   r   `  s    $z(TestExcelFileRead.test_excel_read_bufferc             C   sP   t d| d.}tj|}tj|dd|d W d Q R X W d Q R X |jsLtd S )Nr<   r   r=   r   )r?   r@   r   )r   r/   r*  r.   closedr   )r2   r   r   r   Zxlsxr   r   r   test_reader_closes_filej  s    &z)TestExcelFileRead.test_reader_closes_filec             C   sJ   d}t jd| .}tjt|d t j|dd W d Q R X W d Q R X d S )Nz8Engine should not be specified when passing an ExcelFiler<   )r;   r   )r   )r/   r*  r   rF   rG   r.   )r2   r   rI   Zxlr   r   r   test_conflicting_excel_enginesr  s    z0TestExcelFileRead.test_conflicting_excel_enginesc             C   sR   t jd| |d}td| d}|j }W d Q R X t j||d}tj|| d S )Nr<   )r   r   )r/   r.   r   r   rO   rP   )r2   r   r   rV   r   r,   r   r   r   r   test_excel_read_binaryz  s
    z(TestExcelFileRead.test_excel_read_binaryc             C   s,   t jdgdgd}t jd}tj|| d S )Nu   ZColumn1)r:   zhigh_surrogate.xlsx)r/   r   r.   rO   rP   )r2   r   rV   r   r   r   r   test_excel_high_surrogate  s    
z+TestExcelFileRead.test_excel_high_surrogater   zdf_empty.xlsxzdf_equals.xlsxc             C   sf   t jdgdd}t jjddgddgd	}t jd
dgg||dd}t j|dddd
gd}tj|| d S )NZZI2)r   r7   r8   B.1ZI11ZI12)rh   rC   r>   r   )r\   r:   r   r=   r   )r?   r@   r  )r7   r8   )r7   r<  )r/   r   r   r  r   r.   rO   rP   )r2   r   r   r  colsrV   rW   r   r   r   test_header_with_index_col  s    z,TestExcelFileRead.test_header_with_index_colc             C   s   |dkrt jd d| }tj|}tj|ddgd|d}W d Q R X tjjtjdtjdfgtjdj tjdj gd	}tj	g |d
}t
j|| d S )Nr   z3Sheets containing datetimes not supported by pyxlsbZtest_datetime_mir   rC   )r  r@   r   z
02/29/2020z
03/01/2020)rh   )r:   )r   rN   r/   r*  r.   r   r  to_datetimeZto_pydatetimer   rO   rP   )r2   r   r   r   r-   r   Zexpected_column_indexrV   r   r   r   test_read_datetime_multiindex  s    
 z/TestExcelFileRead.test_read_datetime_multiindex)r   r!  r"  r   r#  r6   r0  r$  r%  r3  r5  r   r   r7  r8  r9  r:  r>  r@  r   r   r   r   r)    s   	&

r)  )+
contextlibr   r   	functoolsr   r   urllib.errorr   r   Znumpyrw   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr'  Zpandasr/   r   r   r   r	   Zpandas._testingZ_testingrO   contextmanagerr   r"   r   r(  r$  r   Zengine_paramsr   boolr   r!   r#  r)   r   r   r*   r)  r   r   r   r   <module>   sV   

      w