U
    ¾mœdTî  ã                	   @   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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 d	d
dddgZej de !d¡gd�ej de !d¡gd�ej de !d¡gd�ej de !d¡d�ej de !d¡d�gZ"e#e$dœdd„Z%dd„ Z&ej'dd„ e"D ƒe#d�dd„ ƒZ(ej'dd„ ƒZ)ej'dd „ ƒZ*G d!d"„ d"ƒZ+G d#d$„ d$ƒZ,dS )%é    )ÚdatetimeÚtime)ÚpartialN)ÚPath)ÚURLError)Ú
BadZipFile)Ú	DataFrameÚIndexÚ
MultiIndexÚSeries)ÚArrowStringArrayÚStringArrayú.xlsú.xlsxú.xlsmú.xlsbú.odsÚxlrd©ÚmarksÚopenpyxlÚpyxlsbÚodf)Úread_extÚreturnc                 C   s†   | j d } | dkr|dkrdS | dkr2|dkr2dS |dkrF| dkrFdS | dkrZ|dkrZdS |dkrn| dkrndS | d	kr‚|dkr‚d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   ú[/home/sam/Atlas/atlas_env/lib/python3.8/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_marksO   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>Z   s
    
ýr'   )ÚparamsZidsc                 C   s   | j S )zS
    Fixture for Excel reader engine and read_ext, only including valid pairs.
    )r!   )Úrequestr   r   r   Úengine_and_read_extY   s    r*   c                 C   s   | \}}|S ©Nr   ©r*   r   r   r   r   r   r   i   s    r   c                 C   s   | \}}|S r+   r   r,   r   r   r   r   o   s    r   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	ej
 ddddgdddgdddgdddgdddgdddg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,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zej
 d6d"edd#dd7gd8d9d:d;gdd#dd7gd<d=ejd>gd?œƒfd@dAeed?œee dd#dd7gd@dB�e d8d9d:d;gdAdB�dCdDdEdFgdGdHejdIgd?œƒfg¡dJdK„ ƒZ!dLdM„ Z"dNdO„ Z#e$ %dP¡dQdR„ ƒZ&ej
 dSi dGfdTdUidfg¡dVdW„ ƒZ'dXdY„ Z(ej
 dZd[ed\d]giƒfd^ed_gd`�fg¡dadb„ ƒZ)dcdd„ Z*dedf„ Z+dgdh„ Z,didj„ Z-dkdl„ Z.dmdn„ Z/ej
 0do¡dpdq„ ƒZ1drds„ Z2dtdu„ Z3dvdw„ Z4ej
 dxdddgddgdydzdygdydzgg¡d{d|„ ƒZ5d}d~„ Z6dd€„ Z7ej
j8e9j8d�dd‚�dƒd„„ ƒƒZ:e$j;ej
j<d…d†„ ƒƒZ=ej
j<d‡dˆ„ ƒZ>ej
j?d‰dŠ„ ƒZ@d‹dŒ„ ZAe$ %d�¡dŽd�„ ƒZBd�d‘„ ZCd’d“„ ZDd”d•„ ZEej
 d–d—ejd˜d™d˜gfdšejgd7 fg¡d›dœ„ ƒZFd�dž„ ZGdŸd „ ZHd¡d¢„ ZId£d¤„ ZJd¥d¦„ ZKd§d¨„ ZLd©dª„ ZMd«d¬„ ZNej
 d­d®d¯ddgdd"fd®d°d"ddgd"fd®d±ddgddgd"fd®d²ddgdd"fd³d´d"d"dd#gfd³d´d"d"dµd¶„ fg¡d·d¸„ ƒZOd¹dº„ ZPd»d¼„ ZQd½d¾„ ZRd¿dÀ„ ZSdÁdÂ„ ZTdÃdÄ„ ZUdÅdÆ„ ZVdÇdÈ„ ZWd"S )ÉÚTestReadersT©Zautousec                 C   s2   t tj|d�}| |dddƒ¡ | td|¡ dS )zG
        Change directory and set engine for read_excel calls.
        ©r   ÚioÚdataÚexcelÚ
read_excelN)r   Úpdr3   ÚchdirÚsetattr©Úselfr   ÚdatapathÚmonkeypatchÚfuncr   r   r   Úcd_and_set_enginev   s    zTestReaders.cd_and_set_enginec           	   	   C   sz   dd„ }|  tjd|¡ ddddddœ}td	| d
ƒ�}t |¡}W 5 Q R X |d k	rZ|}n||dd …  }||ksvt‚d S )Nc                 _   s   | j S r+   r/   )r8   ÚargsÚkwargsr   r   r   Úparser�   s    z,TestReaders.test_engine_used.<locals>.parserÚparser   r   r   r   ©ÚxlsxZxlsmZxlsbÚxlsZodsÚtest1Úrbé   )r6   r4   Ú	ExcelFileÚopenr3   ÚAssertionError)	r8   r   r   r:   r?   Úexpected_defaultsÚfÚresultÚexpectedr   r   r   Útest_engine_used   s    ûzTestReaders.test_engine_usedc              	   C   sl   d}t jt|d�� tjd| dddd� W 5 Q R X t jt|d��  tjd| dd	gddd
� W 5 Q R X d S )Nz Passing an integer for `usecols`©ÚmatchrD   ÚSheet1r   é   ©Ú
sheet_nameÚ	index_colÚusecolsÚSheet2rF   ©rT   ÚskiprowsrU   rV   ©r    ÚraisesÚ
ValueErrorr4   r3   ©r8   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	d	d
dgd�}tjd| ddgd	d	d
dgd�}tj	||dd� tj	||dd� d S )Nr   ú3Sheets containing datetimes not supported by pyxlsb©ÚreasonÚBÚC©ÚcolumnsrD   rQ   r   é   rR   rS   rW   rF   rX   F©Zcheck_names©
ÚnodeÚ
add_markerr    ÚmarkÚxfailÚreindexr4   r3   ÚtmÚassert_frame_equal)r8   r)   r   Údf_refÚdf1Údf2r   r   r   Útest_usecols_list©   s,    ÿÿ   ÿû	zTestReaders.test_usecols_listc                 C   sD  |dkr|j  tjjdd�¡ |jd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� |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   r`   ra   ÚArc   rd   re   rD   rQ   r   zA:DrS   rW   rF   rX   Frh   zA,C,DzA,C:Dri   ©r8   r)   r   rq   rr   rs   Údf3r   r   r   Útest_usecols_strÁ   sl    ÿÿ   ÿû	   ÿû   ÿûzTestReaders.test_usecols_strrV   r   rF   rR   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   r`   ra   ru   rd   rD   rQ   r   rS   Frh   ©	rj   rk   r    rl   rm   r4   r3   ro   rp   )r8   r)   r   rV   rq   rM   rL   r   r   r   Ú.test_usecols_diff_positional_int_columns_orderö   s    ÿÿ   ÿz:TestReaders.test_usecols_diff_positional_int_columns_orderrc   ÚDc                 C   sB   |ddg }t t|ƒƒ|_tjd| d|d�}tj||dd� d S )Nrc   r{   rD   rQ   ©rT   rV   Frh   )ÚrangeÚlenÚindexr4   r3   ro   rp   )r8   r   rV   rq   rM   rL   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   r`   ra   rD   rQ   r   ©rT   rU   Frh   ry   ©r8   r)   r   rq   rM   rL   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   r`   ra   rd   r{   rD   rQ   r   zA,D:ErS   Frh   ry   r‚   r   r   r   Útest_usecols_excel_range_str  s    ÿÿ   ÿz(TestReaders.test_usecols_excel_range_strc              	   C   s6   d}t jt|d�� tjd| ddd� W 5 Q R X d S )NzInvalid column name: E1rO   rD   rQ   zD:E1r|   rZ   r]   r   r   r   Ú$test_usecols_excel_range_str_invalid+  s    z0TestReaders.test_usecols_excel_range_str_invalidc              	   C   s>   d}t jt|d��" tjd| ddgddgd� W 5 Q R X d S )Nz(list indices must be integers.*, not strrO   rD   rQ   ru   rd   rS   ©r    r[   Ú	TypeErrorr4   r3   r]   r   r   r   Útest_index_col_label_error1  s    üz&TestReaders.test_index_col_label_errorc                 C   sX   t jd| ddddgd�}tddd	gtg gd
 g gd
 dddgd�d�}t ||¡ d S )NrD   ÚSheet3ru   rc   rd   r�   r{   ÚEÚFrR   ©ZlevelsÚcodesÚnames©rf   r   )r4   r3   r   r
   ro   rp   ©r8   r   rL   rM   r   r   r   Útest_index_col_empty<  s      ÿþz TestReaders.test_index_col_emptyrU   Nrg   c                 C   sZ   t jd| d|d�}tdddgddd	ggd
ddgd�}|rJ| |j| ¡}t ||¡ d S )NrD   ÚSheet4r�   Úi1ÚaÚxÚi2ÚbÚyz
Unnamed: 0Zcol1Zcol2re   )r4   r3   r   Ú	set_indexrf   ro   rp   )r8   r   rU   rL   rM   r   r   r   Útest_index_col_with_unnamedG  s      ÿ ÿz'TestReaders.test_index_col_with_unnamedc              	   C   s6   d}t jt|d�� tjd| dgd� W 5 Q R X d S )NzEUsecols do not match columns, columns expected but not found: \['E'\]rO   rD   rŠ   ©rV   rZ   r]   r   r   r   Ú%test_usecols_pass_non_existent_columnU  s    ÿz1TestReaders.test_usecols_pass_non_existent_columnc              	   C   s8   d}t jt|d�� tjd| ddgd� W 5 Q R X d S )Nz['usecols' must either be list-like of all strings, all unicode, all integers or a callable.rO   rD   ZE1r   r›   rZ   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test2rQ   ©rT   ZaaaaZbbbbbÚTestZTest1re   ©r4   r3   r   ro   rp   )r8   r   ÚparsedrM   r   r   r   Útest_excel_stop_iteratorg  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   r`   ra   Ztest3rQ   rž   rŸ   re   )rj   rk   r    rl   rm   r4   r3   r   ÚnpÚnanro   rp   )r8   r)   r   r¡   rM   r   r   r   Útest_excel_cell_error_nal  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   r`   ra   rD   rQ   r   r�   rW   rF   ©rT   rY   rU   Frh   ©rT   rU   Ú
skipfooteréÿÿÿÿ)
rj   rk   r    rl   rm   r4   r3   ro   rp   Úilocrv   r   r   r   Útest_excel_tablex  s,    ÿÿ   ÿ   ÿzTestReaders.test_excel_tablec           
      C   sp  |dkr|j  tjjdd�¡ t dddddgd	d
dddgdddddgdddddgdddddg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 ]4\}}tj	|| d |d$�}| |¡}	t
 ||	¡ �q |d%  t¡|d%< tj	|| d d%tid&�}t
 ||¡ d S )'Nr   r`   ra   rF   rg   éýÿÿÿé   r   g      ô?g      @gHáz®Gý?g¸…ëQ¸þ?g•Ö&è.>TFrR   é   r”   ÚcÚdÚeiÝ  é
   é   é   iq  é   é   iß  )ÚIntColÚFloatColÚBoolColÚStrColÚStr2ColZDateColZ
test_typesrQ   rž   g      @r»   r�   rº   ©rT   Ú
converters)rj   rk   r    rl   rm   r   Ú	from_dictr   r4   r3   ro   rp   ÚcopyÚlocr   Ú	enumeraterf   r™   ÚapplyÚstr)
r8   r)   r   rM   ÚbasenameÚactualZfloat_expectedZicolÚnameÚexpr   r   r   Útest_reader_special_dtypes�  sT    ÿÿ




ûúÿ  ÿ
  ÿz&TestReaders.test_reader_special_dtypesc              
   C   s†   d}t  dddddgdtjdd	d
gdddddg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_convertersrF   rg   r¬   éüÿÿr   g      )@gÍÌÌÌÌL2@g3333333@g:Œ0âŽy5>ÚFoundú	Not foundÚ1Ú3Ú4Ú5)r·   r¸   r¹   rº   c                 S   s   | dkrt | ƒS dS )NÚ rÉ   )Úint©r•   r   r   r   Ú<lambda>Í  ó    z4TestReaders.test_reader_converters.<locals>.<lambda>c                 S   s   | rd|  S t jS )Nr²   )r£   r¤   rÒ   r   r   r   rÓ   Î  rÔ   c                 S   s   | dkrdS dS )NrÐ   rÊ   rË   r   rÒ   r   r   r   rÓ   Ï  rÔ   c                 S   s   | rt | ƒS dS )NrÐ   )rÃ   rÒ   r   r   r   rÓ   Ð  rÔ   )r·   r¸   rg   rR   rQ   r¼   )r   r¾   r£   r¤   r4   r3   ro   rp   )r8   r   rÄ   rM   r½   rÅ   r   r   r   Útest_reader_convertersÀ  s&    üÿ
ü	  ÿz"TestReaders.test_reader_convertersc              	   C   sô   d}t  || ¡}tddddgdddd	gddddgd
dtjdgdœƒjddddgd�}t ||¡ t j|| ddtdœd�}|d  	d¡|d< |d  	d¡|d< ddddg|d< t ||¡ d}t
jt|d�� t j|| ddid� W 5 Q R X d S )NÚ	testdtyperF   rg   rR   r­   ç      @ç      @ç      @ç      @ç      ð?ç       @ç      @©r”   r—   r¯   r°   r”   r—   r¯   r°   re   Úfloat64Úfloat32)r”   r—   r¯   ©ÚdtypeÚ001Ú002Ú003Ú004z(Unable to convert column d to type int64rO   Úint64)r4   r3   r   r£   r¤   rn   ro   rp   rÃ   Zastyper    r[   r\   )r8   r   rÄ   rÅ   rM   r^   r   r   r   Útest_reader_dtypeÚ  s.    


üÿ
ù	 
ÿzTestReaders.test_reader_dtypezdtype,expectedr­   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   rã   rä   rå   ræ   rÌ   Ú2rÎ   c                 C   s&   d}t j|| |d�}t ||¡ d S )NrÖ   rá   ©r4   r3   ro   rp   )r8   r   râ   rM   rÄ   rÅ   r   r   r   Útest_reader_dtype_str÷  s    z!TestReaders.test_reader_dtype_strc                    s~  |dk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 5 Q R X |dk�rjd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: 'ú'rF   rR   ZInt64rá   r×   rÙ   ZFloat64TFÚbooleanr”   r—   Ústringé   g      @z
2019-12-31rg   )
r”   r—   r¯   r°   r±   rK   ÚgÚhÚiÚjÚtest©r   ©rT   Údtype_backendÚpyarrowr   )ÚArrowExtensionArrayc                    s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Zfrom_pandas)Úarray)r%   Úcol©rû   ÚdfÚpar   r   Ú
<dictcomp>7  s   ÿ z2TestReaders.test_dtype_backend.<locals>.<dictcomp>rô   Úus)Úunitrõ   )r    Úskipr   r   r4   ÚNAÚ	Timestampro   Úensure_cleanÚto_excelr3   rú   Zpandas.arraysrû   rf   rü   Ú_dataÚcastÚ	timestamprp   )r8   r   rù   Ú	file_pathrL   rM   r   rþ   r   Útest_dtype_backend  sH    öÿ  ÿ
þÿÿzTestReaders.test_dtype_backendc              	   C   s|   |dk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 5 Q R X t 
||¡ d S )Nrì   rí   rî   rÛ   r×   ©r”   r—   rö   Fr÷   Únumpy_nullablerß   )rT   rù   râ   )r    r  r   r£   r¤   ro   r  r  r4   r3   rp   )r8   r   rÿ   r  rL   r   r   r   Útest_dtype_backend_and_dtypeF  s    üz(TestReaders.test_dtype_backend_and_dtyperú   c              
   C   s  |dkrt  d|› d�¡ dd l}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 5 Q R X |dkrØt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 5 Q R X d S )Nrì   rí   rî   r   zmode.string_storager”   r—   rá   r•   r  rö   Fr÷   r  rø   Úpython)r    r  rú   r4   Úoption_contextr   r£   rü   Zobject_r  ro   r  r  r3   r   r   rp   )r8   r   Zstring_storager   rÿ   r  rL   rM   r   r   r   Útest_dtype_backend_stringV  s8    þÿ  ÿþÿþÿz%TestReaders.test_dtype_backend_stringzdtypes, exp_valueúa.1rç   c           	      C   s\   d}dt i|–}| ¡ }tj|| |d�}tdg|gdœƒ}||ksLtdƒ‚t ||¡ d S )NZdf_mangle_dup_col_dtypesr”   rá   rÌ   )r”   r  zdtype dict changed)rÃ   r¿   r4   r3   r   rI   ro   rp   )	r8   r   ZdtypesZ	exp_valuerÄ   Z
dtype_dictZdtype_dict_copyrL   rM   r   r   r   Útest_dtype_mangle_dup_cols{  s    z&TestReaders.test_dtype_mangle_dup_colsc                 C   s8   d}t  || ¡}tddddddgiƒ}t ||¡ d S )NZtest_spacesZtestcolzthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  timesr    )r8   r   rÄ   rÅ   rM   r   r   r   Útest_reader_spaces‡  s    ûÿÿzTestReaders.test_reader_spaceszbasename,expectedzgh-35802ZCOLUMNzTest (1)zgh-36122z
got 2nd sare   c                 C   s6   |dkrt  d|› �¡ t || ¡}t ||¡ d S )Nr   zSkipped for engine: )r    r  r4   r3   ro   rp   )r8   r   r   rÄ   rM   rÅ   r   r   r   Útest_read_excel_ods_nested_xmlš  s    	z*TestReaders.test_read_excel_ods_nested_xmlc                 C   sH   d}t j|| d d�}dddg}t || ¡ ¡ |t| ¡ ƒksDt‚d S )NÚtest_multisheetrž   ÚCharlieÚAlphaÚBeta)r4   r3   ro   Úassert_contains_allÚkeysÚlistrI   ©r8   r   rÄ   ÚdfsÚexpected_keysr   r   r   Útest_reading_all_sheets©  s
    
z#TestReaders.test_reading_all_sheetsc                 C   sX   d}dddg}t j|| |d�}tt|ƒƒ}t || ¡ ¡ t|ƒt| ¡ ƒksTt‚d S )Nr  rg   r  rž   )	r4   r3   r  Úsetro   r  r  r~   rI   )r8   r   rÄ   r!  r   r   r   r   Ú%test_reading_multiple_specific_sheets¶  s    
z1TestReaders.test_reading_multiple_specific_sheetsc                 C   s4   d}t j|| d d�}dddg}t || ¡ ¡ d S )NÚblank_with_headerrž   rQ   rW   r‰   )r4   r3   ro   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ÚblankrQ   rž   )r4   r3   ro   rp   r   )r8   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_2re   r%  rQ   rž   )r   r4   r3   ro   rp   )r8   r   rM   rÅ   r   r   r   Ú!test_read_excel_blank_with_headerÒ  s    z-TestReaders.test_read_excel_blank_with_headerc              	   C   sf   t jtdd�� tjd| dgd d� W 5 Q R X t jtdd�� tjd| dd„ d d	� W 5 Q R X d S )
Nz \(sheet: Sheet1\)$rO   r%  rF   )ÚheaderrT   rD   c                 S   s   dd S )NrF   r   r   rÒ   r   r   r   rÓ   Ü  rÔ   zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)rV   rT   )r    r[   r\   r4   r3   ÚZeroDivisionError©r8   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rj|j  tjjdd�¡ |d kr�|dkr�|j  tjjdd�¡ t d| ¡}t	 
||¡ d S )Nr   r`   ra   z
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@Œµx¯DzTimothy BrownZDateColWithBigIntZ	StringColre   r   zMaybe not supported by openpyxl)r   r   z)Defaults to openpyxl, maybe not supportedZtestdateoverflow)rj   rk   r    rl   rm   r   r4   r  r3   ro   rp   )r8   r)   r   r   rM   rL   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   r`   ra   rD   rQ   r   r�   )rU   rT   Frh   ry   )r8   r)   r   rq   ÚfilenamerT   rr   rs   r   r   r   Útest_sheet_nameÿ  s     ÿÿ  ÿzTestReaders.test_sheet_namec              	   C   sN   d| }t j|ddd�}t|dƒ�"}t j|ddd�}t ||¡ W 5 Q R X d S )NrD   rQ   r   r�   rE   )r4   r3   rH   ro   rp   )r8   r   ÚpthrM   rK   rÅ   r   r   r   Útest_excel_read_buffer  s
    z"TestReaders.test_excel_read_bufferc              	   C   s0   d}t jtdd�� tjd|d� W 5 Q R X d S )NÚfoozUnknown engine: foorO   rÐ   r/   rZ   )r8   Z
bad_enginer   r   r   Útest_bad_engine_raises  s    z"TestReaders.test_bad_engine_raisesrT   r’   rQ   c              	   C   s4   d}t jt|d�� tjd| |d� W 5 Q R X d S ©Nz?Worksheet index 3 is invalid|Worksheet named 'Sheet4' not foundrO   r'  rž   rZ   )r8   r   rT   r^   r   r   r   Útest_bad_sheetname_raises  s    z%TestReaders.test_bad_sheetname_raisesc              	   C   s6   d|› �}d}t jt|d�� t |¡ W 5 Q R X d S )Nr4  uV   (No such file or directory|æ²¡æœ‰é‚£ä¸ªæ–‡ä»¶æˆ–ç›®å½•|File o directory non esistente)rO   )r    r[   ÚFileNotFoundErrorr4   r3   )r8   r   Zbad_filerP   r   r   r   Útest_missing_file_raises'  s    
z$TestReaders.test_missing_file_raisesc              	   C   sd   d}|d krt }d}n&|dkr4ddlm} |}d}nt}d}tj||d�� t |¡ W 5 Q R X 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 filerO   )r\   r   r:  r   r    r[   r4   r3   )r8   r   Z
bad_streamÚerrorr^   r:  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)ÚurlZ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/test1rD   rê   )r8   r   r=  Ú	url_tableÚlocal_tabler   r   r   Útest_read_from_http_urlD  s    
ÿÿ
z#TestReaders.test_read_from_http_urlc              	   C   sf   t d| dƒ�}| d¡jd| |d� W 5 Q R X d| }tj||d�}t d| ¡}t ||¡ d S )NrD   rE   úpandas-test©ÚKeyZBodyús3://pandas-test/test1)Zstorage_options)rH   ÚBucketÚ
put_objectr4   r3   ro   rp   )r8   r   Ús3_resourceÚs3sorK   r=  r>  r?  r   r   r   Útest_read_from_s3_urlU  s    "z!TestReaders.test_read_from_s3_urlc           	   	   C   sˆ   t d| dƒ�}| d¡jd| |d� W 5 Q R X dd l}|jf |Ž}|  d| ¡�}t |¡}W 5 Q R X t d| ¡}t ||¡ d S )NrD   rE   rA  rB  r   rD  )	rH   rE  rF  Ús3fsZS3FileSystemr4   r3   ro   rp   )	r8   r   rG  rH  rK   rJ  Zs3r>  r?  r   r   r   Útest_read_from_s3_objectb  s    "z$TestReaders.test_read_from_s3_objectc                 C   s~   t j |dddƒd| ¡}t |¡}zt d| ¡}W n6 tk
rl   d t ¡ ¡ ¡ }t	 
d|› �¡ Y nX t ||¡ d S )Nr0   r1   r2   rD   zfile://localhost/ú zfailing on )ÚosÚpathÚjoinr4   r3   r   ÚplatformÚunameÚstripr    r  ro   rp   )r8   r   r9   Z
localtabler?  r>  Zplatform_infor   r   r   Útest_read_from_file_urls  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 )NrD   rQ   r   r�   )r4   r3   r   ro   rp   )r8   r   Ústr_pathrM   Ú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   )ÚlocalrD   rQ   r�   )	Zpy.pathrW  rM  rN  rO  r4   r3   ro   rp   )r8   r   Z	LocalPathrT  rM   rU  rÅ   r   r   r   Útest_read_from_py_localpathŒ  s    z'TestReaders.test_read_from_py_localpathc              	   C   sD   t j d| ¡}t|dƒ� }tj|ddd�}~| ¡  W 5 Q R X d S )NrD   rE   rQ   r   r�   )rM  rN  rO  rH   r4   r3   Úread)r8   r   rT  rK   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   r`   ra   ZTimerF   rg   rR   é-   é8   i † r­   é   é1   i@ rñ   é   é*   ià“ é   é9   é#   i€ é	   é)   é   i ¡ é   é   é   iÀ'	 r¶   i`®
 é5   i 5 é   é%   r   i » é   é   é6   Z
times_1900rQ   rž   Z
times_1904)rj   rk   r    rl   rm   r   r¾   r   r4   r3   ro   rp   )r8   r)   r   r   rM   rÅ   r   r   r   Útest_reader_seconds¢  s4    ÿÿ

õÿÿzTestReaders.test_reader_secondsc              	   C   sB  |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 ||¡ ||_ddddg|_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� ddddg|_| 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   r`   ra   r4  Úbarr”   r—   ÚtestmultiindexrF   r×   ú
2015-01-01Trg   rØ   ú
2015-01-02FrR   rÙ   ú
2015-01-03r­   rÚ   ú
2015-01-04re   Ú	mi_columnr   )rT   r*  rU   r¯   r°   Úmi_indexr�   rh   Úboth©rT   rU   r*  Úilvl1Úilvl2Zmi_index_nameÚc1Úc2Úmi_column_name)ÚlevelZname_with_intZ	both_nameZboth_name_skiprows)rT   rU   r*  rY   )rj   rk   r    rl   rm   r
   Úfrom_productr   r4   r  r3   ro   rp   r   rf   Z	set_namesr  r}   Z
set_levels)r8   r)   r   ÚmiÚmi_filerM   rÅ   r   r   r   Útest_read_excel_multiindexÃ  s’    ÿÿüù
   ÿ   ÿ   ÿ   ÿ   ÿûz&TestReaders.test_read_excel_multiindexzsheet_name,idx_lvl2Zboth_name_blank_after_mi_namer—   r”   Zboth_name_multiple_blanksc           	   	   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
ddddg|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 (GH4679ra   rr  r4  rq  r”   r—   r}  r~  ©rŽ   rF   r×   rs  Trg   rØ   rt  FrR   rÙ   ru  r­   rÚ   rv  r{  r|  r�   r   rz  )rj   rk   r    rl   rm   r
   r�  r   r4   r  Zfrom_arraysr3   ro   rp   )	r8   r)   r   rT   Zidx_lvl2rƒ  r‚  rM   rL   r   r   r   Ú+test_read_excel_multiindex_blank_after_name  s6    ÿÿüþøüz7TestReaders.test_read_excel_multiindex_blank_after_namec                 C   sT   d| }t j|dddgd�}t ddg¡}tddd	d
ggd |d�}t ||¡ d S )Nrr  Úindex_col_noner   rF   ©rT   r*  ©ru   rc   ©ÚkeyÚvalrg   rR   r­   re   )r4   r3   r
   r�  r   ro   rp   )r8   r   rƒ  rL   Zexp_columnsrM   r   r   r   Ú&test_read_excel_multiindex_header_onlyB  s
    z2TestReaders.test_read_excel_multiindex_header_onlyc           	      C   s  d| }t  d d d d d gdddddgddd	d
dgdddddgdddddgdddddgg¡}dddddg}td d!d"d#d$d%gd&d'd(d)d*d+ggd,d-d.d/d0d1gd,d-d.d/d0d1ggd d gd2�}td d!d"d#d$d%gd d3�}t|||d4�}tj|d5d,d6�}t ||¡ ||_	tj|d7d,d-gd6�}t ||¡ t  dddddgddd	d
dgdddddgdddddgdddddgg¡}dddddg}td!d"d#d$d%gd'd(d)d*d+ggd,d-d.d/d0gd,d-d.d/d0ggd d gd2�}td!d"d#d$d%gd d3�}t|||d4�}tj|d8d,d6�}t ||¡ ||_	tj|d9d,d-gd6�}tj||d:d;� d S )<NZtest_index_name_pre17ZR0C0ZR0C1ZR0C2ZR0C3ZR0C4ZR1C0ZR1C1ZR1C2ZR1C3ZR1C4ZR2C0ZR2C1ZR2C2ZR2C3ZR2C4ZR3C0ZR3C1ZR3C2ZR3C3ZR3C4ZR4C0ZR4C1ZR4C2ZR4C3ZR4C4ZC_l0_g0ZC_l0_g1ZC_l0_g2ZC_l0_g3ZC_l0_g4ZR0ZR_l0_g0ZR_l0_g1ZR_l0_g2ZR_l0_g3ZR_l0_g4ZR1ZR_l1_g0ZR_l1_g1ZR_l1_g2ZR_l1_g3ZR_l1_g4r   rF   rg   rR   r­   r®   rŒ   ©rÆ   ©r   rf   Zsingle_namesr�   Zmulti_namesZsingle_no_namesZmulti_no_namesFrh   )
r£   rü   r
   r	   r   r4   r3   ro   rp   r   )	r8   r   r0  r1   rf   r‚  ÚsirM   rÅ   r   r   r   Útest_excel_old_index_formatM  sf    úÿ
þú ÿûÿ	þúz'TestReaders.test_excel_old_index_formatc              
   C   s>   d}dD ]0}t jt|d�� tjd| |d� W 5 Q R X qd S )Nz#Passing a bool to header is invalid)TFrO   rD   ©r*  r†   )r8   r   r^   Úargr   r   r   Útest_read_excel_bool_header_arg•  s    z+TestReaders.test_read_excel_bool_header_argc              	   C   sV  |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ddddg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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gddddgd�}t	 
||¡ d S )Nr   r`   ra   ÚtestskiprowsÚskiprows_listr   rg   ©rT   rY   rF   r×   rs  TrØ   rt  FrR   rÙ   ru  r­   rÚ   rv  r”   r—   r¯   r°   re   c                 S   s   | dkS ©N)r   rg   r   rÒ   r   r   r   rÓ   ¾  rÔ   z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)rT   rY   rŽ   )rj   rk   r    rl   rm   r4   r3   r   r  ro   rp   r£   rü   ©r8   r)   r   rÅ   rM   r   r   r   Útest_read_excel_skiprowsœ  s\    ÿÿ  ÿü
ù	ýý
üü
ù	z$TestReaders.test_read_excel_skiprowsc                 C   sz   |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ddddgd�}t	 
||¡ d S )Nr   r`   ra   r•  r–  c                 S   s   | dkS )N)rF   rR   r®   r   rÒ   r   r   r   rÓ   ß  rÔ   zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r—  rF   r×   rs  TrR   rÙ   ru  Fr”   r—   r¯   r°   re   )rj   rk   r    rl   rm   r4   r3   r   r  ro   rp   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®   rD   ©Únrowsrê   )r8   r   Únum_rows_to_pullrÅ   rM   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 )NrD   r²   rœ  )r4   r3   r~   ro   rp   )r8   r   rM   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   s4   d}t jt|d�� tjd| dd� W 5 Q R X d S )Nz'nrows' must be an integer >=0rO   rD   rÏ   rœ  rZ   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,skiprowsrr  rw  rx  ry  r  r•  r–  c                 C   s   | dkS r˜  r   rÒ   r   r   r   rÓ   
  rÔ   zTestReaders.<lambda>c           	      C   sL   t j|| ||||d�jdd… }t j|| ||||dd�}t ||¡ dS )z—
        For various parameters, we should get the same result whether we
        limit the rows during load (nrows=3) or after (df.iloc[:3]).
        )rT   r*  rU   rY   NrR   )rT   r*  rU   rY   r�  )r4   r3   rª   ro   rp   )	r8   r   r0  rT   r*  rU   rY   rM   rÅ   r   r   r   Útest_read_excel_nrows_params  s$    ûúúz(TestReaders.test_read_excel_nrows_paramsc              	   C   s0   t jtdd�� t d| dd¡ W 5 Q R X d S )Nzbut 3 positional argumentsrO   rD   rQ   r   r†   r,  r   r   r   Útest_deprecated_kwargs&  s    z"TestReaders.test_deprecated_kwargsc                 C   s^   d| }ddddg}t jddddgdd�}t||d	d
�}tj|dddgd d�}t ||¡ d S )Nrr  )rc   rc   rŠ  )rR   r­   )ru   ru   )rF   rg   )r   rF   r…  )rg   rR   r�  r‡  r   rF   rz  )r
   Úfrom_tuplesr   r4   r3   ro   rp   )r8   r   Ú	file_namer1   ÚidxrM   rL   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 )NZone_col_blank_lineg      à?rF   rg   Únumbersre   )r£   r¤   r   r4   r3   ro   rp   )r8   r   r¥  r1   rM   rL   r   r   r   Útest_one_col_noskip_blank_line7  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 )Nrr  )r”   ru   )r—   rc   rF   rR   rg   r­   re   Zmi_column_empty_rowsr   rˆ  )	r
   r¤  r£   r¤   r   r4   r3   ro   rp   )r8   r   r¥  rf   r1   rM   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 t‚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)rR   rR   N)r4   r3   ÚshaperI   )r8   r   r¥  rL   r   r   r   Útest_trailing_blanksJ  s    
z TestReaders.test_trailing_blanksc              	   C   s`   |dkrt  d¡ |dkr0|j t jjdd�¡ t jtdd�� tj	d| d	d
� W 5 Q R X d S )Nr   ú*chartsheets do not exist in the ODF formatr   ú4pyxlsb can't distinguish chartsheets from worksheetsra   z"Worksheet named 'Chart1' not foundrO   Ú
chartsheetZChart1rž   ©
r    r  rj   rk   rl   rm   r[   r\   r4   r3   ©r8   r)   r   r   r   r   r   Útest_ignore_chartsheets_by_strS  s    
ÿÿz*TestReaders.test_ignore_chartsheets_by_strc              	   C   s`   |dkrt  d¡ |dkr0|j t jjdd�¡ t jtdd�� tj	d| d	d
� W 5 Q R X d S )Nr   r­  r   r®  ra   z0Worksheet index 1 is invalid, 1 worksheets foundrO   r¯  rF   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dddddd	gd
dddddgddddddggddddddgd�}t ||¡ d S )NZtest_decimalú,rF   )ÚdecimalrY   gAñcÌ�Ä—@gÕ	h¢ïÖAÚABCZpoig2Ø[j‡ô@rg   gHáz®G^@g{®GáÍ@ZDEFZuytg¥Uq&Ø?rR   g%�•Cq‹@gçû©ñÖ^ú@ZGHIZrezgÈ)¬ç³â@ZIdZNumber1ZNumber2ZText1ZText2ZNumber3re   r    r�   r   r   r   Útest_euro_decimal_formato  s    ýúz$TestReaders.test_euro_decimal_format)XÚ__name__Ú
__module__Ú__qualname__r    Úfixturer<   rN   r_   rt   rx   rl   Úparametrizerz   r€   rƒ   r„   r…   rˆ   r‘   rš   rœ   r�   r¢   r¥   r«   rÈ   rÕ   rè   r   r£   r¤   rÃ   r   rë   r  r  ÚtdÚ
skip_if_nor  r  r  r  r"  r$  r&  r(  r)  r-  Úfilterwarningsr.  r1  r3  r5  r7  r9  r<  Únetworkro   r@  Zskip_if_not_us_localeZ
single_cpurI  rK  ZslowrS  rV  rX  rZ  rp  r„  r†  r�  r‘  r”  rš  r›  rŸ  r   r¡  r¢  r£  r§  r©  rª  r¬  r²  r³  r·  r   r   r   r   r-   u   s  

5 2ÿ


		3


üÿþ
üÿþôþ
-
$
þþ



 þ
û	



	!Vþþ
"H7úþ
	r-   c                
   @   sø   e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zej 	d	d
ddg¡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d0d1„ Zd
S )2ÚTestExcelFileReadTr.   c                 C   s2   t tj|d�}| |dddƒ¡ | td|¡ dS )zH
        Change directory and set engine for ExcelFile objects.
        r/   r0   r1   r2   rG   N)r   r4   rG   r5   r6   r7   r   r   r   r<   ~  s    z#TestExcelFileRead.cd_and_set_enginec              	   C   s^   ddddddœ}t  d| ¡�}|j}W 5 Q R X |d k	r>|}n||dd …  }||ksZt‚d S )Nr   r   r   r   rA   rD   rF   )r4   rG   r   rI   )r8   r   r   rJ   r2   rL   rM   r   r   r   rN   ‡  s    ûz"TestExcelFileRead.test_engine_usedc              	   C   s„  t  d| ¡�}t j|dddgd�}W 5 Q R X 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 5 Q R X 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 5 Q R X 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 5 Q R X ttjgdgtjgtjgdggd	gd
�}t ||¡ d S )NZtest4rQ   FÚapple©rT   Zkeep_default_naZ	na_valuesr  rF   ÚrabbitrŸ   re   TÚtest5ú1.#QNANr¤   )r4   rG   r3   r   r£   r¤   ro   rp   )r8   r   r2   r¡   rM   r   r   r   Útest_excel_passes_na™  s`       ÿ ÿ   ÿ ÿ   ÿ ÿ   ÿ ÿz&TestExcelFileRead.test_excel_passes_naÚ	na_filterNFc              	   C   s¨   i }|d k	r||d< t  d| ¡�"}t j|fdddgdœ|—Ž}W 5 Q R X |dkrld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Å  rQ   TrÂ  rÃ  FrÆ  rF   r¤   rÄ  rŸ   re   )r4   rG   r3   r£   r¤   r   ro   rp   )r8   r   rÈ  r>   r2   r¡   rM   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 5 Q R X tj	||d	d
� tj	||d	d
� t d| ¡�&}|j
ddd�}|j
ddgdd�}W 5 Q R X tj	||d	d
� tj	||d	d
� t d| ¡�}tj|dddd�}W 5 Q R X t 	||jd d… ¡ t d| ¡�}|j
dddd�}W 5 Q R X t 	||jd d… ¡ d S )Nr   r`   ra   rD   r   r�   rF   r¦   Frh   )rU   )rY   rU   r§   r©   )rU   r¨   )rj   rk   r    rl   rm   r4   rG   r3   ro   rp   r@   rª   )r8   r)   r   rq   r2   rr   rs   rw   r   r   r   Útest_excel_table_sheet_by_indexØ  s,    ÿÿ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 5 Q R X t || ¡�}|jd|d�}W 5 Q R X tj	||d	d
� tj	||d	d
� d S r/  )
rj   rk   r    rl   rm   r4   rG   r@   ro   rp   )	r8   r)   r   rq   r0  rT   r2   Z	df1_parseZ	df2_parser   r   r   r1  õ  s    ÿÿz!TestExcelFileRead.test_sheet_namerT   rR   r   r’   rQ   c              
   C   sH   d}t jt|d��, t d| ¡�}|j|d� W 5 Q R X W 5 Q R X d S r6  )r    r[   r\   r4   rG   r@   )r8   r   rT   r^   r2   r   r   r   r7  	  s    z+TestExcelFileRead.test_bad_sheetname_raisesc              
   C   sf   d| }t j|dd|d�}t|dƒ�,}t  |¡�}t j|ddd�}W 5 Q R X W 5 Q R X t ||¡ d S )NrD   rQ   r   ©rT   rU   r   rE   r�   )r4   r3   rH   rG   ro   rp   )r8   r   r   r2  rM   rK   rC   rÅ   r   r   r   r3    s    $z(TestExcelFileRead.test_excel_read_bufferc              
   C   sP   t d| dƒ�.}t |¡�}tj|dd|d� W 5 Q R X W 5 Q R X |jsLt‚d S )NrD   rE   rQ   r   rË  )rH   r4   rG   r3   ÚclosedrI   )r8   r   r   rK   rB   r   r   r   Útest_reader_closes_file  s    &z)TestExcelFileRead.test_reader_closes_filec              
   C   sJ   d}t  d| ¡�.}tjt|d�� t j|dd� W 5 Q R X W 5 Q R X d S )Nz8Engine should not be specified when passing an ExcelFilerD   rO   r4  r/   )r4   rG   r    r[   r\   r3   )r8   r   r^   Zxlr   r   r   Útest_conflicting_excel_engines&  s    z0TestExcelFileRead.test_conflicting_excel_enginesc              	   C   sR   t jd| |d�}td| dƒ�}| ¡ }W 5 Q R X t j||d�}t ||¡ d S )NrD   r/   rE   )r4   r3   rH   rY  ro   rp   )r8   r   r   rM   rK   r1   rÅ   r   r   r   Útest_excel_read_binary.  s
    z(TestExcelFileRead.test_excel_read_binaryc              	   C   sF   t d| dƒ�}t |¡}W 5 Q R X tjd| |d�}t ||¡ d S )NrD   rE   r/   )rH   r4   r3   ro   rp   )r8   r   r   rK   rL   rM   r   r   r   Ú%test_excel_read_binary_via_read_excel8  s    z7TestExcelFileRead.test_excel_read_binary_via_read_excelc              
   C   sF   t ddƒ�2}tjtdd�� tj|ddgd� W 5 Q R X W 5 Q R X d S )Nzdf_header_oob.xlsxrE   zexceeds maximumrO   r   rF   r’  )rH   r    r[   r\   r4   r3   )r8   r   rK   r   r   r   Ú)test_read_excel_header_index_out_of_range?  s    z;TestExcelFileRead.test_read_excel_header_index_out_of_ranger0  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‰  )ru   zB.1ZI11ZI12r…  rF   rR   rç   )r   rf   râ   rQ   r   rz  )r	   r
   r¤  r   r4   r3   ro   rp   )r8   r0  r¦  ÚcolsrM   rL   r   r   r   Útest_header_with_index_colE  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 5 Q R X tj	t 
d¡t 
d	¡fgt 
d¡ ¡ t 
d	¡ ¡ gd
�}tg g |d�}t ||¡ d S )Nr   r`   ra   Ztest_datetime_mir   rF   )r*  rU   r   z
02/29/2020z
03/01/2020r…  r�  )rj   rk   r    rl   rm   r4   rG   r3   r
   r¤  Úto_datetimeZto_pydatetimer   ro   rp   )	r8   r)   r   r   rK   r2   rÅ   Zexpected_column_indexrM   r   r   r   Útest_read_datetime_multiindexP  s"    ÿÿ þþz/TestExcelFileRead.test_read_datetime_multiindexc              
   C   s>   t jtdd��& t d|› d�d¡� W 5 Q R X W 5 Q R X d S )NzValue must be one of *rO   zio.excelz.readerÚabc)r    r[   r\   r4   r  r,  r   r   r   Útest_engine_invalid_optiong  s    z,TestExcelFileRead.test_engine_invalid_optionc              	   C   s^   |dkrt  d¡ |dkr0|j t jjdd�¡ t d| ¡�}|jdgksPt	‚W 5 Q R X d S )Nr   r­  r   r®  ra   r¯  rQ   )
r    r  rj   rk   rl   rm   r4   rG   Zsheet_namesrI   )r8   r)   r   r   r2   r   r   r   Útest_ignore_chartsheetsm  s    
ÿÿz)TestExcelFileRead.test_ignore_chartsheetsc              
   C   s¨   t f}|d kr t d|› �¡ n|dkr<dd l}t |jjf}t d|› �¡�R}t|ƒ 	d¡ t 
d¡�. ztj||d� W n |k
rŽ   Y nX W 5 Q R X W 5 Q R X d S )NzInvalid test for engine=r   r   ZcorruptFr/   )r   r    r  r   Zbiffhr:  ro   r  r   Ú
write_textZassert_produces_warningr4   rG   )r8   r   r   Úerrorsr   Úfiler   r   r   Útest_corrupt_files_closedz  s    z+TestExcelFileRead.test_corrupt_files_closed)r¸  r¹  rº  r    r»  r<   rN   rÇ  rl   r¼  rÉ  rÊ  r1  r7  r3  rÍ  rÎ  rÏ  rÐ  rÑ  rÔ  rÖ  rØ  rÙ  rÝ  r   r   r   r   rÁ  }  s2   

&
þ




rÁ  )-r   r   Ú	functoolsr   rM  Úpathlibr   rP  Úurllib.errorr   Úzipfiler   Únumpyr£   r    Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr½  Zpandasr4   r   r	   r
   r   Zpandas._testingZ_testingro   Zpandas.core.arraysr   r   r$   r!   r¾  Zengine_paramsrÃ   Úboolr   r#   r»  r*   r   r   r-   rÁ  r   r   r   r   Ú<module>   sr   ÿþÿþÿþé
þù	


          