a
    Pf                  
   @  s&  d dl mZ 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Z d d
lmZ d dlm  mZ d dlZd dlmZmZm Z m!Z!m"Z" d dl#m$Z% d dl&m'Z'm(Z( e rej)j*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ej-de.ddgZ/dddddZ0dd Z1ej2dd e/D e3ddd  Z4ej2d!d" Z5ej2d#d$ Z6ej2d%d& Z7dd'dd(d)d*Z8d+ddd,d-d.d/Z9d0d1 Z:G d2d3 d3Z;G d4d5 d5Z<dS )6    )annotations)datetimetime)partial)BytesION)Path)URLError)
BadZipFile)using_pyarrow_string_dtype)is_platform_windows)	DataFrameIndex
MultiIndexSeriesread_csv)ArrowStringArrayStringArray).xls.xlsx.xlsm.xlsb.odsxlrdmarksopenpyxlpyxlsbodfcalaminepython_calaminestrbool)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vrFdS | dkrZ|d	krZdS |d	krn| d
v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   r   >   r   r   r   T)values)enginer"    r&   [/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/io/excel/test_readers.py_is_valid_engine_ext_pairF   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_marks[   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>f   s   
r0   )paramsZ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_exte   s    r3   c                 C  s   | \}}|S Nr&   r3   r%   r"   r&   r&   r'   r%   u   s    r%   c                 C  s   | \}}|S r4   r&   r5   r&   r&   r'   r"   {   s    r"   c                 C  s"   | dddd}t |dddd}|S )	zI
    Obtain the reference data from read_csv with the Python engine.
    iodatacsvz	test1.csvr   Tpython)	index_colZparse_datesr%   )r   )datapathfilepathdf_refr&   r&   r'   r=      s    r=   z
str | None)r"   r%   r#   c                 C  s   dS )Nnsr&   )r"   r%   r&   r&   r'   get_exp_unit   s    r?   r   None)expectedr"   r%   r#   c                 C  s$   d | j _t||}| j || _ d S r4   )indexnamer?   Zas_unit)rA   r"   r%   unitr&   r&   r'   adjust_expected   s    
rE   c                 C  s    | dkr| tjjdd d S )Nr   z3Sheets containing datetimes not supported by pyxlsbreason)applymarkerr)   markxfail)r%   r2   r&   r&   r'   xfail_datetimes_with_pyxlsb   s    rK   c                   @  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
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e"g dGe#dFe"dHdIej dJge#dFdCfgdKdL Z$dMdN Z%dOdP Z&ejj'e( dQdRdSdT Z)ejdUi dVfdWdXidVfgdYdZ Z*d[d\ Z+ejd]d^ed_d`gifdaedbgdcfgddde Z,dfdg Z-dhdi Z.djdk Z/dldm Z0dndo Z1dpdq Z2ej3drdsdt Z4dudv Z5dwdx Z6dydz Z7ejd{d|d}d|gd|d}gd~dd~gd~dggdd Z8dd Z9dd Z:ejj;ejj<dd Z=e>j?ejj<dd Z@ejj<dd ZAejjBdd ZCdd ZDe>Eddd ZFdd ZGdd ZHdd ZIejddej dddgfdej gd fgdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRe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 ZSdd ZTdd ZUdd ZVddĄ ZWddƄ ZXddȄ ZYddʄ ZZdd̄ Z[d)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%   r6   r7   excel
read_excelN)r   pdrP   chdirsetattrselfr%   r;   monkeypatchfuncr&   r&   r'   cd_and_set_engine   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 r4   rN   )rU   argskwargsr&   r&   r'   parser   s    z,TestReaders.test_engine_used.<locals>.parserparser   r   r   r   xlsxZxlsmZxlsbxlsZodstest1rb   )rS   rQ   	ExcelFileopenrP   )	rU   r"   r%   rV   r[   expected_defaultsfresultrA   r&   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v r8t d}n|d	krLt 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fooabcd{   TrueTr]   >   r   r   z8open_workbook() got an unexpected keyword argument 'foo'r   z/load() got an unexpected keyword argument 'foo'z8load_workbook() got an unexpected keyword argument 'foo'matchr`   Sheet1r   rb   )
sheet_namer:   Zengine_kwargs)reescaper)   raises	TypeErrorrQ   rP   )rU   r"   r%   re   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`rm   r`   ro   r      rp   r:   usecolsSheet2rb   rp   skiprowsr:   ry   r)   rs   
ValueErrorrQ   rP   rU   r"   ru   r&   r&   r'   test_usecols_int   s    $zTestReaders.test_usecols_intc                 C  sv   t || |ddg }t||| tjd| ddg dd}tjd| dd	gdg dd
}t|| t|| d S )NBCr`   ro   r   )r      rw   rx   rz   rb   r{   rK   rE   rQ   rP   tmassert_frame_equal)rU   r2   r%   r"   r=   rA   df1df2r&   r&   r'   test_usecols_list   s    
	zTestReaders.test_usecols_listc                 C  s  t || |g d }t||| tjd| dddd}tjd| ddgddd	}t|| t|| |d
dg }t||| tjd| dddd}tjd| ddgddd	}t|| t|| tjd| dddd}tjd| ddgddd	}t|| t|| d S )NAr   r   r`   ro   r   zA:Drx   rz   rb   r{   r   r   zA,C,DzA,C:Dr   )rU   r2   r%   r"   r=   rA   r   df3r&   r&   r'   test_usecols_str  sR    
	zTestReaders.test_usecols_strry   )r   rb   rw   )r   rw   rb   )rb   r   rw   )rb   rw   r   )rw   r   rb   )rw   rb   r   c                 C  sH   t || |ddg }t||| tjd| dd|d}t|| d S )Nr   r   r`   ro   r   rx   r   )rU   r2   r%   r"   ry   r=   rA   rg   r&   r&   r'   .test_usecols_diff_positional_int_columns_order5  s    
z:TestReaders.test_usecols_diff_positional_int_columns_orderr   Dc                 C  s>   |ddg }t t||_tjd| d|d}t|| d S )Nr   r   r`   ro   rp   ry   )rangelenrB   rQ   rP   r   r   )rU   r"   ry   r=   rA   rg   r&   r&   r'   .test_usecols_diff_positional_str_columns_orderE  s    z:TestReaders.test_usecols_diff_positional_str_columns_orderc                 C  s>   t || |}t||| tjd| ddd}t|| d S Nr`   ro   r   rp   r:   r   rU   r2   r%   r"   r=   rA   rg   r&   r&   r'   test_read_excel_without_slicingM  s
    
z+TestReaders.test_read_excel_without_slicingc                 C  sH   t || |ddg }t||| tjd| dddd}t|| d S )Nr   r   r`   ro   r   zA,D:Erx   r   r   r&   r&   r'   test_usecols_excel_range_strV  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: E1rm   r`   ro   zD:E1r   r}   r   r&   r&   r'   $test_usecols_excel_range_str_invalida  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 strrm   r`   ro   r   r   rx   r)   rs   rt   rQ   rP   r   r&   r&   r'   test_index_col_label_errorg  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 )Nr`   Sheet3r   r   )r   r   r   EFrC   columnsrB   )rQ   rP   r   r   r   r   rU   r"   rg   rA   r&   r&   r'   test_index_col_strr  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 )	Nr`   r   r   r   )r   r   r   rw   Zlevelscodesnamesr   )rQ   rP   r   r   r   r   r   r&   r&   r'   test_index_col_emptyz  s    z TestReaders.test_index_col_emptyr:   Nr   c                 C  sT   t jd| d|d}tg dg dgg dd}|rD||j| }t|| d S )Nr`   Sheet4r   )i1ax)i2by)z
Unnamed: 0Zcol1Zcol2r   )rQ   rP   r   	set_indexr   r   r   )rU   r"   r:   rg   rA   r&   r&   r'   test_index_col_with_unnamed  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'\]rm   r`   r   ry   r}   r   r&   r&   r'   %test_usecols_pass_non_existent_column  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.rm   r`   ZE1r   r   r}   r   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test2ro   rp   ZaaaaZbbbbbTestZTest1r   rQ   rP   r   r   r   )rU   r"   parsedrA   r&   r&   r'   test_excel_stop_iterator  s    z$TestReaders.test_excel_stop_iteratorc                 C  sd   t || |dkr.|dkr.|tjjdd tjd| dd}ttj	ggdgd	}t
|| d S )
Nr   r   z+Calamine can't extract error from ods filesrF   Ztest3ro   r   r   r   )rK   rH   r)   rI   rJ   rQ   rP   r   npnanr   r   )rU   r2   r%   r"   r   rA   r&   r&   r'   test_excel_cell_error_na  s    
z$TestReaders.test_excel_cell_error_nac           	      C  s   t || |}t||| tjd| ddd}tjd| ddgdd}t|| t|| tjd| dddd}t||jd d	  d S )
Nr`   ro   r   r   rz   rb   rp   r|   r:   rp   r:   
skipfooter)rK   rE   rQ   rP   r   r   iloc)	rU   r2   r%   r"   r=   rA   r   r   r   r&   r&   r'   test_excel_table  s    
zTestReaders.test_excel_tablec                 C  sV  t || t||}tg dg dg dg dg dttdddtddd	td
ddtdddtdddgd| dd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 )N)rb   r      r   )g      ?g      @gHzG?gQ?g&.>)TFTTF)rb   r   rw   r      )r   rw   cdei  
         iq  rb         i  rw   M8[]dtype)IntColFloatColBoolColStrColStr2ColZDateColZ
test_typesro   r   g      @r   r   r   rp   
converters)rK   r?   r   	from_dictr   r   rQ   rP   r   r   copylocrB   	enumerater   r   applyr    )rU   r2   r%   r"   rD   rA   basenameactualZfloat_expectedZicolrC   expr&   r&   r'   test_reader_special_dtypes  sJ    









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)rb   r   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   r   rw   ro   r   )r   r   r   r   rQ   rP   r   r   )rU   r"   r   rA   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}t|| t j|| dd	td
d}|d d|d< |d d	|d< t	g dt
d|d< t|| d}tjt|d& t j|| ddid W d    n1 s0    Y  d S )N	testdtyperb   r   rw   r         @      @      @      @      ?       @      @r   r   r   r   float64float32)r   r   r   r   r   r   Z001Z002Z003Z004r   z(Unable to convert column d to type int64rm   r   int64)rQ   rP   r   r   r   r   r   r    astyper   objectr)   rs   r~   )rU   r"   r   r   rA   ru   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   rQ   rP   r   r   )rU   r"   r   rA   r   r   r&   r&   r'   test_reader_dtype_str4  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 d"| d#|d< t|| d S )$Nr   r   No engine for filetype: ''rb   rw   ZInt64r   r   r   ZFloat64TFbooleanr   r   string   g      @z
2019-12-31r   )
r   r   r   r   r   rf   ghijtestrp   rB   rp   dtype_backendpyarrowr   )ArrowExtensionArrayc                   s$   i | ]}| j | d dqS )T)Zfrom_pandas)array)r.   colr  dfpar&   r'   
<dictcomp>t  s   z2TestReaders.test_dtype_backend.<locals>.<dictcomp>r  us)rD   r  r   r   )r)   skipr   r   rQ   NA	Timestampr   ensure_cleanto_excelrP   r  Zpandas.arraysr  r   r  Z	_pa_arraycast	timestampr?   r   r   )rU   r"   r  r%   	file_pathrg   rA   rD   r&   r  r'   test_dtype_backendV  sH    &

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   )rp   r  r   )r)   r  r   r   r   r   r  r  rQ   rP   r   )rU   r"   r  r"  rg   r&   r&   r'   test_dtype_backend_and_dtype  s    $z(TestReaders.test_dtype_backend_and_dtypezinfer_string takes precedencerF   c              	   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  r9   )r)   r  ZimportorskiprQ   option_contextr   r   r  Zobject_r  r   r  r  rP   r   r   r   )rU   r"   Zstring_storager  r  r"  rg   rA   r&   r&   r'   test_dtype_backend_string  s4    
$z%TestReaders.test_dtype_backend_stringzdtypes, exp_valuerb   a.1r   c           	      C  st   d}dt i|}| }tj|| |d}ttdgt dt|g|sFt nd dd}||ksdJ dt|| d S )NZdf_mangle_dup_col_dtypesr   r   rb   )r   r)  zdtype dict changed)r   r   rQ   rP   r   r   r   r   )	rU   r"   ZdtypesZ	exp_valuer   Z
dtype_dictZdtype_dict_copyrg   rA   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   )rU   r"   r   r   rA   r&   r&   r'   test_reader_spaces  s    zTestReaders.test_reader_spaceszbasename,expectedzgh-35802ZCOLUMNzTest (1)zgh-36122z
got 2nd sar   c                 C  s6   |dkrt d|  t|| }t|| d S )Nr   zSkipped for engine: )r)   r  rQ   rP   r   r   )rU   r%   r"   r   rA   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)rQ   rP   r   assert_contains_allkeyslistrU   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-  )r   r.  r.  r   )rQ   rP   r3  setr   r1  r2  r   )rU   r"   r   r6  r5  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   )ro   rz   r   )rQ   rP   r   r1  r2  r4  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blankro   r   )rQ   rP   r   r   r   )rU   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_2r   r:  ro   r   )r   rQ   rP   r   r   )rU   r"   rA   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\)$rm   r:  rb   )headerrp   r`   c                 S  s   dd S )Nrb   r   r&   r   r&   r&   r'   r   #  r   zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)ry   rp   )r)   rs   r~   rQ   rP   ZeroDivisionErrorrU   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   t || ttddgtddgddggddgd	}|d
krT|tjjdd |d u rx|dv rx|tjjdd td| }t	
|| d S )Nz
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@xDzTimothy BrownZDateColWithBigIntZ	StringColr   r   zMaybe not supported by openpyxlrF   )r   r   z)Defaults to openpyxl, maybe not supportedZtestdateoverflow)rK   r   rQ   r  rH   r)   rI   rJ   rP   r   r   )rU   r2   r%   r"   rA   rg   r&   r&   r'   test_date_conversion_overflow%  s$    
	z)TestReaders.test_date_conversion_overflowc           
      C  sf   t || d}d}|}t||| tj|| |dd}tj|| d|d}	t|| t|	| d S Nr`   ro   r   r   )r:   rp   r   )
rU   r2   r"   r%   r=   filenamerp   rA   r   r   r&   r&   r'   test_sheet_nameA  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 )Nr`   ro   r   r   ra   )rQ   rP   rd   r   r   )rU   r"   pthrA   rf   r   r&   r&   r'   test_excel_read_bufferR  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 )Nri   zUnknown engine: foorm   r   rN   r}   )rU   Z
bad_enginer&   r&   r'   test_bad_engine_raisesY  s    z"TestReaders.test_bad_engine_raisesrp   rw   r   r   ro   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 foundrm   r<  r   r}   )rU   r"   rp   ru   r&   r&   r'   test_bad_sheetname_raises^  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 )Nri   |)z(No such file or directoryu   没有那个文件或目录zFile o directory non esistente)rm   )joinr)   rs   FileNotFoundErrorrQ   rP   )rU   r"   Zbad_filern   r&   r&   r'   test_missing_file_raisesh  s    
z$TestReaders.test_missing_file_raisesc                 C  s   d}|d u rt }d}nD|dkr4ddlm} |}d}n&|dkrRddlm} |}d	}nt}d
}tj||d t	t
| W d    n1 s0    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'r   CalamineErrorzCannot detect file formatzFile is not a zip filerm   )r~   r   rP  r   rR  r	   r)   rs   rQ   rP   r   )rU   r%   Z
bad_streamerrorru   rP  rR  r&   r&   r'   test_corrupt_bytes_raisesu  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 )Nr`   ra   )content)rd   Zserve_contentreadrQ   rP   urlr   r   )rU   Z
httpserverr"   rf   	url_tablelocal_tabler&   r&   r'   test_read_from_http_url  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 )Nr`   ra   KeyZBodys3:///test1)Zstorage_options)rd   
put_objectrC   rQ   rP   r   r   )rU   r"   s3_public_buckets3sorf   rW  rX  rY  r&   r&   r'   test_read_from_s3_url  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 )Nr`   ra   r[  r   r]  r^  )	rd   r_  s3fsZS3FileSystemrC   rQ   rP   r   r   )	rU   r"   r`  ra  rf   rc  Zs3rX  rY  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 )Nr6   r7   rO   r`   zfile://localhost/ zfailing on )ospathrM  rQ   rP   r   platformunamestripr)   r  r   r   )rU   r"   r;   Z
localtablerY  rX  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 r   )rQ   rP   r   r   r   )rU   r"   str_pathrA   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   )localr`   ro   r   )	Zpy.pathro  rf  rg  rM  rQ   rP   r   r   )rU   r"   Z	LocalPathrl  rA   rm  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 )Nr`   ra   ro   r   r   )rf  rg  rM  rd   rQ   rP   rV  )rU   r"   rl  rf   r   r&   r&   r'   test_close_from_py_localpath  s
    z(TestReaders.test_close_from_py_localpathc                 C  s   t || |dkr.|dkr.|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   r   z0ODS file contains bad datetime (seconds as text)rF   ZTimerb   r   rw   -   8   i r      1   i@ r	     *   i    9   #   i 	   )      i           i'	 r   i`
 5   i 5    %   r   i       6   Z
times_1900ro   r   Z
times_1904)rK   rH   r)   rI   rJ   r   r   r   rQ   rP   r   r   )rU   r2   r%   r"   rA   r   r&   r&   r'   test_reader_seconds  s6    


zTestReaders.test_reader_secondsc           	   	   C  sJ  t || t||}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}||d
  d| d||d
 < tj|dddgdd}t	
|| ||_g d|_tj|dddgd}t	
|| ||_tj|dddgddgd}t	
|| 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 )*Nri   barr   r   testmultiindexrb   r   
2015-01-01Tr   r   
2015-01-02Frw   r   
2015-01-03r   r   
2015-01-04r   r   r   	mi_columnr   )rp   r?  r:   r   mi_indexr   bothrp   r:   r?  ilvl1ilvl2Zmi_index_namec1c2mi_column_name)levelZname_with_intZ	both_nameZboth_name_skiprows)rp   r:   r?  r|   )rK   r?   r   from_productr   rQ   r  r   rP   r   r   rB   r   Z	set_namesr3  r   Z
set_levels)	rU   r2   r%   r"   rD   mimi_filerA   r   r&   r&   r'   test_read_excel_multiindex
  sn    

	"

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   t || d| }tjddgddggddgd}t||}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}	|	|d  d| d|	|d < tj	||dd	gdd	gd}
t
|
|	 d S )Nr  ri   r  r   r   r  r  r   rb   r   r  Tr   r   r  Frw   r   r  r   r   r  )ri   ri   r  r  r  r  r   r   r   r   r  )rK   r   r  r?   r   rQ   r  from_arraysr   rP   r   r   )rU   r2   r%   r"   rp   Zidx_lvl2r  r  rD   rA   rg   r&   r&   r'   +test_read_excel_multiindex_blank_after_name^  s0    


"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   rb   rp   r?  r   r   keyvalr   r   r   )rQ   rP   r   r  r   r   r   )rU   r"   r  rg   Zexp_columnsrA   r&   r&   r'   &test_read_excel_multiindex_header_only  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	
|| 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   rb   r   rw   r   r   r   r   rB   r   Zsingle_namesr   r   Zmulti_namesrb   )r  r  r  r  r  )r  r  r  r  r  )r   rb   r   rw   r   Zsingle_no_namesZmulti_no_names)r   r  r   r   r   r   r   rQ   rP   r   r   rB   )	rU   r"   rE  r7   r   r  sirA   r   r&   r&   r'   test_excel_old_index_format  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)TFrm   r`   r?  r   )rU   r"   ru   argr&   r&   r'   test_read_excel_bool_header_arg  s    z+TestReaders.test_read_excel_bool_header_argc              	   C  st  t || t||}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}|d d| 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}|d d| d|d< t|| d S )Ntestskiprowsskiprows_listr   r   rp   r|   rb   r   r  Tr   r  Frw   r   r  r   r   r  r   r   r   r   r   c                 S  s   | dv S N)r   r   r&   r   r&   r&   r'   r     r   z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)rp   r|   r   )rK   r?   rQ   rP   r   r  r   r   r   r   r  rU   r2   r%   r"   rD   r   rA   r&   r&   r'   test_read_excel_skiprows  sT    

		z$TestReaders.test_read_excel_skiprowsc                 C  s   t || t||}tjd| ddd d}tddtdd	gd
dtddggg dd}|d d| d|d< t|| d S )Nr  r  c                 S  s   | dvS )N)rb   rw   r   r&   r   r&   r&   r'   r     r   zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r  rb   r   r  Trw   r   r  Fr   r   r   r   r   )	rK   r?   rQ   rP   r   r  r   r   r   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   r`   nrowsr  )rU   r"   num_rows_to_pullr   rA   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 )Nr`   r   r  )rQ   rP   r   r   r   )rU   r"   rA   Znum_records_in_filer  r   r&   r&   r'   0test_read_excel_nrows_greater_than_nrows_in_file5  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 >=0rm   r`   r   r  r}   r   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   K  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]).
        )rp   r?  r:   r|   Nrw   )rp   r?  r:   r|   r  )rQ   rP   r   r   r   )	rU   r"   rE  rp   r?  r:   r|   rA   r   r&   r&   r'   test_read_excel_nrows_paramsC  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 argumentsrm   r`   ro   r   r   rA  r&   r&   r'   test_deprecated_kwargsg  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  ))r   r   r  rw   r   r  ))r   r   r  rb   r   r  )r   rb   r  )r   rw   r  r  r   rb   r  )r   from_tuplesr   rQ   rP   r   r   )rU   r"   	file_namer7   idxrA   rg   r&   r&   r'   "test_no_header_with_list_index_colk  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      ?rb   r   numbersr   )r   r   r   rQ   rP   r   r   )rU   r"   r  r7   rA   rg   r&   r&   r'   test_one_col_noskip_blank_linex  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   r   rb   rw   r   r   r   Zmi_column_empty_rowsr   r  )	r   r  r   r   r   rQ   rP   r   r   )rU   r"   r  r   r7   rA   rg   r&   r&   r'    test_multiheader_two_blank_lines  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)rw   rw   N)rQ   rP   shape)rU   r"   r  rg   r&   r&   r'   test_trailing_blanks  s    
z TestReaders.test_trailing_blanksc                 C  sr   |dkrt d |dkr.|t jjdd t jtdd" tjd| d	d
 W d    n1 sd0    Y  d S )Nr   *chartsheets do not exist in the ODF formatr   4pyxlsb can't distinguish chartsheets from worksheetsrF   z"Worksheet named 'Chart1' not foundrm   
chartsheetZChart1r   	r)   r  rH   rI   rJ   rs   r~   rQ   rP   rU   r2   r%   r"   r&   r&   r'   test_ignore_chartsheets_by_str  s    
z*TestReaders.test_ignore_chartsheets_by_strc                 C  sr   |dkrt d |dkr.|t jjdd t jtdd" tjd| d	d
 W d    n1 sd0    Y  d S )Nr   r  r   r  rF   z0Worksheet index 1 is invalid, 1 worksheets foundrm   r  rb   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,rb   )decimalr|   )rb   gAc̝ė@g	hAABCZpoig2[j@)r   gHzG^@g{G@ZDEFZuytgUq&?)rw   g%Cq@g^@ZGHIZrezg)@)ZIdZNumber1ZNumber2ZText1ZText2ZNumber3r   r   r   r&   r&   r'   test_euro_decimal_format  s    z$TestReaders.test_euro_decimal_format)\__name__
__module____qualname__r)   fixturerX   rh   rv   r   r   r   rI   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&  rJ   r
   r(  r*  r+  r,  r7  r9  r;  r=  r>  rB  filterwarningsrC  rF  rH  rI  rK  rO  rT  network
single_cpurZ  tdZskip_if_not_us_localerb  rd  Zslowrk  rn  
skip_if_norp  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&   r&   r&   r'   rL      s  

3(

	

	2
0
$









	$T
!I6
	rL   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  sx   d}t jt|ddP td| d"}tj| |d W d    n1 sL0    Y  W d    n1 sj0    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.F)rn   Zraise_on_extra_warningsr`   ra   rN   )r   assert_produces_warningFutureWarningrd   rQ   rP   rV  )rU   r%   r"   ru   rf   r&   r&   r'   test_deprecate_bytes_input  s    z,TestExcelFileRead.test_deprecate_bytes_inputTrM   c                 C  s2   t tj|d}||ddd |td| dS )zH
        Change directory and set engine for ExcelFile objects.
        rN   r6   r7   rO   rc   N)r   rQ   rc   rR   rS   rT   r&   r&   r'   rX     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   r]   r`   rb   )rQ   rc   r%   )rU   r"   r%   re   rO   rg   rA   r&   r&   r'   rh     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test4ro   Fapplerp   Zkeep_default_naZ	na_valuesr  rb   rabbitr   r   Ttest51.#QNANr   )rQ   rc   rP   r   r   r   r   r   )rU   r"   rO   r   rA   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  ro   Tr  r  Fr  rb   r   r  r   r   )rQ   rc   rP   r   r   r   r   r   )rU   r"   r  rZ   rO   r   rA   r&   r&   r'   test_excel_passes_na_filter  s$    $z-TestExcelFileRead.test_excel_passes_na_filterc           
      C  s  t || |}t||| td| 4}tj|ddd}tj|ddgdd}W d    n1 sb0    Y  t|| t|| td| 0}|jddd}|jddgdd}W d    n1 s0    Y  t|| t|| td| "}tj|dddd}	W d    n1 s"0    Y  t|	|jd d	  td|  }|jdddd
}	W d    n1 sx0    Y  t|	|jd d	  d S )Nr`   r   r   rb   r   )r:   )r|   r:   r   r   )r:   r   )	rK   rE   rQ   rc   rP   r   r   r\   r   )
rU   r2   r%   r"   r=   rA   rO   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   t || |}t||| d}d}t|| }|j|dd}	W d    n1 sT0    Y  t|| }|jd|d}
W d    n1 s0    Y  t|	| t|
| d S rD  )rK   rE   rQ   rc   r\   r   r   )rU   r2   r%   r"   r=   rA   rE  rp   rO   Z	df1_parseZ	df2_parser&   r&   r'   rF  B  s    
,,z!TestExcelFileRead.test_sheet_namerp   rw   r   r   ro   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 rJ  )r)   rs   r~   rQ   rc   r\   )rU   r"   rp   ru   rO   r&   r&   r'   rK  T  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 )Nr`   ro   r   rp   r:   r%   ra   r   )rQ   rP   rd   rc   r   r   )rU   r%   r"   rG  rA   rf   r_   r   r&   r&   r'   rH  _  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 )Nr`   ra   ro   r   r  )rd   rQ   rc   rP   closed)rU   r%   r"   rf   r^   r&   r&   r'   test_reader_closes_filei  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 ExcelFiler`   rm   ri   rN   )rQ   rc   r)   rs   r~   rP   )rU   r"   ru   Zxlr&   r&   r'   test_conflicting_excel_enginesq  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 )Nr`   rN   ra   )rQ   rP   rd   rV  r   r   r   )rU   r%   r"   rA   rf   r7   r   r&   r&   r'   test_excel_read_binaryy  s
    &z(TestExcelFileRead.test_excel_read_binaryc                 C  s^   t d| d}tj||d}W d    n1 s20    Y  tjd| |d}t|| d S )Nr`   ra   rN   )rd   rQ   rP   r   r   )rU   r"   r%   rf   rg   rA   r&   r&   r'   %test_excel_read_binary_via_read_excel  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.xlsxra   zexceeds maximumrm   r   rb   r  )rd   r)   rs   r~   rQ   rP   )rU   r%   rf   r&   r&   r'   )test_read_excel_header_index_out_of_range  s    z;TestExcelFileRead.test_read_excel_header_index_out_of_rangerE  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  rb   rw   r   )rB   r   r   ro   r   r  )r   r   r  r   rQ   rP   r   r   )rU   rE  r  colsrA   rg   r&   r&   r'   test_header_with_index_col  s    z,TestExcelFileRead.test_header_with_index_colc                 C  s   t || d| }t|&}tj|ddgd|d}W d    n1 sH0    Y  t||}tjddgd| dd	}tj|d d |dd  g|d  |d  gd
}	t	g g |	d}
t
|
| d S )NZtest_datetime_mir   rb   )r?  r:   r%   z
2020-02-29z
2020-03-01r   r   r   r  r  )rK   rQ   rc   rP   r?   ZDatetimeIndexr   r  Zto_pydatetimer   r   r   )rU   r2   r%   r"   rf   rO   r   rD   ZdtiZexpected_column_indexrA   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 *rm   zio.excelz.readerabc)r)   rs   r~   rQ   r'  rA  r&   r&   r'   test_engine_invalid_option  s    z,TestExcelFileRead.test_engine_invalid_optionc                 C  sp   |dkrt d |dkr.|t jjdd td|  }|jdgksNJ W d    n1 sb0    Y  d S )Nr   r  r   r  rF   r  ro   )r)   r  rH   rI   rJ   rQ   rc   Zsheet_names)rU   r2   r%   r"   rO   r&   r&   r'   test_ignore_chartsheets  s    
z)TestExcelFileRead.test_ignore_chartsheetsc              
   C  s   t f}|d u r td|  n8|dkr>dd l}t |jjf}n|dkrXddlm} |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   r   rQ  Zcorruptzutf-8)encodingFrN   )r	   r)   r  r   ZbiffhrP  r   rR  r   r  r   
write_textr  rQ   rc   )rU   r%   r"   errorsr   rR  filer&   r&   r'   test_corrupt_files_closed  s     z+TestExcelFileRead.test_corrupt_files_closedN)r  r  r  r  r)   r  rX   rh   r  rI   r  r  r  rF  rK  rH  r  r  r  r  r  r  r  r  r  r  r&   r&   r&   r'   r    s4   

&





r  )=
__future__r   r   r   	functoolsr   r6   r   rf  pathlibr   rh  rq   urllib.errorr   zipfiler	   numpyr   r)   Zpandas._configr
   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  ZpandasrQ   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   rI   r  Z
pytestmarkr-   r*   r  Zengine_paramsr(   r,   r  r    r3   r%   r"   r=   r?   rE   rK   rL   r  r&   r&   r&   r'   <module>   s   
	



		          )