o
    5c                  	   @   s  d dl m Z mZ d dlmZ d dlZd dlm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 g dZejd	ed	gd
ejdedejdgd
ejded	gd
ejdedd
ejdedd
gZ de!de"f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)partialNPath)URLError)
BadZipFile)	DataFrameIndex
MultiIndexSeries).xls.xlsx.xlsm.xlsb.odsxlrdmarksopenpyxlzignore:.*html argumentpyxlsbodfread_extreturnc                 C   s   | j d } | dkr|dkrdS | dkr|dkrdS |dkr#| dkr#dS | dkr-|dkr-dS |dkr7| dk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   T)values)enginer    r   X/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/io/excel/test_readers.py_is_valid_engine_ext_pair6   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_marksK   s   r"   c                 C   s*   g | ]}t D ]}t||rt||qqS r   )read_ext_paramsr   r"   ).0engextr   r   r   
<listcomp>V   s    r'   )paramsidsc                 C      | j S )zS
    Fixture for Excel reader engine and read_ext, only including valid pairs.
    )r    )requestr   r   r   engine_and_read_extU   s   r,   c                 C   s   | \}}|S Nr   r,   r   r   r   r   r   r   e      r   c                 C   s   | \}}|S r-   r   r.   r   r   r   r   k   r/   c                   @   sb  e Zd Zejdd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ej
d$d%d&gd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zej
d9d%eg d:g d;g d:d<d=ejd>gd?fd@dAeed?ee g d:d@dBe g d;dAdBg dCdDdEejdFgd?fgdGdH Z!ej
dIi dDfdJdKidLfgdMdN Z"dOdP Z#ej
dQdRedSdTgifdUedVgdWfgdXdY Z$dZd[ Z%d\d] Z&d^d_ Z'd`da Z(dbdc Z)ej
*dddedf Z+dgdh Z,didj Z-dkdl Z.ej
dmdndodngdndogdpdqdpgdpdqggdrds Z/dtdu Z0dvdw Z1ej
j2e3j2dxddydzd{ Z4e5j6ej
j7d|d} Z8ej
j7d~d Z9ej
j:dd Z;dd Z<e5=de5j>dd Z?e5j>dd Z@dd ZAdd ZBej
ddejdddgfdejgd fgdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKej
ddddodLgdod%fddd%dodLgd%fdddodLgdodLgd%fdddodLgdod%fddd%d%dod&gfddd%d%dd fgdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUd%S )TestReadersT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   iodataexcel
read_excelN)r   pdr8   chdirsetattrselfr   datapathmonkeypatchfuncr   r   r   cd_and_set_enginer      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                 _   r*   r-   r4   )r=   argskwargsr   r   r   parser}   s   z,TestReaders.test_engine_used.<locals>.parserparser   r   r   r   xlsxxlsmxlsbxlsodstest1rb   )r;   r9   	ExcelFileopenr8   )	r=   r   r   r?   rE   expected_defaultsfresultexpectedr   r   r   test_engine_used{   s   zTestReaders.test_engine_usedc                 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`matchrM   Sheet1r      
sheet_name	index_colusecolsSheet2rO   r\   skiprowsr]   r^   r   raises
ValueErrorr9   r8   r=   r   msgr   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columnsrM   rY   r   )r      rZ   r[   r_   rO   r`   Fcheck_names
node
add_markerr   markxfailreindexr9   r8   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   rh   ri   Ark   rl   rm   rM   rY   r   zA:Dr[   r_   rO   r`   Frp   rk   rl   zA,C,DzA,C:Drr   r=   r+   r   rz   r{   r|   df3r   r   r   test_usecols_str   sZ   	zTestReaders.test_usecols_strr^   )r   rO   rZ   )r   rZ   rO   )rO   r   rZ   )rO   rZ   r   )rZ   r   rO   )rZ   rO   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   rh   ri   r   rl   rM   rY   r   r[   Frp   	rs   rt   r   ru   rv   r9   r8   rx   ry   )r=   r+   r   r^   rz   rU   rT   r   r   r   .test_usecols_diff_positional_int_columns_order   s   z:TestReaders.test_usecols_diff_positional_int_columns_orderrk   Dc                 C   sB   |ddg }t t||_tjd| d|d}tj||dd d S )Nrk   r   rM   rY   r\   r^   Frp   )rangelenindexr9   r8   rx   ry   )r=   r   r^   rz   rU   rT   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   rh   ri   rM   rY   r   r\   r]   Frp   r   r=   r+   r   rz   rU   rT   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   rh   ri   rl   r   rM   rY   r   zA,D:Er[   Frp   r   r   r   r   r   test_usecols_excel_range_str  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: E1rW   rM   rY   zD:E1r   rb   re   r   r   r   $test_usecols_excel_range_str_invalid'  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 strrW   rM   rY   r   rl   r[   r   rc   	TypeErrorr9   r8   re   r   r   r   test_index_col_label_error-  s   "z&TestReaders.test_index_col_label_errorc                 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 )	NrM   Sheet3r~   r   )r   EFrZ   levelscodesnamesrn   r   )r9   r8   r	   r   rx   ry   r=   r   rT   rU   r   r   r   test_index_col_empty8  s   z TestReaders.test_index_col_emptyr]   Nro   c                 C   sT   t jd| d|d}tg dg dgg dd}|r"||j| }t|| d S )NrM   Sheet4r   )i1ax)i2by)z
Unnamed: 0col1col2rm   )r9   r8   r	   	set_indexrn   rx   ry   )r=   r   r]   rT   rU   r   r   r   test_index_col_with_unnamedC  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'\]rW   rM   r   r^   rb   re   r   r   r   %test_usecols_pass_non_existent_columnQ  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.rW   rM   E1r   r   rb   re   r   r   r   test_usecols_wrong_typeZ  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 )	Ntest2rY   r\   aaaabbbbbTestTest1rm   r9   r8   r	   rx   ry   )r=   r   parsedrU   r   r   r   test_excel_stop_iteratorc  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   rh   ri   test3rY   r   r   rm   )rs   rt   r   ru   rv   r9   r8   r	   npnanrx   ry   )r=   r+   r   r   rU   r   r   r   test_excel_cell_error_nai  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   rh   ri   rM   rY   r   r   r_   rO   r\   ra   r]   Frp   r\   r]   
skipfooter)
rs   rt   r   ru   rv   r9   r8   rx   ry   ilocr   r   r   r   test_excel_tableu  s    zTestReaders.test_excel_tablec                 C   s  |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 t|d< d|j|jd df< t
jtddd tj	|| ddd}W d    n1 sw   Y  t
|| t|jD ]\}}tj	|| d|d}||}	t
||	 q|d t|d< tj	|| ddtid }t
|| | }
|
d t|
d< t
jtddd tj	|| dddtid!}W d    n1 sw   Y  t
||
 d S )"Nr   rh   ri   )rO   ro      r   )g      ?g      @gHzG?gQ?g&.>)TFTTF)rO   ro   rZ   r      )r   rZ   cdei  
         iq  rO         i  rZ   )IntColFloatColBoolColStrColStr2ColDateCol
test_typesrY   r   r   g      @r   zconvert_float is deprecatedF)rX   raise_on_extra_warnings)r\   convert_floatr   r   r\   
converters)r\   r   r   )rs   rt   r   ru   rv   r	   	from_dictr   r9   r8   rx   ry   copyastypefloatlocr   assert_produces_warningFutureWarning	enumeratern   r   applystr)r=   r+   r   rU   basenameactualfloat_expectedicolnameexpno_convert_floatr   r   r   test_reader_special_dtypes  s|   







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 )Ntest_converters)rO   ro   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   ro   rZ   rY   r   )r	   r   r   r   r9   r8   rx   ry   )r=   r   r   rU   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    d S 1 stw   Y  d S )N	testdtyperO   ro   rZ   r         @      @      @      @      ?       @      @r   r   r   r   rm   float64float32)r   r   r   dtyper   r   001002003004r   z(Unable to convert column d to type int64rW   r   int64)r9   r8   r	   r   r   rw   rx   ry   r   r   r   rc   rd   )r=   r   r   r   rU   rf   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  r9   r8   rx   ry   )r=   r   r  rU   r   r   r   r   r   test_reader_dtype_str  s   z!TestReaders.test_reader_dtype_strzdtypes, exp_valuea.1r	  rO   c           	      C   s\   d}dt i|}| }tj|| |d}tdg|gd}||ks&J dt|| d S )Ndf_mangle_dup_col_dtypesr   r  r   )r   r  zdtype dict changed)r   r   r9   r8   r	   rx   ry   )	r=   r   dtypes	exp_valuer   
dtype_dictdtype_dict_copyrT   rU   r   r   r   test_dtype_mangle_dup_cols6  s   z&TestReaders.test_dtype_mangle_dup_colsc                 C   s2   d}t || }tdg di}t|| d S )Ntest_spacestestcol)zthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  timesr   )r=   r   r   r   rU   r   r   r   test_reader_spacesB  s   zTestReaders.test_reader_spaceszbasename,expectedzgh-35802COLUMNzTest (1)zgh-36122z
got 2nd sarm   c                 C   s6   |dkrt d|  t|| }t|| d S )Nr   zSkipped for engine: )r   skipr9   r8   rx   ry   )r=   r   r   r   rU   r   r   r   r   test_read_excel_ods_nested_xmlU  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)r9   r8   rx   assert_contains_allkeyslistr=   r   r   dfsexpected_keysr   r   r   test_reading_all_sheetsd  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 )Nr  )ro   r  r  r   )r9   r8   r!  setrx   r  r   r   )r=   r   r   r$  r#  r   r   r   %test_reading_multiple_specific_sheetsq  s   z1TestReaders.test_reading_multiple_specific_sheetsc                 C   s2   d}t j|| d d}g d}t||  d S )Nblank_with_headerr   )rY   r_   r   )r9   r8   rx   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blankrY   r   )r9   r8   rx   ry   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 )Ncol_1col_2rm   r(  rY   r   )r	   r9   r8   rx   ry   )r=   r   rU   r   r   r   r   !test_read_excel_blank_with_header  s   z-TestReaders.test_read_excel_blank_with_headerz-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r5|j tjjdd |d u rH|dv rH|j tjjdd td| }t	
|| d S )Nr   rh   ri   z
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@xDzTimothy BrownDateColWithBigInt	StringColrm   r   zMaybe not supported by openpyxl)r   r   z)Defaults to openpyxl, maybe not supportedtestdateoverflow)rs   rt   r   ru   rv   r	   r9   	Timestampr8   rx   ry   )r=   r+   r   r   rU   rT   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   rh   ri   rM   rY   r   r   )r]   r\   Frp   r   )r=   r+   r   rz   filenamer\   r{   r|   r   r   r   test_sheet_name  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 )NrM   rY   r   r   rN   )r9   r8   rQ   rx   ry   )r=   r   pthrU   rS   r   r   r   r   test_excel_read_buffer  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 )NfoozUnknown engine: foorW   r   r4   rb   )r=   
bad_enginer   r   r   test_bad_engine_raises  s   "z"TestReaders.test_bad_engine_raisesr\   rZ   r   r   rY   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 foundrW   r*  r   rb   )r=   r   r\   rf   r   r   r   test_bad_sheetname_raises  s   "z%TestReaders.test_bad_sheetname_raisesc                 C   sL   d| }d}t jt|d t| W d    d S 1 sw   Y  d S )Nr9  uV   (No such file or directory|没有那个文件或目录|File o directory non esistente)rW   )r   rc   FileNotFoundErrorr9   r8   )r=   r   bad_filerX   r   r   r   test_missing_file_raises  s
   
"z$TestReaders.test_missing_file_raisesc                 C   sz   d}|d u rt }d}n|dkrddlm} |}d}nt}d}tj||d t| W d    d S 1 s6w   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 filerW   )rd   r   rA  r   r   rc   r9   r8   )r=   r   
bad_streamerrorrf   rA  r   r   r   test_corrupt_bytes_raises  s   "z%TestReaders.test_corrupt_bytes_raisesz^https://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/excel/test1.xlsx)urlcheck_before_testc                 C   s0   d| }t |}t d| }t|| d S )NzYhttps://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/excel/test1rM   r  )r=   r   rE  	url_tablelocal_tabler   r   r   test_read_from_http_url  s   

z#TestReaders.test_read_from_http_urlc                 C   sz   t d| d}|djd| |d W d    n1 sw   Y  d| }tj||d}td| }t|| d S )NrM   rN   pandas-testKeyBodys3://pandas-test/test1)storage_options)rQ   Bucket
put_objectr9   r8   rx   ry   )r=   r   s3_resources3sorS   rE  rG  rH  r   r   r   test_read_from_s3_url
  s   z!TestReaders.test_read_from_s3_urlc           	      C   s   t d| d}|djd| |d W d    n1 sw   Y  dd l}|jdi |}| d| }t|}W d    n1 sFw   Y  td| }t|| d S )NrM   rN   rJ  rK  r   rN  r   )	rQ   rP  rQ  s3fsS3FileSystemr9   r8   rx   ry   )	r=   r   rR  rS  rS   rU  s3rG  rH  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y9   dd l}d|  }t	
d|  Y nw t|| d S )	Nr5   r6   r7   rM   zfile://localhost/r    zfailing on )ospathjoinr9   r8   r   platformunamestripr   r  rx   ry   )r=   r   r>   
localtablerH  rG  r]  platform_infor   r   r   test_read_from_file_url(  s   
z#TestReaders.test_read_from_file_urlc                 C   sP   ddl m} d| }tj|ddd}|d| }tj|ddd}t|| d S )Nr   r   rM   rY   r   )pathlibr   r9   r8   rx   ry   )r=   r   r   str_pathrU   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   )localrM   rY   r   )	py.pathrg  rZ  r[  r\  r9   r8   rx   ry   )r=   r   	LocalPathrd  rU   re  r   r   r   r   test_read_from_py_localpathG  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 )NrM   rN   rY   r   r   )rZ  r[  r\  rQ   r9   r8   read)r=   r   rd  rS   r   r   r   r   test_close_from_py_localpathV  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   rh   ri   TimerO   ro   rZ   -   8   i r      1   i@       *   i    9   #   i 	   )      i           i'	 r   i`
 5   i 5    %   r   i       6   
times_1900rY   r   
times_1904)rs   rt   r   ru   rv   r	   r   r   r9   r8   rx   ry   )r=   r+   r   r   rU   r   r   r   r   test_reader_secondsa  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   rh   ri   r9  barr   r   testmultiindexrO   r   
2015-01-01Tro   r   
2015-01-02FrZ   r   
2015-01-03r   r   
2015-01-04rm   	mi_columnr   )r\   headerr]   r   mi_indexr   rp   bothr\   r]   r  ilvl1ilvl2mi_index_namec1c2mi_column_name)levelname_with_int	both_nameboth_name_skiprows)r\   r]   r  ra   )rs   rt   r   ru   rv   r   from_productr	   r9   r2  r8   rx   ry   r   rn   	set_namesr!  r   
set_levels)r=   r+   r   mimi_filerU   r   r   r   r   test_read_excel_multiindex  st   


z&TestReaders.test_read_excel_multiindexzsheet_name,idx_lvl2both_name_blank_after_mi_namer   r   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 (GH4679ri   r  r9  r  r   r   r  r  r   rO   r   r  Tro   r   r  FrZ   r   r  r   r   r  )r9  r9  r  r  r  r  r   r   r  )rs   rt   r   ru   rv   r   r  r	   r9   r2  from_arraysr8   rx   ry   )	r=   r+   r   r\   idx_lvl2r  r  rU   rT   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   rO   r\   r  r   rk   keyvalr   ro   rm   )r9   r8   r   r  r	   rx   ry   )r=   r   r  rT   exp_columnsrU   r   r   r   &test_read_excel_multiindex_header_only  s
   z2TestReaders.test_read_excel_multiindex_header_onlyc           	   	   C   s  d| }t g d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|| 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 )Ntest_index_name_pre17)NNNNN)R0C0R0C1R0C2R0C3R0C4)R1C0R1C1R1C2R1C3R1C4)R2C0R2C1R2C2R2C3R2C4)R3C0R3C1R3C2R3C3R3C4)R4C0R4C1R4C2R4C3R4C4)C_l0_g0C_l0_g1C_l0_g2C_l0_g3C_l0_g4)R0R_l0_g0R_l0_g1R_l0_g2R_l0_g3R_l0_g4)R1R_l1_g0R_l1_g1R_l1_g2R_l1_g3R_l1_g4)r   rO   ro   rZ   r   r   r   r   r   rn   single_namesr   r   multi_namesrO   )r  r  r  r  r  )r  r  r  r  r  )r   rO   ro   rZ   r   single_no_namesmulti_no_namesFrp   )
r   arrayr   r
   r	   r9   r8   rx   ry   r   )	r=   r   r5  r6   rn   r  sirU   r   r   r   r   test_excel_old_index_format  sd   
	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)TFrW   rM   r  r   )r=   r   rf   argr   r   r   test_read_excel_bool_header_argT  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   rh   ri   testskiprowsskiprows_listr   ro   r\   ra   rO   r   r  Tr   r  FrZ   r   r  r   r   r  r   rm   c                 S   s   | dv S )N)r   ro   r   r   r   r   r   r   }      z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)r\   ra   r   )rs   rt   r   ru   rv   r9   r8   r	   r2  rx   ry   r   r  r=   r+   r   r   rU   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   rh   ri   r  r  c                 S   s   | dvS )N)rO   rZ   r   r   r   r   r   r   r     r  zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r  rO   r   r  TrZ   r   r  Fr   rm   )rs   rt   r   ru   rv   r9   r8   r	   r2  rx   ry   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   rM   nrowsr  )r=   r   num_rows_to_pullr   rU   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 )NrM   r   r  )r9   r8   r   rx   ry   )r=   r   rU   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   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 >=0rW   rM   r   r  rb   re   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kp| dkS )Nr   ro   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]).
        )r\   r  r]   ra   NrZ   )r\   r  r]   ra   r  )r9   r8   r   rx   ry   )	r=   r   r5  r\   r  r]   ra   rU   r   r   r   r   test_read_excel_nrows_params  s$   z(TestReaders.test_read_excel_nrows_paramsc                 C   s   d| }t jtddV tj|dddd}tg dg d	d
d}d|j_t || tj|ddd}t	g d	g dd}t 
|| tj|ddd}tg ddd}t || W d    d S 1 sdw   Y  d S )Ntest_squeezezThe squeeze argument has been deprecated and will be removed in a future version. Append .squeeze\("columns"\) to the call to squeeze.

rW   two_columnsr   T)r\   r]   squeeze)ro   rZ   r   )r   r   rr  r   r  r   )r\   r  )r   r   
one_column)rO   ro   rZ   )rx   r   r   r9   r8   r   r   r   assert_series_equalr	   ry   )r=   r   rS   r   rU   r   r   r   test_read_excel_squeeze  s$   "z#TestReaders.test_read_excel_squeezec                 C   sR   t jtdd td| dd W d    n1 sw   Y  td|  d S )NF)r   rM   rY   r   )rx   r   r   r9   r8   r=   r   r   r   r   test_deprecated_kwargs  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  ))rk   rk   r  rZ   r   r  ))r   r   r  rO   ro   r  )r   rO   r  )ro   rZ   r  r  r   rO   r  )r   from_tuplesr	   r9   r8   rx   ry   )r=   r   	file_namer6   idxrU   rT   r   r   r   "test_no_header_with_list_index_col  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 )None_col_blank_lineg      ?rO   ro   numbersrm   )r   r   r	   r9   r8   rx   ry   )r=   r   r  r6   rU   rT   r   r   r   test_one_col_noskip_blank_line  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   rk   rO   rZ   ro   r   rm   mi_column_empty_rowsr   r  )	r   r   r   r   r	   r9   r8   rx   ry   )r=   r   r  rn   r6   rU   rT   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
        trailing_blanks)rZ   rZ   N)r9   r8   shape)r=   r   r  rT   r   r   r   test_trailing_blanks$  s   
z TestReaders.test_trailing_blanksc                 C   v   |dkr	t d |dkr|jt jjdd t jtdd tj	d| d	d
 W d    d S 1 s4w   Y  d S )Nr   *chartsheets do not exist in the ODF formatr   4pyxlsb can't distinguish chartsheets from worksheetsri   z"Worksheet named 'Chart1' not foundrW   
chartsheetChart1r   
r   r  rs   rt   ru   rv   rc   rd   r9   r8   r=   r+   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 foundrW   r  rO   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 )
Ntest_decimal,rO   )decimalra   )rO   gAc̝ė@g	hAABCpoig2[j@)ro   gHzG^@g{G@DEFuytgUq&?)rZ   g%Cq@g^@GHIrezg)@)IdNumber1Number2Text1Text2Number3rm   r   r   r   r   r   test_euro_decimal_formatI  s   z$TestReaders.test_euro_decimal_format)V__name__
__module____qualname__r   fixturerA   rV   rg   r}   r   ru   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.  filterwarningsr3  r6  r8  r;  r=  r@  rD  networkrx   rI  tdskip_if_not_us_locale
single_cpurT  rX  slowrb  rf  
skip_if_nocheck_file_leaksrj  rl  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   r0   q   s   

5(


		R





 
	



!V
"H7
	r0   c                
   @   s   e Z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-d. Zd/d0 Zd1S )2TestExcelFileReadTr1   c                 C   r3   )zH
        Change directory and set engine for ExcelFile objects.
        r4   r5   r6   r7   rP   N)r   r9   rP   r:   r;   r<   r   r   r   rA   X  rB   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   rG   rM   rO   )r9   rP   r   )r=   r   r   rR   r7   rT   rU   r   r   r   rV   a  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 )Ntest4rY   Fappler\   keep_default_na	na_valuesNArO   rabbitr   rm   Ttest51.#QNANr   )r9   rP   r8   r	   r   r   rx   ry   )r=   r   r7   r   rU   r   r   r   test_excel_passes_nas  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:  rY   Tr4  r5  Fr;  rO   r   r9  r   rm   )r9   rP   r8   r   r   r	   rx   ry   )r=   r   r=  rD   r7   r   rU   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| }tj|ddd}tj|ddgdd}W d    n1 s3w   Y  tj	||d	d
 tj	||d	d
 td| }|j
ddd}|j
ddgdd}W d    n1 sjw   Y  tj	||d	d
 tj	||d	d
 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 )Nr   rh   ri   rM   r   r   rO   r   Frp   )r]   )ra   r]   r   r   )r]   r   )rs   rt   r   ru   rv   r9   rP   r8   rx   ry   rF   r   )r=   r+   r   rz   r7   r{   r|   r   r   r   r   test_excel_table_sheet_by_index  s4   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 s,w   Y  t|| }|jd|d}W d    n1 sJw   Y  tj	||d	d
 tj	||d	d
 d S r4  )
rs   rt   r   ru   rv   r9   rP   rF   rx   ry   )	r=   r+   r   rz   r5  r\   r7   	df1_parse	df2_parser   r   r   r6    s    z!TestExcelFileRead.test_sheet_namer\   rZ   r   r   rY   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 r<  )r   rc   rd   r9   rP   rF   )r=   r   r\   rf   r7   r   r   r   r=    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 )NrM   rY   r   r\   r]   r   rN   r   )r9   r8   rQ   rP   rx   ry   )r=   r   r   r7  rU   rS   rK   r   r   r   r   r8    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 )NrM   rN   rY   r   rB  )rQ   r9   rP   r8   closed)r=   r   r   rS   rH   r   r   r   test_reader_closes_file  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 ExcelFilerM   rW   r9  r4   )r9   rP   r   rc   rd   r8   )r=   r   rf   xlr   r   r   test_conflicting_excel_engines   s   "z0TestExcelFileRead.test_conflicting_excel_enginesc                 C   sf   t jd| |d}td| d}| }W d    n1 sw   Y  t j||d}t|| d S )NrM   r4   rN   )r9   r8   rQ   rk  rx   ry   )r=   r   r   rU   rS   r6   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w   Y  tjd| |d}t|| d S )NrM   rN   r4   )rQ   r9   r8   rx   ry   )r=   r   r   rS   rT   rU   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.xlsxrN   zexceeds maximumrW   r   rO   r  )rQ   r   rc   rd   r9   r8   )r=   r   rS   r   r   r   )test_read_excel_header_index_out_of_range  s   "z;TestExcelFileRead.test_read_excel_header_index_out_of_ranger5  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ZI2r  r  )r   zB.1I11I12r  rO   rZ   r	  )r   rn   r  rY   r   r  )r
   r   r   r	   r9   r8   rx   ry   )r=   r5  r  colsrU   rT   r   r   r   test_header_with_index_col  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.w   Y  tj	t
dt
d	fgt
d t
d	 gd
}tg |d}t|| d S )Nr   rh   ri   test_datetime_mir   rO   )r  r]   r   z
02/29/2020z
03/01/2020r  rm   )rs   rt   r   ru   rv   r9   rP   r8   r   r   to_datetimeto_pydatetimer	   rx   ry   )	r=   r+   r   r   rS   r7   r   expected_column_indexrU   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 *rW   zio.excelz.readerabc)r   rc   rd   r9   option_contextr  r   r   r   test_engine_invalid_optionA  s   "z,TestExcelFileRead.test_engine_invalid_optionc                 C   st   |dkr	t d |dkr|jt jjdd td| }|jdgks(J W d    d S 1 s3w   Y  d S )Nr   r  r   r  ri   r  rY   )	r   r  rs   rt   ru   rv   r9   rP   sheet_names)r=   r+   r   r   r7   r   r   r   test_ignore_chartsheetsG  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| @}t|	d t
d z	tj||d W n	 |yF   Y nw W d    n1 sQw   Y  W d    d S W d    d S 1 siw   Y  d S )NzInvalid test for engine=r   r   corruptFr4   )r   r   r  r   biffhrA  rx   ensure_cleanr   
write_textr   r9   rP   )r=   r   r   errorsr   filer   r   r   test_corrupt_files_closedT  s&   "z+TestExcelFileRead.test_corrupt_files_closedN)r%  r&  r'  r   r(  rA   rV   r<  ru   r)  r>  r?  r6  r=  r8  rD  rF  rG  rH  rI  rO  rT  rW  rY  r`  r   r   r   r   r2  W  s4    

&





r2  )+r   r   	functoolsr   rZ  rc  r   urllib.errorr   zipfiler   numpyr   r   pandas.util._test_decoratorsutil_test_decoratorsr,  pandasr9   r	   r
   r   r   pandas._testing_testingrx   r#   r    r0  ru   r*  engine_paramsr   boolr   r"   r(  r,   r   r   r0   r2  r   r   r   r   <module>   sp    


	

         o