o
    Ti                  	   @   s  d dl m Z mZ d dlmZ d dlmZ d dlZd dlmZ d dl	Z	d dl
Z
d dlmZ d dlmZ d dlZd dlZd dlm  mZ d dlZd dlmZmZmZmZ d dlmZ d d	lm Z m!Z! g d
Z"ej#de$dgdej#de$dgdej#de$dgdej#de$ddej#de$ddgZ%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)partial)BytesION)Path)URLError)
BadZipFile)	DataFrameIndex
MultiIndexSeries)ArrowStringArrayStringArray).xls.xlsx.xlsm.xlsb.odsxlrdmarksopenpyxlpyxlsbodfread_extreturnc                 C   s   | j d } | dkr|dkrdS | dk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   b/var/www/html/evchargy.com/venv/lib/python3.10/site-packages/pandas/tests/io/excel/test_readers.py_is_valid_engine_ext_pair<   s   
r    c                 C   s    | j |f }tj|| jd}|S )z
    engine gives us a pytest.param object with some marks, read_ext is just
    a string.  We need to generate a new pytest.param inheriting the marks.
    r   )r   pytestparamr   )r   r   r   	new_paramr   r   r   _transfer_marksQ   s   r$   c                 C   s*   g | ]}t D ]}t||rt||qqS r   )read_ext_paramsr    r$   ).0Zengextr   r   r   
<listcomp>\   s    r(   )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_ext[   s   r,   c                 C   s   | \}}|S Nr   r,   r   r   r   r   r   r   k      r   c                 C   s   | \}}|S r-   r   r.   r   r   r   r   q   r/   c                   @   sx  e Zd Zejdddd Zdd Zdd Zd	d
 Zdd Z	dd Z
ejdg dg dg dg dg dg dgdd Zejdddgddggdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zejd(d)d*gd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zejd=d)eg d>g d?g d>d@dAej dBgdCfdDdEe!e!dCee"g d>dDdFe"g d?dEdFg dGdHdIej dJgdCfgdKdL Z#dMdN Z$dOdP Z%dQdR Z&ejdSi dHfdTdUidVfgdWdX Z'dYdZ Z(ejd[d\ed]d^gifd_ed`gdafgdbdc Z)ddde Z*dfdg Z+dhdi Z,djdk Z-dldm Z.dndo Z/ej0dpdqdr Z1dsdt Z2dudv Z3dwdx Z4ejdydzd{dzgdzd{gd|d}d|gd|d}ggd~d Z5dd Z6dd Z7ejj8ejj9dd Z:e;j<ejj9dd Z=ejj9dd Z>ejj?dd Z@dd ZAe;Bddd ZCdd ZDdd ZEdd ZFejddej dddgfdej gd fgdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOejdddd{dVgd{d)fddd)d{dVgd)fddd{dVgd{dVgd)fddd{dVgd{d)fddd)d)d{d*gfddd)d)dd fgdd ZPdd ZQdd ZRdd ZSdd ZTddĄ ZUddƄ ZVddȄ ZWddʄ ZXd)S )TestReadersTZautousec                 C   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   pdr7   chdirsetattrselfr   datapathmonkeypatchfuncr   r   r   cd_and_set_enginex      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-   r3   )r<   argskwargsr   r   r   parser   s   z,TestReaders.test_engine_used.<locals>.parserparser   r   r   r   xlsxZxlsmxlsbxlsodstest1rb   )r:   r8   	ExcelFileopenr7   )	r<   r   r   r>   rD   expected_defaultsfresultexpectedr   r   r   test_engine_used   s   zTestReaders.test_engine_usedc              	   C   s   ddiddiddiddiddid}|dd  dv r t d	}n|dd  d
kr.t d}nt d}|d urbtjt|d tjd| dd||dd   d W d    d S 1 s[w   Y  d S d S )Nfooabcd{   TrueTrF   rM   >   rI   rH   z8open_workbook() got an unexpected keyword argument 'foo'rJ   z/load() got an unexpected keyword argument 'foo'z8load_workbook() got an unexpected keyword argument 'foo'matchrK   Sheet1r   )
sheet_name	index_colZengine_kwargs)reescaper!   raises	TypeErrorr8   r7   )r<   r   r   rP   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`rY   rK   r[   r      r\   r]   usecolsSheet2rM   r\   skiprowsr]   rf   r!   r`   
ValueErrorr8   r7   r<   r   rb   r   r   r   test_usecols_int   s   "zTestReaders.test_usecols_intc                 C   s   |dkr|j tjjdd |jddgd}tjd| dd	g d
d}tjd| ddgd	g d
d}tj	||dd tj	||dd d S )Nr   3Sheets containing datetimes not supported by pyxlsbreasonBCcolumnsrK   r[   r   )r      rd   re   rg   rM   rh   FZcheck_names
node
add_markerr!   markxfailreindexr8   r7   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   rn   ro   Arq   rr   rs   rK   r[   r   zA:Dre   rg   rM   rh   Frv   rq   rr   zA,C,DzA,C:Drw   r<   r+   r   r   r   r   df3r   r   r   test_usecols_str   sZ   	zTestReaders.test_usecols_strrf   )r   rM   rd   )r   rd   rM   )rM   r   rd   )rM   rd   r   )rd   r   rM   )rd   rM   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   rn   ro   r   rr   rK   r[   r   re   Frv   	rx   ry   r!   rz   r{   r8   r7   r}   r~   )r<   r+   r   rf   r   rS   rR   r   r   r   .test_usecols_diff_positional_int_columns_order  s   z:TestReaders.test_usecols_diff_positional_int_columns_orderrq   Dc                 C   sB   |ddg }t t||_tjd| d|d}tj||dd d S )Nrq   r   rK   r[   r\   rf   Frv   )rangelenindexr8   r7   r}   r~   )r<   r   rf   r   rS   rR   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   rn   ro   rK   r[   r   r\   r]   Frv   r   r<   r+   r   r   rS   rR   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   rn   ro   rr   r   rK   r[   r   zA,D:Ere   Frv   r   r   r   r   r   test_usecols_excel_range_str9  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: E1rY   rK   r[   zD:E1r   rj   rl   r   r   r   $test_usecols_excel_range_str_invalidG  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 strrY   rK   r[   r   rr   re   r!   r`   ra   r8   r7   rl   r   r   r   test_index_col_label_errorM  s   "z&TestReaders.test_index_col_label_errorc                 C   s<   t jd| ddd}tg dtg ddd}t|| d S )NrK   Sheet3r   r   )rq   rr   r   EFnamert   r   )r8   r7   r	   r
   r}   r~   r<   r   rR   rS   r   r   r   test_index_col_strX  s
   zTestReaders.test_index_col_strc                 C   sR   t jd| dg dd}tg dtg gd g gd g ddd}t|| d S )	NrK   r   r   r   )r   r   r   rd   Zlevelscodesnamesr   )r8   r7   r	   r   r}   r~   r   r   r   r   test_index_col_empty`  s   z TestReaders.test_index_col_emptyr]   Nru   c                 C   sT   t jd| d|d}tg dg dgg dd}|r"||j| }t|| d S )NrK   Sheet4r   )i1ax)i2by)z
Unnamed: 0Zcol1Zcol2rs   )r8   r7   r	   	set_indexrt   r}   r~   )r<   r   r]   rR   rS   r   r   r   test_index_col_with_unnamedk  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'\]rY   rK   r   rf   rj   rl   r   r   r   %test_usecols_pass_non_existent_columny  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.rY   rK   ZE1r   r   rj   rl   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test2r[   r\   ZaaaaZbbbbbTestZTest1rs   r8   r7   r	   r}   r~   )r<   r   parsedrS   r   r   r   test_excel_stop_iterator  s   z$TestReaders.test_excel_stop_iteratorc                 C   sT   |dkr|j tjjdd tjd| dd}ttj	ggdgd}t
|| d S )	Nr   rn   ro   Ztest3r[   r   r   rs   )rx   ry   r!   rz   r{   r8   r7   r	   npnanr}   r~   )r<   r+   r   r   rS   r   r   r   test_excel_cell_error_na  s   z$TestReaders.test_excel_cell_error_nac                 C   s   |dkr|j tjjdd tjd| ddd}tjd| dd	gdd
}tj||dd tj||dd tjd| ddd	d}t||j	d d  d S )Nr   rn   ro   rK   r[   r   r   rg   rM   r\   ri   r]   Frv   r\   r]   
skipfooter)
rx   ry   r!   rz   r{   r8   r7   r}   r~   ilocr   r   r   r   test_excel_table  s    zTestReaders.test_excel_tablec           
      C   sP  |dkr|j tjjdd tg dg dg dg dg dtd	d
dtd	d
dtdddtd	ddtdddgd}d}tj	|| dd}t
|| | }d|j|jd df< tj	|| dd}t
|| t|jD ]\}}tj	|| d|d}||}	t
||	 qq|d t|d< tj	|| ddtid}t
|| d S )Nr   rn   ro   )rM   ru      r   )g      ?g      @gHzG?gQ?g&.>)TFTTF)rM   ru   rd   r      )r   rd   cdei  
         iq  rM         i  rd   )IntColFloatColBoolColStrColStr2ColZDateColZ
test_typesr[   r   g      @r   r   r   r\   
converters)rx   ry   r!   rz   r{   r	   	from_dictr   r8   r7   r}   r~   copylocr   	enumeratert   r   applystr)
r<   r+   r   rS   basenameactualZfloat_expectedZicolr   expr   r   r   test_reader_special_dtypes  sL   






z&TestReaders.test_reader_special_dtypesc              
   C   sz   d}t g ddtjdddgg ddtjd	d
dgd}dd dd dd dd d}tj|| d|d}t|| d S )NZtest_converters)rM   ru   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   ru   rd   r[   r   )r	   r   r   r   r8   r7   r}   r~   )r<   r   r   rS   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rM   ru   rd   r         @      @      @      @      ?       @      @r   r   r   r   rs   float64float32)r   r   r   dtyper   r   Z001Z002Z003Z004r   z(Unable to convert column d to type int64rY   r   int64)r8   r7   r	   r   r   r|   r}   r~   r   Zastyper!   r`   rk   )r<   r   r   r   rS   rb   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   r8   r7   r}   r~   )r<   r   r   rS   r   r   r   r   r   test_reader_dtype_str  s   z!TestReaders.test_reader_dtype_strc                    s  |dv rt d| d ttddgddtdd	gd
dtddgddtddgddttjdgddttjdgd
dttjdgddttjdgddttdgd ttjtjgddd
t|}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 S )"Nr   r   No engine for filetype: ''rM   rd   ZInt64r   r   r   ZFloat64TFbooleanr   r   string   g      @z
2019-12-31ru   )
r   r   r   r   r   rQ   ghijtestr   r\   dtype_backendpyarrowr   )ArrowExtensionArrayc                    s$   i | ]}| j | d dqS )T)Zfrom_pandas)array)r&   colr
  dfpar   r   
<dictcomp>\  s    z2TestReaders.test_dtype_backend.<locals>.<dictcomp>r  us)unitr  )r!   skipr	   r   r8   NA	Timestampr}   ensure_cleanto_excelr7   r	  Zpandas.arraysr
  rt   r  Z	_pa_arraycast	timestampr~   )r<   r   r  	file_pathrR   rS   r   r  r   test_dtype_backend>  sF   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   )r\   r  r   )r!   r  r	   r   r   r}   r  r  r8   r7   r~   )r<   r   r  r  rR   r   r   r   test_dtype_backend_and_dtypek  s   z(TestReaders.test_dtype_backend_and_dtypec              	   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  python)r!   r  Zimportorskipr8   option_contextr	   r   r  Zobject_r  r}   r  r  r7   r   r   r~   )r<   r   Zstring_storager  r  r  rR   rS   r   r   r   test_dtype_backend_string{  s8   
"z%TestReaders.test_dtype_backend_stringzdtypes, exp_valuea.1r   rM   c           	      C   s\   d}dt i|}| }tj|| |d}tdg|gd}||ks&J dt|| d S )NZdf_mangle_dup_col_dtypesr   r   r   )r   r"  zdtype dict changed)r   r   r8   r7   r	   r}   r~   )	r<   r   ZdtypesZ	exp_valuer   Z
dtype_dictZdtype_dict_copyrR   rS   r   r   r   test_dtype_mangle_dup_cols  s   z&TestReaders.test_dtype_mangle_dup_colsc                 C   s2   d}t || }tdg di}t|| d S )NZtest_spacesZtestcol)zthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  timesr   )r<   r   r   r   rS   r   r   r   test_reader_spaces  s   zTestReaders.test_reader_spaceszbasename,expectedzgh-35802ZCOLUMNzTest (1)zgh-36122z
got 2nd sars   c                 C   s6   |dkrt d|  t|| }t|| d S )Nr   zSkipped for engine: )r!   r  r8   r7   r}   r~   )r<   r   r   r   rS   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)r8   r7   r}   assert_contains_allkeyslistr<   r   r   dfsexpected_keysr   r   r   test_reading_all_sheets  s
   z#TestReaders.test_reading_all_sheetsc                 C   sV   d}g d}t j|| |d}tt|}t||  t|t| ks)J d S )Nr&  )ru   r'  r'  r   )r8   r7   r,  setr}   r*  r+  r   )r<   r   r   r/  r.  r   r   r   %test_reading_multiple_specific_sheets  s   z1TestReaders.test_reading_multiple_specific_sheetsc                 C   s2   d}t j|| d d}g d}t||  d S )Nblank_with_headerr   )r[   rg   r   )r8   r7   r}   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blankr[   r   )r8   r7   r}   r~   r	   )r<   r   r   r   r   r   test_read_excel_blank  s   z!TestReaders.test_read_excel_blankc                 C   s0   t ddgd}tjd| dd}t|| d S )NZcol_1Zcol_2rs   r3  r[   r   )r	   r8   r7   r}   r~   )r<   r   rS   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\)$rY   r3  rM   )headerr\   rK   c                 S   s   dd S )NrM   r   r   r   r   r   r   r          zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)rf   r\   )r!   r`   rk   r8   r7   ZeroDivisionErrorr<   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   |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   rn   ro   z
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@xDzTimothy BrownZDateColWithBigIntZ	StringColrs   r   zMaybe not supported by openpyxl)r   r   z)Defaults to openpyxl, maybe not supportedZtestdateoverflow)rx   ry   r!   rz   r{   r	   r8   r  r7   r}   r~   )r<   r+   r   r   rS   rR   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   rn   ro   rK   r[   r   r   )r]   r\   Frv   r   )r<   r+   r   r   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 )NrK   r[   r   r   rL   )r8   r7   rO   r}   r~   )r<   r   pthrS   rQ   r   r   r   r   test_excel_read_buffer5  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 )NrU   zUnknown engine: foorY   r   r3   rj   )r<   Z
bad_enginer   r   r   test_bad_engine_raises<  s   "z"TestReaders.test_bad_engine_raisesr\   rd   r   r   r[   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 foundrY   r5  r   rj   )r<   r   r\   rb   r   r   r   test_bad_sheetname_raisesA  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 )NrU   |)z(No such file or directoryu   没有那个文件或目录zFile o directory non esistente)rY   )joinr!   r`   FileNotFoundErrorr8   r7   )r<   r   Zbad_filerZ   r   r   r   test_missing_file_raisesK  s   
"z$TestReaders.test_missing_file_raisesc                 C   s~   d}|d u rt }d}n|dkrddlm} |}d}nt}d}tj||d tt| W d    d S 1 s8w   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 filerY   )	rk   r   rJ  r   r!   r`   r8   r7   r   )r<   r   Z
bad_streamerrorrb   rJ  r   r   r   test_corrupt_bytes_raisesX  s   "z%TestReaders.test_corrupt_bytes_raisesc                 C   sh   t d| d}|j| d W d    n1 sw   Y  t|j}td| }t|| d S )NrK   rL   )content)rO   Zserve_contentreadr8   r7   urlr}   r~   )r<   Z
httpserverr   rQ   	url_tablelocal_tabler   r   r   test_read_from_http_urln  s   z#TestReaders.test_read_from_http_urlc                 C   s~   t d| d}|jd| |d W d    n1 sw   Y  d|j d| }tj||d}td| }t|| d S )NrK   rL   KeyZBodys3:///test1)Zstorage_options)rO   
put_objectr   r8   r7   r}   r~   )r<   r   s3_public_buckets3sorQ   rO  rP  rQ  r   r   r   test_read_from_s3_urlw  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 )NrK   rL   rS  r   rU  rV  r   )	rO   rW  s3fsZS3FileSystemr   r8   r7   r}   r~   )	r<   r   rX  rY  rQ   r[  Zs3rP  rQ  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 )Nr4   r5   r6   rK   zfile://localhost/ zfailing on )ospathrG  r8   r7   r   platformunamestripr!   r  r}   r~   )r<   r   r=   Z
localtablerQ  rP  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 )NrK   r[   r   r   )r8   r7   r   r}   r~   )r<   r   str_pathrS   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   )localrK   r[   r   )	Zpy.pathrg  r^  r_  rG  r8   r7   r}   r~   )r<   r   Z	LocalPathrd  rS   re  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 )NrK   rL   r[   r   r   )r^  r_  rG  rO   r8   r7   rN  )r<   r   rd  rQ   r   r   r   r   test_close_from_py_localpath  s   
"z(TestReaders.test_close_from_py_localpathc                 C   s   |dkr|j tjjdd tdtdddtddd	d
tddddtddddtddddtddddtddddtdddd tdd!dd"td#d$d%d&td'd(d)gi}tj	d*| d+d,}t
|| tj	d-| d+d,}t
|| d S ).Nr   rn   ro   ZTimerM   ru   rd   -   8   i r      1   i@ r      *   i    9   #   i 	   )      i           i'	 r   i`
 5   i 5    %   r   i       6   Z
times_1900r[   r   Z
times_1904)rx   ry   r!   rz   r{   r	   r   r   r8   r7   r}   r~   )r<   r+   r   r   rS   r   r   r   r   test_reader_seconds  s4   

zTestReaders.test_reader_secondsc              	   C   s:  |dkr|j tjjdd tddgddgg}d| }td	d
t	ddgddt	ddgddt	ddgddt	ddgg|d}tj
|ddd	gdd}t|| ||_g d|_tj
|ddd	gd}tj||dd ||_tj
|ddd	gdd	gd }tj||dd g d|_|d!d"g|_tj
|d#dd	gd}t|| ttd|_|d$d%g|_tj
|d&dd	gdd}t|| |jd	dgd	d'd$d%g|_tj
|d(ddd	gd }t|| |d$d%g|_|d!d"g|_tj
|d)dd	gdd	gd }t|| tj
|d*dd	gdd	gdd+}t|| d S ),Nr   rn   ro   rU   barr   r   testmultiindexrM   r   
2015-01-01Tru   r   
2015-01-02Frd   r   
2015-01-03r   r   
2015-01-04rs   	mi_columnr   )r\   r8  r]   r   mi_indexr   rv   bothr\   r]   r8  ilvl1ilvl2Zmi_index_namec1c2mi_column_name)levelZname_with_intZ	both_nameZboth_name_skiprows)r\   r]   r8  ri   )rx   ry   r!   rz   r{   r   from_productr	   r8   r  r7   r}   r~   r   rt   Z	set_namesr,  r   Z
set_levels)r<   r+   r   mimi_filerS   r   r   r   r   test_read_excel_multiindex  st   


z&TestReaders.test_read_excel_multiindexzsheet_name,idx_lvl2Zboth_name_blank_after_mi_namer   r   Zboth_name_multiple_blanksr   c           	   	   C   s   |dkr|j tjjdd d| }tjddgddggd	d
gd}tddt	ddgddt	ddgddt	ddgddt	ddgg|tj
g d|fddgdd}tj||ddgddgd}t|| d S ) Nr   z;Sheets containing datetimes not supported by pyxlsb (GH4679ro   r  rU   r  r   r   r  r  r   rM   r   r  Tru   r   r  Frd   r   r  r   r   r  )rU   rU   r  r  r  r  r   r   r  )rx   ry   r!   rz   r{   r   r  r	   r8   r  Zfrom_arraysr7   r}   r~   )	r<   r+   r   r\   Zidx_lvl2r  r  rS   rR   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   rM   r\   r8  r   rq   keyvalr   ru   rs   )r8   r7   r   r  r	   r}   r~   )r<   r   r  rR   Zexp_columnsrS   r   r   r   &test_read_excel_multiindex_header_onlyd  s
   z2TestReaders.test_read_excel_multiindex_header_onlyc           	      C   s  d| }t jt jt jt jt jt jgg dg dg dg dg dgtd}g d}tg d	g d
gg dg dgd d gd}tg d	d d}t|||d}tj|ddd}t	
|| ||_tj|dddgd}t	
|| t g dg dg dg dg dg}g d}tg dg dgg dg dgd d gd}tg dd d}t|||d}tj|ddd}t	
|| ||_tj|dddgd}t	j
||dd d S )NZtest_index_name_pre17)ZR0C0ZR0C1ZR0C2ZR0C3ZR0C4)ZR1C0ZR1C1ZR1C2ZR1C3ZR1C4)ZR2C0ZR2C1ZR2C2ZR2C3ZR2C4)ZR3C0ZR3C1ZR3C2ZR3C3ZR3C4)ZR4C0ZR4C1ZR4C2ZR4C3ZR4C4r   )ZC_l0_g0ZC_l0_g1ZC_l0_g2ZC_l0_g3ZC_l0_g4)ZR0R_l0_g0R_l0_g1R_l0_g2R_l0_g3R_l0_g4)ZR1R_l1_g0R_l1_g1R_l1_g2R_l1_g3R_l1_g4)r   rM   ru   rd   r   r   r   r   r   rt   Zsingle_namesr   r   Zmulti_namesrM   )r  r  r  r  r  )r  r  r  r  r  )r   rM   ru   rd   r   Zsingle_no_namesZmulti_no_namesFrv   )r   r  r   objectr   r
   r	   r8   r7   r}   r~   r   )	r<   r   r?  r5   rt   r  sirS   r   r   r   r   test_excel_old_index_formato  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)TFrY   rK   r8  r   )r<   r   rb   argr   r   r   test_read_excel_bool_header_arg  s   z+TestReaders.test_read_excel_bool_header_argc              	   C   sJ  |dkr|j tjjdd tjd| dddgd}td	d
tddgddtddgddtddgddtddggg dd}t	
|| tjd| dtddgd}t	
|| tjd| ddd d}t	
|| tjd| ddg dd}tddtddgddtddgddtddggg dd}t	
|| d S )Nr   rn   ro   testskiprowsskiprows_listr   ru   r\   ri   rM   r   r  Tr   r  Frd   r   r  r   r   r  r   rs   c                 S      | dv S N)r   ru   r   r   r   r   r   r     r9  z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)r\   ri   r   )rx   ry   r!   rz   r{   r8   r7   r	   r  r}   r~   r   r  r<   r+   r   r   rS   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   rn   ro   r  r  c                 S   s   | dvS )N)rM   rd   r   r   r   r   r   r   r     r9  zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r  rM   r   r  Trd   r   r  Fr   rs   )rx   ry   r!   rz   r{   r8   r7   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   rK   nrowsr   )r<   r   num_rows_to_pullr   rS   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 )NrK   r   r  )r8   r7   r   r}   r~   )r<   r   rS   Znum_records_in_filer  r   r   r   r   0test_read_excel_nrows_greater_than_nrows_in_file  s
   z<TestReaders.test_read_excel_nrows_greater_than_nrows_in_filec                 C   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 >=0rY   rK   r   r  rj   rl   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   -  r9  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\   r8  r]   ri   Nrd   )r\   r8  r]   ri   r  )r8   r7   r   r}   r~   )	r<   r   r?  r\   r8  r]   ri   rS   r   r   r   r   test_read_excel_nrows_params%  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 argumentsrY   rK   r[   r   r   r;  r   r   r   test_deprecated_kwargsI  s   "z"TestReaders.test_deprecated_kwargsc                 C   sV   d| }g d}t jg ddd}t||dd}tj|dd	d
gd d}t|| d S )Nr  ))rq   rq   r  rd   r   r  ))r   r   r  rM   ru   r  )r   rM   r  )ru   rd   r  r  r   rM   r  )r   from_tuplesr	   r8   r7   r}   r~   )r<   r   	file_namer5   idxrS   rR   r   r   r   "test_no_header_with_list_index_colM  s   z.TestReaders.test_no_header_with_list_index_colc                 C   s>   d| }dt jddg}t|dgd}t|}t|| d S )NZone_col_blank_lineg      ?rM   ru   numbersrs   )r   r   r	   r8   r7   r}   r~   )r<   r   r  r5   rS   rR   r   r   r   test_one_col_noskip_blank_lineZ  s
   
z*TestReaders.test_one_col_noskip_blank_linec                 C   sj   d| }t ddg}tjtjgtjtjgddgddgg}t||d}tj|d	d
dgd}t|| d S )Nr  )r   r   )r   rq   rM   rd   ru   r   rs   Zmi_column_empty_rowsr   r  )	r   r  r   r   r	   r8   r7   r}   r~   )r<   r   r  rt   r5   rS   rR   r   r   r    test_multiheader_two_blank_linesb  s   $
z,TestReaders.test_multiheader_two_blank_linesc                 C   s$   d| }t |}|jdksJ dS )z
        Sheets can contain blank cells with no data. Some of our readers
        were including those cells, creating many empty rows and columns
        Ztrailing_blanks)rd   rd   N)r8   r7   shape)r<   r   r  rR   r   r   r   test_trailing_blanksm  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 worksheetsro   z"Worksheet named 'Chart1' not foundrY   
chartsheetZChart1r   
r!   r  rx   ry   rz   r{   r`   rk   r8   r7   r<   r+   r   r   r   r   r   test_ignore_chartsheets_by_strv  s   
"z*TestReaders.test_ignore_chartsheets_by_strc                 C   r  )Nr   r  r   r  ro   z0Worksheet index 1 is invalid, 1 worksheets foundrY   r  rM   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,rM   )decimalri   )rM   gAc̝ė@g	hAABCZpoig2[j@)ru   gHzG^@g{G@ZDEFZuytgUq&?)rd   g%Cq@g^@ZGHIZrezg)@)ZIdZNumber1ZNumber2ZText1ZText2ZNumber3rs   r   r   r   r   r   test_euro_decimal_format  s   z$TestReaders.test_euro_decimal_format)Y__name__
__module____qualname__r!   fixturer@   rT   rc   rm   r   r   rz   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%  r0  r2  r4  r6  r7  r<  filterwarningsr=  r@  rB  rC  rE  rI  rL  networkZ
single_cpurR  tdZskip_if_not_us_localerZ  r\  Zslowrc  rf  
skip_if_norh  ri  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   w   s   

5(



	3
-$




 




	!V
"I7
	r0   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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.rY   rK   rL   r3   )r}   assert_produces_warningFutureWarningrO   r8   r7   rN  )r<   r   r   rb   rQ   r   r   r   test_deprecate_bytes_input  s   "z,TestExcelFileRead.test_deprecate_bytes_inputTr1   c                 C   r2   )zH
        Change directory and set engine for ExcelFile objects.
        r3   r4   r5   r6   rN   N)r   r8   rN   r9   r:   r;   r   r   r   r@     rA   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   rF   rK   rM   )r8   rN   r   )r<   r   r   rP   r6   rR   rS   r   r   r   rT     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test4r[   Fappler\   Zkeep_default_naZ	na_valuesr  rM   rabbitr   rs   Ttest51.#QNANr   )r8   rN   r7   r	   r   r   r}   r~   )r<   r   r6   r   rS   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  r[   Tr  r  Fr  rM   r   r  r   rs   )r8   rN   r7   r   r   r	   r}   r~   )r<   r   r  rC   r6   r   rS   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   rn   ro   rK   r   r   rM   r   Frv   )r]   )ri   r]   r   r   )r]   r   )rx   ry   r!   rz   r{   r8   rN   r7   r}   r~   rE   r   )r<   r+   r   r   r6   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 r>  )
rx   ry   r!   rz   r{   r8   rN   rE   r}   r~   )	r<   r+   r   r   r?  r\   r6   Z	df1_parseZ	df2_parser   r   r   r@  $  s    z!TestExcelFileRead.test_sheet_namer\   rd   r   r   r[   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 rD  )r!   r`   rk   r8   rN   rE   )r<   r   r\   rb   r6   r   r   r   rE  8  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 )NrK   r[   r   r\   r]   r   rL   r   )r8   r7   rO   rN   r}   r~   )r<   r   r   rA  rS   rQ   rI   r   r   r   r   rB  C  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 )NrK   rL   r[   r   r  )rO   r8   rN   r7   closed)r<   r   r   rQ   rG   r   r   r   test_reader_closes_fileM  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 ExcelFilerK   rY   rU   r3   )r8   rN   r!   r`   rk   r7   )r<   r   rb   Zxlr   r   r   test_conflicting_excel_enginesU  s   "z0TestExcelFileRead.test_conflicting_excel_enginesc                 C   sj   t jd| |d}td| d}| }W d    n1 sw   Y  t jt||d}t|| d S )NrK   r3   rL   )r8   r7   rO   rN  r   r}   r~   )r<   r   r   rS   rQ   r5   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 )NrK   rL   r3   )rO   r8   r7   r}   r~   )r<   r   r   rQ   rR   rS   r   r   r   %test_excel_read_binary_via_read_excelg  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.xlsxrL   zexceeds maximumrY   r   rM   r  )rO   r!   r`   rk   r8   r7   )r<   r   rQ   r   r   r   )test_read_excel_header_index_out_of_rangen  s   "z;TestExcelFileRead.test_read_excel_header_index_out_of_ranger?  zdf_empty.xlsxzdf_equals.xlsxc                 C   s`   t dgdd}tjddgddgd}td	d
gg||dd}tj|dddd	gd}t|| d S )NZZI2r   r  )r   zB.1ZI11ZI12r  rM   rd   r   )r   rt   r   r[   r   r  )r
   r   r  r	   r8   r7   r}   r~   )r<   r?  r  colsrS   rR   r   r   r   test_header_with_index_colt  s   z,TestExcelFileRead.test_header_with_index_colc           	      C   s   |dkr|j tjjdd d| }t|}tj|ddgd|d}W d    n1 s.w   Y  tj	t
dt
d	fgt
d t
d	 gd
}tg g |d}t|| d S )Nr   rn   ro   Ztest_datetime_mir   rM   )r8  r]   r   z
02/29/2020z
03/01/2020r  r  )rx   ry   r!   rz   r{   r8   rN   r7   r   r  to_datetimeZto_pydatetimer	   r}   r~   )	r<   r+   r   r   rQ   r6   r   Zexpected_column_indexrS   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 *rY   zio.excelz.readerabc)r!   r`   rk   r8   r   r;  r   r   r   test_engine_invalid_option  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  ro   r  r[   )	r!   r  rx   ry   rz   r{   r8   rN   Zsheet_names)r<   r+   r   r   r6   r   r   r   test_ignore_chartsheets  s   
"z)TestExcelFileRead.test_ignore_chartsheetsc              
   C   s   t f}|d u rtd|  n|dkrdd l}t |jjf}td| B}t|j	ddd t
d z	tj||d W n	 |yH   Y nw W d    n1 sSw   Y  W d    d S W d    d S 1 skw   Y  d S )	NzInvalid test for engine=r   r   Zcorruptzutf-8)encodingFr3   )r   r!   r  r   ZbiffhrJ  r}   r  r   
write_textr  r8   rN   )r<   r   r   errorsr   filer   r   r   test_corrupt_files_closed  s&   "z+TestExcelFileRead.test_corrupt_files_closedN)r  r  r  r  r!   r  r@   rT   r  rz   r  r  r  r@  rE  rB  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s6    

&





r  )0r   r   	functoolsr   r4   r   r^  pathlibr   r`  r^   urllib.errorr   zipfiler   numpyr   r!   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  Zpandasr8   r	   r
   r   r   Zpandas._testingZ_testingr}   Zpandas.core.arraysr   r   r%   r"   r  Zengine_paramsr   boolr    r$   r  r,   r   r   r0   r  r   r   r   r   <module>   sx    

	

          3