a
    d                  	   @   s  d dl m Z mZ d dl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mZ d dlmZ d dlZd dlZd dlm  mZ d dlZd dlmZmZmZmZ d dlmZ d d	lm Z m!Z! g d
Z"ej#de$dgdej#de$dgdej#de$dgdej#de$ddej#de$ddgZ%e&e'dddZ(dd Z)ej*dd e%D e&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 )"    )datetimetime)partial)BytesION)Path)URLError)
BadZipFile)	DataFrameIndex
MultiIndexSeries)ArrowStringArrayStringArray).xls.xlsx.xlsm.xlsb.odsxlrdmarksopenpyxlpyxlsbodf)read_extreturnc                 C   s   | 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	kr|dkrdS d
S )zm
    Filter out invalid (engine, ext) pairs instead of skipping, as that
    produces 500+ pytest.skips.
    r   r   r   Fr   r   r   r   r   T)values)enginer    r   k/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pandas/tests/io/excel/test_readers.py_is_valid_engine_ext_pair<   s    
r    c                 C   s    | j |f }tj|| jd}|S )z
    engine gives us a pytest.param object 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_marksQ   s    r$   c                 C   s*   g | ]"}t D ]}t||rt||qqS r   )read_ext_paramsr    r$   ).0Zengextr   r   r   
<listcomp>\   s   
r(   )paramsidsc                 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   k   s    r   c                 C   s   | \}}|S r-   r   r.   r   r   r   r   q   s    r   c                   @   sx  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
ejdg dg dg dg dg dg dgdd Ze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d&d' Zejd(d)d*gd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zejd=d)eg d>g d?g d>d@dAej dBgdCfdDdEe!e!dCee"g d>dDdFe"g d?dEdFg dGdHdIej dJgdCfgdKdL Z#dMdN Z$dOdP Z%dQdR Z&ejdSi dHfdTdUidVfgdWdX Z'dYdZ Z(ejd[d\ed]d^gifd_ed`gdafgdbdc Z)ddde Z*dfdg Z+dhdi Z,djdk Z-dldm Z.dndo Z/ej0dpdqdr Z1dsdt Z2dudv Z3dwdx Z4ejdydzd{dzgdzd{gd|d}d|gd|d}ggd~d Z5dd Z6dd Z7ejj8ejj9dd Z:e;j<ejj9dd Z=ejj9dd Z>ejj?dd Z@dd ZAe;Bddd ZCdd ZDdd ZEdd ZFejddej dddgfdej gd fgdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOejdddd{dVgd{d)fddd)d{dVgd)fddd{dVgd{dVgd)fddd{dVgd{d)fddd)d)d{d*gfddd)d)dd fgdd ZPdd ZQdd ZRdd ZSdd ZTddĄ ZUddƄ ZVddȄ ZWddʄ ZXd)S )TestReadersTZautousec                 C   s2   t tj|d}||ddd |td| dS )zG
        Change directory and set engine for read_excel calls.
        r   iodataexcel
read_excelN)r   pdr5   chdirsetattrselfr   datapathmonkeypatchfuncr   r   r   cd_and_set_enginex   s    zTestReaders.cd_and_set_enginec           	      C   s   dd }| tjd| dddddd}td	| d
}t|}W d    n1 sV0    Y  |d urn|}n||dd   }||ksJ d S )Nc                 _   s   | j S r-   r1   )r:   argskwargsr   r   r   parser   s    z,TestReaders.test_engine_used.<locals>.parserparser   r   r   r   xlsxZxlsmxlsbxlsodstest1rb   )r8   r6   	ExcelFileopenr5   )	r:   r   r   r<   rA   expected_defaultsfresultexpectedr   r   r   test_engine_used   s    (zTestReaders.test_engine_usedc              	   C   s   ddiddiddiddiddid}|dd  dv r@t d	}n&|dd  d
kr\t d}n
t d}|d urtjt|d2 tjd| dd||dd   d W d    n1 s0    Y  d S )NfooZabcd{   TrueTrC   rJ   >   rE   rF   z8open_workbook() got an unexpected keyword argument 'foo'rG   z/load() got an unexpected keyword argument 'foo'z8load_workbook() got an unexpected keyword argument 'foo'matchrH   Sheet1r   )
sheet_name	index_colZengine_kwargs)reescaper!   raises	TypeErrorr6   r5   )r:   r   r   rM   msgr   r   r   test_engine_kwargs   s&    
zTestReaders.test_engine_kwargsc                 C   s   d}t jt|d& tjd| dddd W d    n1 s>0    Y  t jt|d* tjd| dd	gddd
 W d    n1 s0    Y  d S )Nz Passing an integer for `usecols`rU   rH   rW   r      rX   rY   usecolsSheet2rJ   rX   skiprowsrY   rb   r!   r\   
ValueErrorr6   r5   r:   r   r^   r   r   r   test_usecols_int   s    $zTestReaders.test_usecols_intc                 C   s   |dkr|j tjjdd |jddgd}tjd| dd	g d
d}tjd| ddgd	g d
d}tj	||dd tj	||dd d S )Nr   3Sheets containing datetimes not supported by pyxlsbreasonBCcolumnsrH   rW   r   )r      r`   ra   rc   rJ   rd   FZcheck_names
node
add_markerr!   markxfailreindexr6   r5   tmassert_frame_equal)r:   r+   r   df_refdf1df2r   r   r   test_usecols_list   s&    	zTestReaders.test_usecols_listc                 C   sB  |dkr|j tjjdd |jg d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   rj   rk   Arm   rn   ro   rH   rW   r   zA:Dra   rc   rJ   rd   Frr   rm   rn   zA,C,DzA,C:Drs   r:   r+   r   r{   r|   r}   df3r   r   r   test_usecols_str   sZ    	zTestReaders.test_usecols_strrb   )r   rJ   r`   )r   r`   rJ   )rJ   r   r`   )rJ   r`   r   )r`   r   rJ   )r`   rJ   r   c                 C   sT   |dkr|j tjjdd |ddg }tjd| dd|d	}tj||d
d d S )Nr   rj   rk   r   rn   rH   rW   r   ra   Frr   	rt   ru   r!   rv   rw   r6   r5   ry   rz   )r:   r+   r   rb   r{   rP   rO   r   r   r   .test_usecols_diff_positional_int_columns_order  s    z:TestReaders.test_usecols_diff_positional_int_columns_orderrm   Dc                 C   sB   |ddg }t t||_tjd| d|d}tj||dd d S )Nrm   r   rH   rW   rX   rb   Frr   )rangelenindexr6   r5   ry   rz   )r:   r   rb   r{   rP   rO   r   r   r   .test_usecols_diff_positional_str_columns_order%  s    z:TestReaders.test_usecols_diff_positional_str_columns_orderc                 C   sJ   |dkr|j tjjdd |}tjd| ddd}tj||dd	 d S )
Nr   rj   rk   rH   rW   r   rX   rY   Frr   r   r:   r+   r   r{   rP   rO   r   r   r   test_read_excel_without_slicing-  s    z+TestReaders.test_read_excel_without_slicingc                 C   sT   |dkr|j tjjdd |ddg }tjd| ddd	d
}tj||dd d S )Nr   rj   rk   rn   r   rH   rW   r   zA,D:Era   Frr   r   r   r   r   r   test_usecols_excel_range_str9  s    z(TestReaders.test_usecols_excel_range_strc                 C   sJ   d}t jt|d$ tjd| ddd W d    n1 s<0    Y  d S )NzInvalid column name: E1rU   rH   rW   zD:E1r   rf   rh   r   r   r   $test_usecols_excel_range_str_invalidG  s    z0TestReaders.test_usecols_excel_range_str_invalidc                 C   sR   d}t jt|d, tjd| ddgddgd W d    n1 sD0    Y  d S )Nz(list indices must be integers.*, not strrU   rH   rW   r   rn   ra   r!   r\   r]   r6   r5   rh   r   r   r   test_index_col_label_errorM  s    z&TestReaders.test_index_col_label_errorc                 C   s<   t jd| ddd}tg dtg ddd}t|| d S )NrH   Sheet3r   r   )rm   rn   r   EFnamerp   r   )r6   r5   r	   r
   ry   rz   r:   r   rO   rP   r   r   r   test_index_col_strX  s
    zTestReaders.test_index_col_strc                 C   sR   t jd| dg dd}tg dtg gd g gd g ddd}t|| d S )	NrH   r   r   r   )r   r   r   r`   levelscodesnamesr   )r6   r5   r	   r   ry   rz   r   r   r   r   test_index_col_empty`  s    z TestReaders.test_index_col_emptyrY   Nrq   c                 C   sT   t jd| d|d}tg dg dgg dd}|rD||j| }t|| d S )NrH   Sheet4r   )i1ax)i2by)z
Unnamed: 0Zcol1Zcol2ro   )r6   r5   r	   	set_indexrp   ry   rz   )r:   r   rY   rO   rP   r   r   r   test_index_col_with_unnamedk  s    
z'TestReaders.test_index_col_with_unnamedc                 C   sJ   d}t jt|d$ tjd| dgd W d    n1 s<0    Y  d S )NzEUsecols do not match columns, columns expected but not found: \['E'\]rU   rH   r   rb   rf   rh   r   r   r   %test_usecols_pass_non_existent_columny  s    z1TestReaders.test_usecols_pass_non_existent_columnc                 C   sL   d}t jt|d& tjd| ddgd W d    n1 s>0    Y  d S )Nz['usecols' must either be list-like of all strings, all unicode, all integers or a callable.rU   rH   ZE1r   r   rf   rh   r   r   r   test_usecols_wrong_type  s    z#TestReaders.test_usecols_wrong_typec                 C   s8   t jd| dd}tddggddgd}t|| d S )	NZtest2rW   rX   ZaaaaZbbbbbTestZTest1ro   r6   r5   r	   ry   rz   )r:   r   parsedrP   r   r   r   test_excel_stop_iterator  s    z$TestReaders.test_excel_stop_iteratorc                 C   sT   |dkr|j tjjdd tjd| dd}ttj	ggdgd}t
|| d S )	Nr   rj   rk   Ztest3rW   r   r   ro   )rt   ru   r!   rv   rw   r6   r5   r	   npnanry   rz   )r:   r+   r   r   rP   r   r   r   test_excel_cell_error_na  s    z$TestReaders.test_excel_cell_error_nac                 C   s   |dkr|j tjjd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	d d  d S )Nr   rj   rk   rH   rW   r   r   rc   rJ   rX   re   rY   Frr   rX   rY   
skipfooter)
rt   ru   r!   rv   rw   r6   r5   ry   rz   ilocr   r   r   r   test_excel_table  s     zTestReaders.test_excel_tablec           
      C   sP  |dkr|j tjjdd tg dg dg dg dg d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
|| | }d|j|jd df< tj	|| dd}t
|| t|jD ]2\}}tj	|| d|d}||}	t
||	 q|d t|d< tj	|| ddtid}t
|| d S )Nr   rj   rk   )rJ   rq      r   )g      ?g      @gHzG?gQ?g&.>)TFTTF)rJ   rq   r`   r      )r   r`   cdei  
         iq  rJ         i  r`   )IntColFloatColBoolColStrColStr2ColZDateColZ
test_typesrW   r   g      @r   r   r   rX   
converters)rt   ru   r!   rv   rw   r	   	from_dictr   r6   r5   ry   rz   copylocr   	enumeraterp   r   applystr)
r:   r+   r   rP   basenameactualZfloat_expectedZicolr   expr   r   r   test_reader_special_dtypes  sL    






z&TestReaders.test_reader_special_dtypesc              
   C   sz   d}t g ddtjdddgg ddtjd	d
dgd}dd dd dd dd d}tj|| d|d}t|| d S )NZtest_converters)rJ   rq   r   r   g      )@gL2@g3333333@g:0y5>)Foundr   r   	Not foundr   1345)r   r   r   r   c                 S   s   | dkrt | S dS )N r   )intr   r   r   r   <lambda>      z4TestReaders.test_reader_converters.<locals>.<lambda>c                 S   s   | rd|  S t jS )Nr   )r   r   r   r   r   r   r     r   c                 S   s   | dkrdS dS )Nr   r   r   r   r   r   r   r   r     r   c                 S   s   | rt | S dS )Nr   )r   r   r   r   r   r     r   )r   r   rq   r`   rW   r   )r	   r   r   r   r6   r5   ry   rz   )r:   r   r   rP   r   r   r   r   r   test_reader_converters  s"    
	
z"TestReaders.test_reader_convertersc                 C   s   d}t || }tg dg dg dddtjdgdjg dd}t|| t j|| d	d
tdd}|d 	d	|d< |d 	d
|d< g d|d< t|| d}t
jt|d& t j|| ddid W d    n1 s0    Y  d S )N	testdtyperJ   rq   r`   r         @      @      @      @      ?       @      @r   r   r   r   ro   float64float32)r   r   r   dtyper   r   Z001Z002Z003Z004r   z(Unable to convert column d to type int64rU   r   int64)r6   r5   r	   r   r   rx   ry   rz   r   Zastyper!   r\   rg   )r:   r   r   r   rP   r^   r   r   r   test_reader_dtype  s,    	zTestReaders.test_reader_dtypezdtype,expectedr   r   r   r   r   r   r   r   r   r   r   2r   c                 C   s&   d}t j|| |d}t|| d S )Nr   r   r6   r5   ry   rz   )r:   r   r   rP   r   r   r   r   r   test_reader_dtype_str  s    z!TestReaders.test_reader_dtype_strc                    s  |dv rt d| d ttddgddtdd	gd
dtddgddtddgddttjdgddttjdgd
dttjdgddttjdgddttdgd ttjtjgddd
t|0}j	|ddd tj
|d|d}W d    n1 s0    Y  |dkrdd lddlm  t fddjD } |d jjjdd |d<  d d g|d!< n}t|| d S )"Nr   r   No engine for filetype: ''rJ   r`   ZInt64r   r   r   ZFloat64TFbooleanr   r   string   g      @z
2019-12-31rq   )
r   r   r   r   r   rN   ghijtestr   rX   dtype_backendpyarrowr   )ArrowExtensionArrayc                    s$   i | ]}| j | d dqS )T)Zfrom_pandas)array)r&   colr  dfpar   r   
<dictcomp>\  s   z2TestReaders.test_dtype_backend.<locals>.<dictcomp>r   us)unitr  )r!   skipr	   r   r6   NA	Timestampry   ensure_cleanto_excelr5   r  Zpandas.arraysr  rp   r  Z	_pa_arraycast	timestamprz   )r:   r   r  	file_pathrO   rP   r   r
  r   test_dtype_backend>  sD    &
zTestReaders.test_dtype_backendc                 C   s   |dv rt d| d ttjdgdtjgd}t|2}|j|ddd	 tj	|dd
dd}W d    n1 sv0    Y  t
|| d S )Nr   r   r   r   r   r   r   r  Fr  numpy_nullabler   )rX   r  r   )r!   r  r	   r   r   ry   r  r  r6   r5   rz   )r:   r   r  r  rO   r   r   r   test_dtype_backend_and_dtypek  s    $z(TestReaders.test_dtype_backend_and_dtypec              	   C   sJ  |dv rt d| d t d}td| ttjddgtjdtjd	tj	gtjdd
}t
|0}|j|ddd tj|ddd}W d    n1 s0    Y  |dkrtttjddgtjdttjd	tj	gtjdd
}n*tt|ddgt|d	d gd
}t
|| W d    n1 s<0    Y  d S )Nr   r   r   r  zmode.string_storager   r   r   r   r  r  Fr  r  r  python)r!   r  Zimportorskipr6   option_contextr	   r   r  Zobject_r  ry   r  r  r5   r   r   rz   )r:   r   Zstring_storager  r  r  rO   rP   r   r   r   test_dtype_backend_string{  s4    
$z%TestReaders.test_dtype_backend_stringzdtypes, exp_valuea.1r   rJ   c           	      C   s\   d}dt i|}| }tj|| |d}tdg|gd}||ksLJ dt|| d S )NZdf_mangle_dup_col_dtypesr   r   r   )r   r  zdtype dict changed)r   r   r6   r5   r	   ry   rz   )	r:   r   ZdtypesZ	exp_valuer   Z
dtype_dictZdtype_dict_copyrO   rP   r   r   r   test_dtype_mangle_dup_cols  s    z&TestReaders.test_dtype_mangle_dup_colsc                 C   s2   d}t || }tdg di}t|| d S )NZtest_spacesZtestcol)zthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  timesr   )r:   r   r   r   rP   r   r   r   test_reader_spaces  s    zTestReaders.test_reader_spaceszbasename,expectedzgh-35802ZCOLUMNzTest (1)zgh-36122z
got 2nd saro   c                 C   s6   |dkrt d|  t|| }t|| d S )Nr   zSkipped for engine: )r!   r  r6   r5   ry   rz   )r:   r   r   r   rP   r   r   r   r   test_read_excel_ods_nested_xml  s    	z*TestReaders.test_read_excel_ods_nested_xmlc                 C   sF   d}t j|| d d}g d}t||  |t| ksBJ d S )Ntest_multisheetr   )CharlieAlphaBeta)r6   r5   ry   assert_contains_allkeyslistr:   r   r   dfsexpected_keysr   r   r   test_reading_all_sheets  s
    z#TestReaders.test_reading_all_sheetsc                 C   sV   d}g d}t j|| |d}tt|}t||  t|t| ksRJ d S )Nr#  )rq   r$  r$  r   )r6   r5   r)  setry   r'  r(  r   )r:   r   r   r,  r+  r   r   r   %test_reading_multiple_specific_sheets  s    z1TestReaders.test_reading_multiple_specific_sheetsc                 C   s2   d}t j|| d d}g d}t||  d S )Nblank_with_headerr   )rW   rc   r   )r6   r5   ry   r'  r(  r*  r   r   r   "test_reading_all_sheets_with_blank  s    z.TestReaders.test_reading_all_sheets_with_blankc                 C   s$   t jd| dd}t|t  d S )NblankrW   r   )r6   r5   ry   rz   r	   )r:   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|| d S )NZcol_1Zcol_2ro   r0  rW   r   )r	   r6   r5   ry   rz   )r:   r   rP   r   r   r   r   !test_read_excel_blank_with_header  s    z-TestReaders.test_read_excel_blank_with_headerc                 C   s   t jtdd& tjd| dgd d W d    n1 s:0    Y  t jtdd( tjd| dd d d	 W d    n1 s0    Y  d S )
Nz \(sheet: Sheet1\)$rU   r0  rJ   )headerrX   rH   c                 S   s   dd S )NrJ   r   r   r   r   r   r   r      r   zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)rb   rX   )r!   r\   rg   r6   r5   ZeroDivisionErrorr:   r   r   r   r   *test_exception_message_includes_sheet_name  s    4z6TestReaders.test_exception_message_includes_sheet_namez-ignore:Cell A4 is marked:UserWarning:openpyxlc                 C   s   |dkr|j tjjdd ttddgtddgdd	ggd
dgd}|dkrj|j tjjdd |d u r|dv r|j tjjdd td| }t	
|| d S )Nr   rj   rk   z
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@xDzTimothy BrownZDateColWithBigIntZ	StringColro   r   zMaybe not supported by openpyxl)r   r   z)Defaults to openpyxl, maybe not supportedZtestdateoverflow)rt   ru   r!   rv   rw   r	   r6   r  r5   ry   rz   )r:   r+   r   r   rP   rO   r   r   r   test_date_conversion_overflow  s.    	z)TestReaders.test_date_conversion_overflowc                 C   sr   |dkr|j tjjdd d}d}tj|| |dd}tj|| d|d}tj||d	d
 tj||d	d
 d S Nr   rj   rk   rH   rW   r   r   )rY   rX   Frr   r   )r:   r+   r   r{   filenamerX   r|   r}   r   r   r   test_sheet_name#  s    
zTestReaders.test_sheet_namec                 C   sb   d| }t j|ddd}t|d,}t j|ddd}t|| W d    n1 sT0    Y  d S )NrH   rW   r   r   rI   )r6   r5   rL   ry   rz   )r:   r   pthrP   rN   r   r   r   r   test_excel_read_buffer5  s
    z"TestReaders.test_excel_read_bufferc                 C   sD   d}t jtdd tjd|d W d    n1 s60    Y  d S )NrR   zUnknown engine: foorU   r   r1   rf   )r:   Z
bad_enginer   r   r   test_bad_engine_raises<  s    z"TestReaders.test_bad_engine_raisesrX   r`   r   r   rW   c                 C   sH   d}t jt|d" tjd| |d W d    n1 s:0    Y  d S Nz?Worksheet index 3 is invalid|Worksheet named 'Sheet4' not foundrU   r2  r   rf   )r:   r   rX   r^   r   r   r   test_bad_sheetname_raisesA  s    z%TestReaders.test_bad_sheetname_raisesc                 C   sT   d| }d g d}tjt|d t| W d    n1 sF0    Y  d S )NrR   |)z(No such file or directoryu   没有那个文件或目录zFile o directory non esistente)rU   )joinr!   r\   FileNotFoundErrorr6   r5   )r:   r   Zbad_filerV   r   r   r   test_missing_file_raisesK  s    
z$TestReaders.test_missing_file_raisesc                 C   s|   d}|d u rt }d}n&|dkr4ddlm} |}d}nt}d}tj||d tt| W d    n1 sn0    Y  d S )	Ns   foozLExcel file format cannot be determined, you must specify an engine manually.r   r   )	XLRDErrorzFUnsupported format, or corrupt file: Expected BOF record; found b'foo'zFile is not a zip filerU   )	rg   r   rF  r   r!   r\   r6   r5   r   )r:   r   Z
bad_streamerrorr^   rF  r   r   r   test_corrupt_bytes_raisesX  s    z%TestReaders.test_corrupt_bytes_raisesc                 C   sh   t d| d }|j| d W d    n1 s40    Y  t|j}td| }t|| d S )NrH   rI   )content)rL   Zserve_contentreadr6   r5   urlry   rz   )r:   Z
httpserverr   rN   	url_tablelocal_tabler   r   r   test_read_from_http_urln  s
    .z#TestReaders.test_read_from_http_urlc                 C   s~   t d| d"}|jd| |d W d    n1 s60    Y  d|j d| }tj||d}td| }t|| d S )NrH   rI   ZKeyZBodys3:///test1)Zstorage_options)rL   
put_objectr   r6   r5   ry   rz   )r:   r   s3_public_buckets3sorN   rK  rL  rM  r   r   r   test_read_from_s3_urlw  s    0z!TestReaders.test_read_from_s3_urlc           	      C   s   t d| d"}|jd| |d W d    n1 s60    Y  dd l}|jf i |}| d|j d| }t|}W d    n1 s0    Y  td| }t|| d S )NrH   rI   rO  r   rP  rQ  )	rL   rR  s3fsZS3FileSystemr   r6   r5   ry   rz   )	r:   r   rS  rT  rN   rV  Zs3rL  rM  r   r   r   test_read_from_s3_object  s    0(z$TestReaders.test_read_from_s3_objectc                 C   s|   t j|dddd| }t|}ztd| }W n4 tyj   dt  }t	
d|  Y n0 t|| d S )Nr2   r3   r4   rH   zfile://localhost/ zfailing on )ospathrC  r6   r5   r   platformunamestripr!   r  ry   rz   )r:   r   r;   Z
localtablerM  rL  Zplatform_infor   r   r   test_read_from_file_url  s    
z#TestReaders.test_read_from_file_urlc                 C   sD   d| }t j|ddd}td| }t j|ddd}t|| d S )NrH   rW   r   r   )r6   r5   r   ry   rz   )r:   r   str_pathrP   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d| }tj|ddd}| d| }tj|ddd}t|| d S )Nr   )localrH   rW   r   )	Zpy.pathrb  rY  rZ  rC  r6   r5   ry   rz   )r:   r   Z	LocalPathr_  rP   r`  r   r   r   r   test_read_from_py_localpath  s    z'TestReaders.test_read_from_py_localpathc                 C   sX   t jd| }t|d*}tj|ddd}~|  W d    n1 sJ0    Y  d S )NrH   rI   rW   r   r   )rY  rZ  rC  rL   r6   r5   rJ  )r:   r   r_  rN   r   r   r   r   test_close_from_py_localpath  s
    z(TestReaders.test_close_from_py_localpathc                 C   s   |dkr|j tjjdd t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
|| tj	d-| d+d,}t
|| d S ).Nr   rj   rk   ZTimerJ   rq   r`   -   8   i r      1   i@ r      *   i    9   #   i 	   )      i           i'	 r   i`
 5   i 5    %   r   i       6   Z
times_1900rW   r   Z
times_1904)rt   ru   r!   rv   rw   r	   r   r   r6   r5   ry   rz   )r:   r+   r   r   rP   r   r   r   r   test_reader_seconds  s4    

zTestReaders.test_reader_secondsc              	   C   s:  |dkr|j tjjdd tddgddgg}d| }td	d
t	ddgddt	ddgddt	ddgddt	ddgg|d}tj
|ddd	gdd}t|| ||_g d|_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 g d|_|d!d"g|_tj
|d#dd	gd}t|| ttd|_|d$d%g|_tj
|d&dd	gdd}t|| |jd	dgd	d'd$d%g|_tj
|d(ddd	gd }t|| |d$d%g|_|d!d"g|_tj
|d)dd	gdd	gd }t|| tj
|d*dd	gdd	gdd+}t|| d S ),Nr   rj   rk   rR   barr   r   testmultiindexrJ   r   
2015-01-01Trq   r   
2015-01-02Fr`   r   
2015-01-03r   r   
2015-01-04ro   	mi_columnr   )rX   r5  rY   r   mi_indexr   rr   bothrX   rY   r5  ilvl1ilvl2Zmi_index_namec1c2mi_column_name)levelZname_with_intZ	both_nameZboth_name_skiprows)rX   rY   r5  re   )rt   ru   r!   rv   rw   r   from_productr	   r6   r  r5   ry   rz   r   rp   Z	set_namesr)  r   Z
set_levels)r:   r+   r   mimi_filerP   r   r   r   r   test_read_excel_multiindex  st    


z&TestReaders.test_read_excel_multiindexzsheet_name,idx_lvl2Zboth_name_blank_after_mi_namer   r   Zboth_name_multiple_blanksr   c           	   	   C   s   |dkr|j tjjdd d| }tjddgddggd	d
gd}tddt	ddgddt	ddgddt	ddgddt	ddgg|tj
g d|fddgdd}tj||ddgddgd}t|| d S ) Nr   z;Sheets containing datetimes not supported by pyxlsb (GH4679rk   r|  rR   r{  r   r   r  r  r   rJ   r   r}  Trq   r   r~  Fr`   r   r  r   r   r  )rR   rR   r{  r{  r  r  r   r   r  )rt   ru   r!   rv   rw   r   r  r	   r6   r  Zfrom_arraysr5   ry   rz   )	r:   r+   r   rX   Zidx_lvl2r  r  rP   rO   r   r   r   +test_read_excel_multiindex_blank_after_name;  s6    
z7TestReaders.test_read_excel_multiindex_blank_after_namec                 C   sP   d| }t j|dddgd}tddg}tg dgd	 |d
}t|| d S )Nr|  index_col_noner   rJ   rX   r5  r   rm   keyvalr   rq   ro   )r6   r5   r   r  r	   ry   rz   )r:   r   r  rO   Zexp_columnsrP   r   r   r   &test_read_excel_multiindex_header_onlyd  s
    z2TestReaders.test_read_excel_multiindex_header_onlyc           	      C   s  d| }t jt jt jt jt jt jgg dg dg dg dg dgtd}g d}tg d	g d
gg dg dgd d gd}tg d	d d}t|||d}tj|ddd}t	
|| ||_tj|dddgd}t	
|| t g dg dg dg dg dg}g d}tg dg dgg dg dgd d gd}tg dd d}t|||d}tj|ddd}t	
|| ||_tj|dddgd}t	j
||dd d S )NZtest_index_name_pre17)ZR0C0ZR0C1ZR0C2ZR0C3ZR0C4)ZR1C0ZR1C1ZR1C2ZR1C3ZR1C4)ZR2C0ZR2C1ZR2C2ZR2C3ZR2C4)ZR3C0ZR3C1ZR3C2ZR3C3ZR3C4)ZR4C0ZR4C1ZR4C2ZR4C3ZR4C4r   )ZC_l0_g0ZC_l0_g1ZC_l0_g2ZC_l0_g3ZC_l0_g4)ZR0R_l0_g0R_l0_g1R_l0_g2R_l0_g3R_l0_g4)ZR1R_l1_g0R_l1_g1R_l1_g2R_l1_g3R_l1_g4)r   rJ   rq   r`   r   r   r   r   r   rp   Zsingle_namesr   r   Zmulti_namesrJ   )r  r  r  r  r  )r  r  r  r  r  )r   rJ   rq   r`   r   Zsingle_no_namesZmulti_no_namesFrr   )r   r  r   objectr   r
   r	   r6   r5   ry   rz   r   )	r:   r   r;  r3   rp   r  sirP   r   r   r   r   test_excel_old_index_formato  sf    	z'TestReaders.test_excel_old_index_formatc              	   C   sR   d}dD ]D}t jt|d" tjd| |d W d    q1 sB0    Y  qd S )Nz#Passing a bool to header is invalid)TFrU   rH   r5  r   )r:   r   r^   argr   r   r   test_read_excel_bool_header_arg  s    z+TestReaders.test_read_excel_bool_header_argc              	   C   sJ  |dkr|j tjjdd tjd| dddgd}td	d
tddgddtddgddtddgddtddggg dd}t	
|| tjd| dtddgd}t	
|| tjd| ddd d}t	
|| tjd| ddg dd}tddtddgddtddgddtddggg dd}t	
|| d S )Nr   rj   rk   testskiprowsskiprows_listr   rq   rX   re   rJ   r   r}  Tr   r~  Fr`   r   r  r   r   r  r   ro   c                 S   s   | dv S N)r   rq   r   r   r   r   r   r     r   z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)rX   re   r   )rt   ru   r!   rv   rw   r6   r5   r	   r  ry   rz   r   r  r:   r+   r   r   rP   r   r   r   test_read_excel_skiprows  sX    		z$TestReaders.test_read_excel_skiprowsc                 C   sv   |dkr|j tjjdd tjd| ddd d}td	d
tddgddtddggg dd}t	
|| d S )Nr   rj   rk   r  r  c                 S   s   | dvS )N)rJ   r`   r   r   r   r   r   r   r     r   zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r  rJ   r   r}  Tr`   r   r  Fr   ro   )rt   ru   r!   rv   rw   r6   r5   r	   r  ry   rz   r  r   r   r   (test_read_excel_skiprows_callable_not_in  s$    	z4TestReaders.test_read_excel_skiprows_callable_not_inc                 C   s@   d}t jd| |d}t d| }|d | }t|| d S )Nr   rH   nrowsr   )r:   r   num_rows_to_pullr   rP   r   r   r   test_read_excel_nrows  s
    z!TestReaders.test_read_excel_nrowsc                 C   s@   t d| }t|}|d }t jd| |d}t|| d S )NrH   r   r  )r6   r5   r   ry   rz   )r:   r   rP   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   sH   d}t jt|d" tjd| dd W d    n1 s:0    Y  d S )Nz'nrows' must be an integer >=0rU   rH   r   r  rf   rh   r   r   r   +test_read_excel_nrows_non_integer_parameter  s    z7TestReaders.test_read_excel_nrows_non_integer_parameterz-filename,sheet_name,header,index_col,skiprowsr|  r  r  r  r  r  r  c                 C   s   | dv S r  r   r   r   r   r   r   -  r   zTestReaders.<lambda>c           	      C   sL   t j|| ||||djdd }t j|| ||||dd}t|| dS )z
        For various parameters, we should get the same result whether we
        limit the rows during load (nrows=3) or after (df.iloc[:3]).
        )rX   r5  rY   re   Nr`   )rX   r5  rY   re   r  )r6   r5   r   ry   rz   )	r:   r   r;  rX   r5  rY   re   rP   r   r   r   r   test_read_excel_nrows_params%  s$    z(TestReaders.test_read_excel_nrows_paramsc                 C   sD   t jtdd" td| dd W d    n1 s60    Y  d S )Nzbut 3 positional argumentsrU   rH   rW   r   r   r7  r   r   r   test_deprecated_kwargsI  s    z"TestReaders.test_deprecated_kwargsc                 C   sV   d| }g d}t jg ddd}t||dd}tj|dd	d
gd d}t|| d S )Nr|  ))rm   rm   r  r`   r   r  ))r   r   r  rJ   rq   r  )r   rJ   r  )rq   r`   r  r  r   rJ   r  )r   from_tuplesr	   r6   r5   ry   rz   )r:   r   	file_namer3   idxrP   rO   r   r   r   "test_no_header_with_list_index_colM  s    z.TestReaders.test_no_header_with_list_index_colc                 C   s>   d| }dt jddg}t|dgd}t|}t|| d S )NZone_col_blank_lineg      ?rJ   rq   Znumbersro   )r   r   r	   r6   r5   ry   rz   )r:   r   r  r3   rP   rO   r   r   r   test_one_col_noskip_blank_lineZ  s
    
z*TestReaders.test_one_col_noskip_blank_linec                 C   sj   d| }t ddg}tjtjgtjtjgddgddgg}t||d}tj|d	d
dgd}t|| d S )Nr|  )r   r   )r   rm   rJ   r`   rq   r   ro   Zmi_column_empty_rowsr   r  )	r   r  r   r   r	   r6   r5   ry   rz   )r:   r   r  rp   r3   rP   rO   r   r   r    test_multiheader_two_blank_linesb  s    $
z,TestReaders.test_multiheader_two_blank_linesc                 C   s$   d| }t |}|jdks J dS )z
        Sheets can contain blank cells with no data. Some of our readers
        were including those cells, creating many empty rows and columns
        Ztrailing_blanks)r`   r`   N)r6   r5   shape)r:   r   r  rO   r   r   r   test_trailing_blanksm  s    
z TestReaders.test_trailing_blanksc                 C   st   |dkrt d |dkr0|jt jjdd t jtdd" tj	d| d	d
 W d    n1 sf0    Y  d S )Nr   *chartsheets do not exist in the ODF formatr   4pyxlsb can't distinguish chartsheets from worksheetsrk   z"Worksheet named 'Chart1' not foundrU   
chartsheetZChart1r   
r!   r  rt   ru   rv   rw   r\   rg   r6   r5   r:   r+   r   r   r   r   r   test_ignore_chartsheets_by_strv  s    
z*TestReaders.test_ignore_chartsheets_by_strc                 C   st   |dkrt d |dkr0|jt jjdd t jtdd" tj	d| d	d
 W d    n1 sf0    Y  d S )Nr   r  r   r  rk   z0Worksheet index 1 is invalid, 1 worksheets foundrU   r  rJ   r   r  r  r   r   r   test_ignore_chartsheets_by_int  s    
z*TestReaders.test_ignore_chartsheets_by_intc                 C   sF   t jd| ddd}tg dg dg dgg dd	}t|| d S )
NZtest_decimal,rJ   )decimalre   )rJ   gAc̝ė@g	hAABCZpoig2[j@)rq   gHzG^@g{G@ZDEFZuytgUq&?)r`   g%Cq@g^@ZGHIZrezg)@)ZIdZNumber1ZNumber2ZText1ZText2ZNumber3ro   r   r   r   r   r   test_euro_decimal_format  s    z$TestReaders.test_euro_decimal_format)Y__name__
__module____qualname__r!   fixturer>   rQ   r_   ri   r~   r   rv   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r  r  r  r   r!  r"  r-  r/  r1  r3  r4  r8  filterwarningsr9  r<  r>  r?  rA  rE  rH  networkZ
single_cpurN  tdZskip_if_not_us_localerU  rW  Zslowr^  ra  
skip_if_norc  rd  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r/   w   s
  

5(



	3
-$




 




	!V
"I7
	r/   c                
   @   s   e Zd Zdd Zejdddd Zdd Zd	d
 Zej	
dg ddd Zdd Zdd Zej	
ddddgddg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d$d% Zej	
d&d'd(gd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4TestExcelFileReadc              	   C   sv   d}t jt|dP td| d"}tj| |d W d    n1 sJ0    Y  W d    n1 sh0    Y  d S )NzPassing bytes to 'read_excel' is deprecated and will be removed in a future version. To read from a byte string, wrap it in a `BytesIO` object.rU   rH   rI   r1   )ry   assert_produces_warningFutureWarningrL   r6   r5   rJ  )r:   r   r   r^   rN   r   r   r   test_deprecate_bytes_input  s
    z,TestExcelFileRead.test_deprecate_bytes_inputTr0   c                 C   s2   t tj|d}||ddd |td| dS )zH
        Change directory and set engine for ExcelFile objects.
        r1   r2   r3   r4   rK   N)r   r6   rK   r7   r8   r9   r   r   r   r>     s    z#TestExcelFileRead.cd_and_set_enginec                 C   sr   dddddd}t d| }|j}W d    n1 s:0    Y  |d urR|}n||dd   }||ksnJ d S )Nr   r   r   r   rC   rH   rJ   )r6   rK   r   )r:   r   r   rM   r4   rO   rP   r   r   r   rQ     s    $z"TestExcelFileRead.test_engine_usedc                 C   s  t d| $}t j|dddgd}W d    n1 s80    Y  tdgdgdgtjgdggd	gd
}t|| t d| $}t j|dddgd}W d    n1 s0    Y  ttjgdgtjgtjgdggd	gd
}t|| t d| $}t j|dddgd}W d    n1 s"0    Y  tdgdgdgtjgdggd	gd
}t|| t d| $}t j|dddgd}W d    n1 s0    Y  ttjgdgtjgtjgdggd	gd
}t|| d S )NZtest4rW   FapplerX   Zkeep_default_naZ	na_valuesr  rJ   rabbitr   ro   Ttest51.#QNANr   )r6   rK   r5   r	   r   r   ry   rz   )r:   r   r4   r   rP   r   r   r   test_excel_passes_na  s@    
$
$ 
&
& z&TestExcelFileRead.test_excel_passes_na	na_filter)NTFc                 C   s   i }|d ur||d< t d| ,}t j|fdddgd|}W d    n1 sT0    Y  |du rd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|| d S )Nr  r  rW   Tr  r  Fr  rJ   r   r  r   ro   )r6   rK   r5   r   r   r	   ry   rz   )r:   r   r  r@   r4   r   rP   r   r   r   test_excel_passes_na_filter  s$    $z-TestExcelFileRead.test_excel_passes_na_filterc                 C   s  |dkr|j tjjdd td| 4}tj|ddd}tj|ddgdd}W d    n1 sf0    Y  tj	||d	d
 tj	||d	d
 td| 0}|j
ddd}|j
ddgdd}W d    n1 s0    Y  tj	||d	d
 tj	||d	d
 td| "}tj|dddd}W d    n1 s60    Y  t	||jd d  td|  }|j
dddd}W d    n1 s0    Y  t	||jd d  d S )Nr   rj   rk   rH   r   r   rJ   r   Frr   )rY   )re   rY   r   r   )rY   r   )rt   ru   r!   rv   rw   r6   rK   r5   ry   rz   rB   r   )r:   r+   r   r{   r4   r|   r}   r   r   r   r   test_excel_table_sheet_by_index  s,    2020z1TestExcelFileRead.test_excel_table_sheet_by_indexc           	      C   s   |dkr|j tjjdd d}d}t|| }|j|dd}W d    n1 sX0    Y  t|| }|jd|d}W d    n1 s0    Y  tj	||d	d
 tj	||d	d
 d S r:  )
rt   ru   r!   rv   rw   r6   rK   rB   ry   rz   )	r:   r+   r   r{   r;  rX   r4   Z	df1_parseZ	df2_parser   r   r   r<  $  s    ,,z!TestExcelFileRead.test_sheet_namerX   r`   r   r   rW   c              	   C   sp   d}t jt|dJ td| }|j|d W d    n1 sD0    Y  W d    n1 sb0    Y  d S r@  )r!   r\   rg   r6   rK   rB   )r:   r   rX   r^   r4   r   r   r   rA  8  s    z+TestExcelFileRead.test_bad_sheetname_raisesc              	   C   s   d| }t j|dd|d}t|dJ}t | }t j|ddd}W d    n1 sV0    Y  W d    n1 st0    Y  t|| d S )NrH   rW   r   rX   rY   r   rI   r   )r6   r5   rL   rK   ry   rz   )r:   r   r   r=  rP   rN   rF   r   r   r   r   r>  C  s    Lz(TestExcelFileRead.test_excel_read_bufferc              	   C   sx   t d| dL}t|"}tj|dd|d W d    n1 sB0    Y  W d    n1 s`0    Y  |jstJ d S )NrH   rI   rW   r   r  )rL   r6   rK   r5   closed)r:   r   r   rN   rD   r   r   r   test_reader_closes_fileM  s    Nz)TestExcelFileRead.test_reader_closes_filec              	   C   sr   d}t d| L}tjt|d t j|dd W d    n1 sF0    Y  W d    n1 sd0    Y  d S )Nz8Engine should not be specified when passing an ExcelFilerH   rU   rR   r1   )r6   rK   r!   r\   rg   r5   )r:   r   r^   Zxlr   r   r   test_conflicting_excel_enginesU  s    z0TestExcelFileRead.test_conflicting_excel_enginesc                 C   sj   t jd| |d}td| d}| }W d    n1 s>0    Y  t jt||d}t|| d S )NrH   r1   rI   )r6   r5   rL   rJ  r   ry   rz   )r:   r   r   rP   rN   r3   r   r   r   r   test_excel_read_binary]  s
    &z(TestExcelFileRead.test_excel_read_binaryc                 C   sZ   t d| d}t|}W d    n1 s.0    Y  tjd| |d}t|| d S )NrH   rI   r1   )rL   r6   r5   ry   rz   )r:   r   r   rN   rO   rP   r   r   r   %test_excel_read_binary_via_read_excelg  s    (z7TestExcelFileRead.test_excel_read_binary_via_read_excelc              	   C   sn   t ddP}tjtdd" tj|ddgd W d    n1 sB0    Y  W d    n1 s`0    Y  d S )Nzdf_header_oob.xlsxrI   zexceeds maximumrU   r   rJ   r  )rL   r!   r\   rg   r6   r5   )r:   r   rN   r   r   r   )test_read_excel_header_index_out_of_rangen  s    z;TestExcelFileRead.test_read_excel_header_index_out_of_ranger;  zdf_empty.xlsxzdf_equals.xlsxc                 C   s`   t dgdd}tjddgddgd}td	d
gg||dd}tj|dddd	gd}t|| d S )NZZI2r   r  )r   zB.1ZI11ZI12r  rJ   r`   r   )r   rp   r   rW   r   r  )r
   r   r  r	   r6   r5   ry   rz   )r:   r;  r  colsrP   rO   r   r   r   test_header_with_index_colt  s    z,TestExcelFileRead.test_header_with_index_colc           	      C   s   |dkr|j tjjdd d| }t|&}tj|ddgd|d}W d    n1 s\0    Y  tj	t
dt
d	fgt
d t
d	 gd
}tg g |d}t|| d S )Nr   rj   rk   Ztest_datetime_mir   rJ   )r5  rY   r   z
02/29/2020z
03/01/2020r  r  )rt   ru   r!   rv   rw   r6   rK   r5   r   r  to_datetimeZto_pydatetimer	   ry   rz   )	r:   r+   r   r   rN   r4   r   Zexpected_column_indexrP   r   r   r   test_read_datetime_multiindex  s"    4z/TestExcelFileRead.test_read_datetime_multiindexc              	   C   sf   t jtddD td| dd W d    n1 s:0    Y  W d    n1 sX0    Y  d S )NzValue must be one of *rU   zio.excelz.readerabc)r!   r\   rg   r6   r  r7  r   r   r   test_engine_invalid_option  s    z,TestExcelFileRead.test_engine_invalid_optionc                 C   sr   |dkrt d |dkr0|jt jjdd td|  }|jdgksPJ W d    n1 sd0    Y  d S )Nr   r  r   r  rk   r  rW   )	r!   r  rt   ru   rv   rw   r6   rK   Zsheet_names)r:   r+   r   r   r4   r   r   r   test_ignore_chartsheets  s    
z)TestExcelFileRead.test_ignore_chartsheetsc              
   C   s   t f}|d u r td|  n|dkr<dd l}t |jjf}td| r}t|j	ddd t
d6 ztj||d W n |y   Y n0 W d    n1 s0    Y  W d    n1 s0    Y  d S )	NzInvalid test for engine=r   r   Zcorruptzutf-8)encodingFr1   )r   r!   r  r   ZbiffhrF  ry   r  r   
write_textr  r6   rK   )r:   r   r   errorsr   filer   r   r   test_corrupt_files_closed  s    z+TestExcelFileRead.test_corrupt_files_closedN)r  r  r  r  r!   r  r>   rQ   r  rv   r  r  r  r<  rA  r>  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s4   

&





r  )0r   r   	functoolsr   r2   r   rY  pathlibr   r[  rZ   urllib.errorr   zipfiler   numpyr   r!   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  Zpandasr6   r	   r
   r   r   Zpandas._testingZ_testingry   Zpandas.core.arraysr   r   r%   r"   r  Zengine_paramsr   boolr    r$   r  r,   r   r   r/   r  r   r   r   r   <module>   sv   
	


          3