o
    թZh                  
   @  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 r|e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/d5ddZ0dd Z1ej2dd e/D e3dd d! Z4ej2d"d# Z5ej2d$d Z6ej2d%d& Z7d6d(d)Z8d7d-d.Z9d/d0 Z:G d1d2 d2Z;G d3d4 d4Z<dS )8    )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read_extstrreturnboolc                 C  s   | j d } | dkr|dkrdS | dkr|dkrdS |dkr#| dvr#dS | dkr-|d	kr-dS |d	kr7| d
vr7dS | dkrA|dkrAd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&   Y/var/www/html/lang_env/lib/python3.10/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     | j S )zS
    Fixture for Excel reader engine and read_ext, only including valid pairs.
    )r*   )requestr&   r&   r'   engine_and_read_exte   s   r4   c                 C  s   | \}}|S Nr&   r4   r%   r    r&   r&   r'   r%   u      r%   c                 C  s   | \}}|S r5   r&   r6   r&   r&   r'   r    {   r7   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?   
str | Nonec                 C  s   dS )Nnsr&   )r    r%   r&   r&   r'   get_exp_unit   s   rB   expectedr   Nonec                 C  s$   d | j _t||}| j || _ d S r5   )indexnamerB   Zas_unit)rC   r    r%   unitr&   r&   r'   adjust_expected   s   
rH   c                 C  s$   | dkr| tjjdd d S d S )Nr   z3Sheets containing datetimes not supported by pyxlsbreason)applymarkerr)   markxfail)r%   r3   r&   r&   r'   xfail_datetimes_with_pyxlsb   s   rN   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  2   t tj|d}||ddd |td| dS )zG
        Change directory and set engine for read_excel calls.
        r%   r8   r9   excel
read_excelN)r   pdrT   chdirsetattrselfr%   r=   monkeypatchfuncr&   r&   r'   cd_and_set_engine      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 s+w   Y  |d ur7|}n||dd   }||ksEJ d S )Nc                 _  r2   r5   rR   )rY   argskwargsr&   r&   r'   parser   s   z,TestReaders.test_engine_used.<locals>.parserparser   r   r   r   xlsxZxlsmZxlsbxlsZodstest1rb   )rW   rU   	ExcelFileopenrT   )	rY   r    r%   rZ   r`   expected_defaultsfresultrC   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 rt d}n|d	kr&t d
}nt d}|d urZtjt|d tjd| dd||dd   d W d    d S 1 sSw   Y  d S d S )Nfooabcd{   TrueTrb   >   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'matchre   Sheet1r   rg   )
sheet_namer<   Zengine_kwargs)reescaper)   raises	TypeErrorrU   rT   )rY   r    r%   rj   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w   Y  t jt|d tjd| dd	gddd
 W d    d S 1 sDw   Y  d S )Nz Passing an integer for `usecols`rr   re   rt   r      ru   r<   usecolsSheet2rg   ru   skiprowsr<   r~   r)   rx   
ValueErrorrU   rT   rY   r    rz   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Cre   rt   r   )r      r|   r}   r   rg   r   rN   rH   rU   rT   tmassert_frame_equal)rY   r3   r%   r    r?   rC   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   re   rt   r   zA:Dr}   r   rg   r   r   r   zA,C,DzA,C:Dr   )rY   r3   r%   r    r?   rC   r   df3r&   r&   r'   test_usecols_str  sR   
	zTestReaders.test_usecols_strr~   )r   rg   r|   )r   r|   rg   )rg   r   r|   )rg   r|   r   )r|   r   rg   )r|   rg   r   c                 C  sH   t || |ddg }t||| tjd| dd|d}t|| d S )Nr   r   re   rt   r   r}   r   )rY   r3   r%   r    r~   r?   rC   rl   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   re   rt   ru   r~   )rangelenrE   rU   rT   r   r   )rY   r    r~   r?   rC   rl   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 Nre   rt   r   ru   r<   r   rY   r3   r%   r    r?   rC   rl   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   re   rt   r   zA,D:Er}   r   r   r&   r&   r'   test_usecols_excel_range_strV  s   
z(TestReaders.test_usecols_excel_range_strc                 C  sL   d}t jt|d tjd| ddd W d    d S 1 sw   Y  d S )NzInvalid column name: E1rr   re   rt   zD:E1r   r   r   r&   r&   r'   $test_usecols_excel_range_str_invalida  s   "z0TestReaders.test_usecols_excel_range_str_invalidc                 C  sT   d}t jt|d tjd| ddgddgd W d    d S 1 s#w   Y  d S )Nz(list indices must be integers.*, not strrr   re   rt   r   r   r}   r)   rx   ry   rU   rT   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 )Nre   Sheet3r   r   )r   r   r   EFrF   columnsrE   )rU   rT   r   r   r   r   rY   r    rl   rC   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 )	Nre   r   r   r   )r   r   r   r|   Zlevelscodesnamesr   )rU   rT   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}|r"||j| }t|| d S )Nre   Sheet4r   )i1ax)i2by)z
Unnamed: 0Zcol1Zcol2r   )rU   rT   r   	set_indexr   r   r   )rY   r    r<   rl   rC   r&   r&   r'   test_index_col_with_unnamed  s   
z'TestReaders.test_index_col_with_unnamedc                 C  sL   d}t jt|d tjd| dgd W d    d S 1 sw   Y  d S )NzEUsecols do not match columns, columns expected but not found: \['E'\]rr   re   r   r~   r   r   r&   r&   r'   %test_usecols_pass_non_existent_column  s
   "z1TestReaders.test_usecols_pass_non_existent_columnc                 C  sN   d}t jt|d tjd| ddgd W d    d S 1 s w   Y  d S )Nz['usecols' must either be list-like of all strings, all unicode, all integers or a callable.rr   re   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test2rt   ru   ZaaaaZbbbbbTestZTest1r   rU   rT   r   r   r   )rY   r    parsedrC   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 filesrI   Ztest3rt   r   r   r   )rN   rK   r)   rL   rM   rU   rT   r   npnanr   r   )rY   r3   r%   r    r   rC   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 )
Nre   rt   r   r   r   rg   ru   r   r<   ru   r<   
skipfooter)rN   rH   rU   rT   r   r   iloc)	rY   r3   r%   r    r?   rC   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 ]\}	}
tj|| d|	d}||
}t	|| qt|d t|d< tj|| ddtid}t	|| d S )N)rg   r      r   )g      ?g      @gHzG?gQ?g&.>)TFTTF)rg   r   r|   r      )r   r|   cdei  
         iq  rg         i  r|   M8[]dtype)IntColFloatColBoolColStrColStr2ColZDateColZ
test_typesrt   r   g      @r   r   r   ru   
converters)rN   rB   r   	from_dictr   r   rU   rT   r   r   copylocrE   	enumerater   r   applyr!   )rY   r3   r%   r    rG   rC   basenameactualZfloat_expectedZicolrF   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)rg   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>
  s    z4TestReaders.test_reader_converters.<locals>.<lambda>c                 S  s   | rd|  S t jS )Nr   )r   r   r   r&   r&   r'   r     s    c                 S  s   | dkrdS dS )Nr   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   r|   rt   r   )r   r   r   r   rU   rT   r   r   )rY   r    r   rC   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    d S 1 srw   Y  d S )N	testdtyperg   r   r|   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 int64rr   r   int64)rU   rT   r   r   r   r   r   r!   astyper   objectr)   rx   r   )rY   r    r   r   rC   rz   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   rU   rT   r   r   )rY   r    r   rC   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|}j	|ddd tj
|d|d}W d    n1 sw   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: ''rg   r|   ZInt64r   r   r   ZFloat64TFbooleanr   r   string   g      @z
2019-12-31r   )
r   r   r   r   r   rk   ghijtestru   rE   ru   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)rG   r  r   r   )r)   skipr   r   rU   NA	Timestampr   ensure_cleanto_excelrT   r  Zpandas.arraysr  r   r  Z	_pa_arraycast	timestamprB   r  r   )rY   r    r  r%   	file_pathrl   rC   rG   r&   r  r'   test_dtype_backendV  sJ   
zTestReaders.test_dtype_backendc                 C  s   |dv rt d| d ttjdgdtjgd}t|}|j|ddd	 tj	|dd
dd}W d    n1 s;w   Y  t
|| d S )Nr	  r
  r  r   r   r   r   r  Fr  numpy_nullabler   )ru   r  r   )r)   r   r   r   r   r   r#  r$  rU   rT   r   )rY   r    r  r'  rl   r&   r&   r'   test_dtype_backend_and_dtype  s   z(TestReaders.test_dtype_backend_and_dtypezinfer_string takes precedencerI   c              	   C  sH  |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
|}|j|ddd tj|ddd}W d    n1 sQw   Y  |dkrwt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    d S 1 sw   Y  d S )Nr	  r
  r  r  zmode.string_storager   r   r   r   r)  r  Fr  r*  r  r;   )r)   r   ZimportorskiprU   option_contextr   r   r  Zobject_r!  r   r#  r$  rT   r   r   r   )rY   r    Zstring_storager  r  r'  rl   rC   r&   r&   r'   test_dtype_backend_string  s8   
"z%TestReaders.test_dtype_backend_stringzdtypes, exp_valuerg   a.1r  c           	      C  st   d}dt i|}| }tj|| |d}ttdgt dt|g|s#t nd dd}||ks2J dt|| d S )NZdf_mangle_dup_col_dtypesr   r   rg   )r   r.  zdtype dict changed)r  r   rU   rT   r   r   r   r   )	rY   r    ZdtypesZ	exp_valuer   Z
dtype_dictZdtype_dict_copyrl   rC   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   )rY   r    r   r   rC   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   rU   rT   r   r   )rY   r%   r    r   rC   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s!J d S )Ntest_multisheetr   )CharlieAlphaBeta)rU   rT   r   assert_contains_allkeyslistrY   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s)J d S )Nr2  )r   r3  r3  r   )rU   rT   r8  setr   r6  r7  r   )rY   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   )rt   r   r   )rU   rT   r   r6  r7  r9  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blankrt   r   )rU   rT   r   r   r   )rY   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?  rt   r   )r   rU   rT   r   r   )rY   r    rC   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w   Y  t jtdd tjd| dd d d	 W d    d S 1 sAw   Y  d S )
Nz \(sheet: Sheet1\)$rr   r?  rg   )headerru   re   c                 S  s   dd S )Nrg   r   r&   r   r&   r&   r'   r   #      zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)r~   ru   )r)   rx   r   rU   rT   ZeroDivisionErrorrY   r    r&   r&   r'   *test_exception_message_includes_sheet_name  s   "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r*|tjjdd |d u r<|dv r<|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 openpyxlrI   )r   r   z)Defaults to openpyxl, maybe not supportedZtestdateoverflow)rN   r   rU   r"  rK   r)   rL   rM   rT   r   r   )rY   r3   r%   r    rC   rl   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 Nre   rt   r   r   )r<   ru   r   )
rY   r3   r    r%   r?   filenameru   rC   r   r   r&   r&   r'   test_sheet_nameA  s   

zTestReaders.test_sheet_namec                 C  sd   d| }t j|ddd}t|d}t j|ddd}t|| W d    d S 1 s+w   Y  d S )Nre   rt   r   r   rf   )rU   rT   ri   r   r   )rY   r    pthrC   rk   r   r&   r&   r'   test_excel_read_bufferR  s   "z"TestReaders.test_excel_read_bufferc                 C  sF   d}t jtdd tjd|d W d    d S 1 sw   Y  d S )Nrn   zUnknown engine: foorr   r   rR   r   )rY   Z
bad_enginer&   r&   r'   test_bad_engine_raisesY  s   "z"TestReaders.test_bad_engine_raisesru   r|   r   r   rt   c                 C  sJ   d}t jt|d tjd| |d W d    d S 1 sw   Y  d S Nz?Worksheet index 3 is invalid|Worksheet named 'Sheet4' not foundrr   rA  r   r   )rY   r    ru   rz   r&   r&   r'   test_bad_sheetname_raises^  s   "z%TestReaders.test_bad_sheetname_raisesc                 C  sV   d| }d g d}tjt|d t| W d    d S 1 s$w   Y  d S )Nrn   |)z(No such file or directoryu   没有那个文件或目录zFile o directory non esistente)rr   )joinr)   rx   FileNotFoundErrorrU   rT   )rY   r    Zbad_filers   r&   r&   r'   test_missing_file_raisesh  s   
"z$TestReaders.test_missing_file_raisesc                 C  s   d}|d u rt }d}n"|dkrddlm} |}d}n|dkr)ddlm} |}d	}nt}d
}tj||d t	t
| W d    d S 1 sGw   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 filerr   )r   r   rV  r   rX  r	   r)   rx   rU   rT   r   )rY   r%   Z
bad_streamerrorrz   rV  rX  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 sw   Y  t|j}td| }t|| d S )Nre   rf   )content)ri   Zserve_contentreadrU   rT   urlr   r   )rY   Z
httpserverr    rk   	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 sw   Y  d|j d| }tj||d}td| }t|| d S )Nre   rf   KeyZBodys3:///test1)Zstorage_options)ri   
put_objectrF   rU   rT   r   r   )rY   r    s3_public_buckets3sork   r]  r^  r_  r&   r&   r'   test_read_from_s3_url  s   z!TestReaders.test_read_from_s3_urlc           	      C  s   t d| d}|jd| |d W d    n1 sw   Y  dd l}|jdi |}| d|j d| }t|}W d    n1 sHw   Y  td| }t|| d S )Nre   rf   ra  r   rc  rd  r&   )	ri   re  s3fsZS3FileSystemrF   rU   rT   r   r   )	rY   r    rf  rg  rk   ri  Zs3r^  r_  r&   r&   r'   test_read_from_s3_object  s   z$TestReaders.test_read_from_s3_objectc                 C  s|   t j|dddd| }t|}z	td| }W n ty5   dt  }t	
d|  Y nw t|| d S )Nr8   r9   rS   re   zfile://localhost/ zfailing on )ospathrS  rU   rT   r   platformunamestripr)   r   r   r   )rY   r    r=   Z
localtabler_  r^  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   )rU   rT   r   r   r   )rY   r    str_pathrC   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   )localre   rt   r   )	Zpy.pathru  rl  rm  rS  rU   rT   r   r   )rY   r    Z	LocalPathrr  rC   rs  r   r&   r&   r'   test_read_from_py_localpath  s   z'TestReaders.test_read_from_py_localpathc                 C  sZ   t jd| }t|d}tj|ddd}~|  W d    d S 1 s&w   Y  d S )Nre   rf   rt   r   r   )rl  rm  rS  ri   rU   rT   r\  )rY   r    rr  rk   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)rI   ZTimerg   r   r|   -   8   i r      1   i@ r     *   i    9   #   i 	   )      i           i'	 r   i`
 5   i 5    %   r   i       6   Z
times_1900rt   r   Z
times_1904)rN   rK   r)   rL   rM   r   r   r   rU   rT   r   r   )rY   r3   r%   r    rC   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 )*Nrn   barr   r   testmultiindexrg   r   
2015-01-01Tr   r   
2015-01-02Fr|   r   
2015-01-03r   r   
2015-01-04r   r   r   	mi_columnr   )ru   rD  r<   r   mi_indexr   bothru   r<   rD  ilvl1ilvl2Zmi_index_namec1c2mi_column_name)levelZname_with_intZ	both_nameZboth_name_skiprows)ru   r<   rD  r   )rN   rB   r   from_productr   rU   r"  r  rT   r   r   rE   r   Z	set_namesr8  r   Z
set_levels)	rY   r3   r%   r    rG   mimi_filerC   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  rn   r  r   r   r  r  r   rg   r   r  Tr   r   r  Fr|   r   r  r   r   r  )rn   rn   r  r  r  r  r   r   r   r   r  )rN   r   r  rB   r   rU   r"  from_arraysr  rT   r   r   )rY   r3   r%   r    ru   Zidx_lvl2r  r  rG   rC   rl   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   rg   ru   rD  r   r   keyvalr   r   r   )rU   rT   r   r  r   r   r   )rY   r    r  rl   Zexp_columnsrC   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   rg   r   r|   r   r   r   r   rE   r   Zsingle_namesr   r   Zmulti_namesrg   )r  r  r  r  r  )r  r  r  r  r  )r   rg   r   r|   r   Zsingle_no_namesZmulti_no_names)r   r  r   r  r   r   r   rU   rT   r   r   rE   )	rY   r    rK  r9   r   r  sirC   r   r&   r&   r'   test_excel_old_index_format  sf   	z'TestReaders.test_excel_old_index_formatc              	   C  sR   d}dD ]"}t jt|d tjd| |d W d    n1 s!w   Y  qd S )Nz#Passing a bool to header is invalid)TFrr   re   rD  r   )rY   r    rz   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   ru   r   rg   r   r  Tr   r  Fr|   r   r  r   r   r  r   r   r   r   r   c                 S     | dv S N)r   r   r&   r   r&   r&   r'   r     rE  z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)ru   r   r   )rN   rB   rU   rT   r   r"  r  r   r   r   r  rY   r3   r%   r    rG   r   rC   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)rg   r|   r   r&   r   r&   r&   r'   r     rE  zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r  rg   r   r  Tr|   r   r  Fr   r   r   r   r   )	rN   rB   rU   rT   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   re   nrowsr  )rY   r    num_rows_to_pullr   rC   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 )Nre   r   r  )rU   rT   r   r   r   )rY   r    rC   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  sJ   d}t jt|d tjd| dd W d    d S 1 sw   Y  d S )Nz'nrows' must be an integer >=0rr   re   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  r  r  r&   r   r&   r&   r'   r   K  rE  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]).
        )ru   rD  r<   r   Nr|   )ru   rD  r<   r   r  )rU   rT   r   r   r   )	rY   r    rK  ru   rD  r<   r   rC   r   r&   r&   r'   test_read_excel_nrows_paramsC  s$   z(TestReaders.test_read_excel_nrows_paramsc                 C  sF   t jtdd td| dd W d    d S 1 sw   Y  d S )Nzbut 3 positional argumentsrr   re   rt   r   r   rG  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  r|   r   r  ))r   r   r  rg   r   r  )r   rg   r  )r   r|   r  r  r   rg   r  )r   from_tuplesr   rU   rT   r   r   )rY   r    	file_namer9   idxrC   rl   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      ?rg   r   numbersr   )r   r   r   rU   rT   r   r   )rY   r    r  r9   rC   rl   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   rg   r|   r   r   r   Zmi_column_empty_rowsr   r  )	r   r  r   r   r   rU   rT   r   r   )rY   r    r  r   r9   rC   rl   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)r|   r|   N)rU   rT   shape)rY   r    r  rl   r&   r&   r'   test_trailing_blanks  s   
z TestReaders.test_trailing_blanksc                 C  t   |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    d S 1 s3w   Y  d S )Nr   *chartsheets do not exist in the ODF formatr   4pyxlsb can't distinguish chartsheets from worksheetsrI   z"Worksheet named 'Chart1' not foundrr   
chartsheetZChart1r   	r)   r   rK   rL   rM   rx   r   rU   rT   rY   r3   r%   r    r&   r&   r'   test_ignore_chartsheets_by_str  s   
"z*TestReaders.test_ignore_chartsheets_by_strc                 C  r  )Nr   r  r   r  rI   z0Worksheet index 1 is invalid, 1 worksheets foundrr   r  rg   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,rg   )decimalr   )rg   gAc̝ė@g	hAABCZpoig2[j@)r   gHzG^@g{G@ZDEFZuytgUq&?)r|   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)   fixturer\   rm   r{   r   r   r   rL   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+  rM   r
   r-  r/  r0  r1  r<  r>  r@  rB  rC  rH  filterwarningsrI  rL  rN  rO  rQ  rU  rZ  network
single_cpur`  tdZskip_if_not_us_localerh  rj  Zslowrq  rt  
skip_if_norv  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&   r&   r&   r'   rO      s   

3(

	

	2
0
$









	$T
!I6
	rO   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  s   d}t jt|dd1 td| d}tj| |d W d    n1 s&w   Y  W d    d S W d    d S 1 s>w   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)rs   Zraise_on_extra_warningsre   rf   rR   )r   assert_produces_warningFutureWarningri   rU   rT   r\  )rY   r%   r    rz   rk   r&   r&   r'   test_deprecate_bytes_input  s   "z,TestExcelFileRead.test_deprecate_bytes_inputTrP   c                 C  rQ   )zH
        Change directory and set engine for ExcelFile objects.
        rR   r8   r9   rS   rh   N)r   rU   rh   rV   rW   rX   r&   r&   r'   r\     r]   z#TestExcelFileRead.cd_and_set_enginec                 C  sr   dddddd}t d| }|j}W d    n1 sw   Y  |d ur)|}n||dd   }||ks7J d S )Nr   r   r   r   rb   re   rg   )rU   rh   r%   )rY   r    r%   rj   rS   rl   rC   r&   r&   r'   rm     s   z"TestExcelFileRead.test_engine_usedc                 C  s  t d| }t j|dddgd}W d    n1 sw   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 sUw   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 sw   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 sw   Y  ttjgdgtjgtjgdggd	gd
}t|| d S )NZtest4rt   Fappleru   Zkeep_default_naZ	na_valuesr!  rg   rabbitr   r   Ttest51.#QNANr   )rU   rh   rT   r   r   r   r   r   )rY   r    rS   r   rC   r&   r&   r'   test_excel_passes_na  sH   

 

 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 s*w   Y  |du r@d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  rt   Tr  r  Fr  rg   r   r  r   r   )rU   rh   rT   r   r   r   r   r   )rY   r    r  r_   rS   r   rC   r&   r&   r'   test_excel_passes_na_filter  s&   	z-TestExcelFileRead.test_excel_passes_na_filterc           
      C  s  t || |}t||| td| }tj|ddd}tj|ddgdd}W d    n1 s1w   Y  t|| t|| td| }|jddd}|jddgdd}W d    n1 sdw   Y  t|| t|| td| }tj|dddd}	W d    n1 sw   Y  t|	|jd d	  td| }|jdddd
}	W d    n1 sw   Y  t|	|jd d	  d S )Nre   r   r   rg   r   )r<   )r   r<   r   r   )r<   r   )	rN   rH   rU   rh   rT   r   r   ra   r   )
rY   r3   r%   r    r?   rC   rS   r   r   r   r&   r&   r'   test_excel_table_sheet_by_index'  s.   
z1TestExcelFileRead.test_excel_table_sheet_by_indexc                 C  s   t || |}t||| d}d}t|| }|j|dd}	W d    n1 s*w   Y  t|| }|jd|d}
W d    n1 sHw   Y  t|	| t|
| d S rJ  )rN   rH   rU   rh   ra   r   r   )rY   r3   r%   r    r?   rC   rK  ru   rS   Z	df1_parseZ	df2_parser&   r&   r'   rL  B  s   
z!TestExcelFileRead.test_sheet_nameru   r|   r   r   rt   c              	   C  s   d}t jt|d. td| }|j|d W d    n1 s"w   Y  W d    d S W d    d S 1 s:w   Y  d S rP  )r)   rx   r   rU   rh   ra   )rY   r    ru   rz   rS   r&   r&   r'   rQ  T  s   "z+TestExcelFileRead.test_bad_sheetname_raisesc              	   C  s   d| }t j|dd|d}t|d%}t |}t j|ddd}W d    n1 s+w   Y  W d    n1 s:w   Y  t|| d S )Nre   rt   r   ru   r<   r%   rf   r   )rU   rT   ri   rh   r   r   )rY   r%   r    rM  rC   rk   rd   r   r&   r&   r'   rN  _  s   z(TestExcelFileRead.test_excel_read_bufferc              	   C  sx   t d| d&}t|}tj|dd|d W d    n1 s!w   Y  W d    n1 s0w   Y  |js:J d S )Nre   rf   rt   r   r  )ri   rU   rh   rT   closed)rY   r%   r    rk   rc   r&   r&   r'   test_reader_closes_filei  s   z)TestExcelFileRead.test_reader_closes_filec              	   C  s   d}t d| /}tjt|d t j|dd W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )Nz8Engine should not be specified when passing an ExcelFilere   rr   rn   rR   )rU   rh   r)   rx   r   rT   )rY   r    rz   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w   Y  t jt||d}t|| d S )Nre   rR   rf   )rU   rT   ri   r\  r   r   r   )rY   r%   r    rC   rk   r9   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 sw   Y  tjd| |d}t|| d S )Nre   rf   rR   )ri   rU   rT   r   r   )rY   r    r%   rk   rl   rC   r&   r&   r'   %test_excel_read_binary_via_read_excel  s
   z7TestExcelFileRead.test_excel_read_binary_via_read_excelc              	   C  s   t dd1}tjtdd tj|ddgd W d    n1 s!w   Y  W d    d S W d    d S 1 s9w   Y  d S )Nzdf_header_oob.xlsxrf   zexceeds maximumrr   r   rg   r  )ri   r)   rx   r   rU   rT   )rY   r%   rk   r&   r&   r'   )test_read_excel_header_index_out_of_range  s   "z;TestExcelFileRead.test_read_excel_header_index_out_of_rangerK  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  rg   r|   r  )rE   r   r   rt   r   r  )r   r   r  r   rU   rT   r   r   )rY   rK  r  colsrC   rl   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 s$w   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   rg   )rD  r<   r%   z
2020-02-29z
2020-03-01r   r   r   r  r  )rN   rU   rh   rT   rB   ZDatetimeIndexr   r  Zto_pydatetimer   r   r   )rY   r3   r%   r    rk   rS   r   rG   ZdtiZexpected_column_indexrC   r&   r&   r'   test_read_datetime_multiindex  s   



z/TestExcelFileRead.test_read_datetime_multiindexc              	   C  sx   t jtdd+ td| dd W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )NzValue must be one of *rr   zio.excelz.readerabc)r)   rx   r   rU   r,  rG  r&   r&   r'   test_engine_invalid_option  s   "z,TestExcelFileRead.test_engine_invalid_optionc                 C  sr   |dkr	t d |dkr|t jjdd td| }|jdgks'J W d    d S 1 s2w   Y  d S )Nr   r  r   r  rI   r  rt   )r)   r   rK   rL   rM   rU   rh   Zsheet_names)rY   r3   r%   r    rS   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}n|dkr,ddlm} |f}t	d| B}t
|jddd td	 z	tj||d
 W n	 |yV   Y nw W d    n1 saw   Y  W d    d S W d    d S 1 syw   Y  d S )NzInvalid test for engine=r   r   r   rW  Zcorruptzutf-8)encodingFrR   )r	   r)   r   r   ZbiffhrV  r   rX  r   r#  r   
write_textr  rU   rh   )rY   r%   r    errorsr   rX  filer&   r&   r'   test_corrupt_files_closed  s,   "z+TestExcelFileRead.test_corrupt_files_closedN)r  r  r  r  r)   r  r\   rm   r  rL   r  r  r  rL  rQ  rN  r  r  r  r  r   r  r  r  r  r  r&   r&   r&   r'   r    s6    

&





r  )r    r!   r"   r#   )r    r!   r%   r@   r"   r!   )rC   r   r    r!   r%   r!   r"   rD   )=
__future__r   r   r   	functoolsr   r8   r   rl  pathlibr   rn  rv   urllib.errorr   zipfiler	   numpyr   r)   Zpandas._configr
   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  ZpandasrU   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   rL   r  Z
pytestmarkr-   r*   r  Zengine_paramsr(   r,   r  r!   r4   r%   r    r?   rB   rH   rN   rO   r  r&   r&   r&   r'   <module>   s    


	



	
	          )