o
    �¨ÊhÞö  ã                
   @  s  d dl mZ d dlmZmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlZd dlZd dlmZ d dlmZ d dlZd dlZd d	lmZ d d
lmZ d dlm  mZ d dlZd dlmZmZm Z m!Z!m"Z" d dl#m$Z% d dl&m'Z'm(Z( eƒ r|ej)j*Z+g d¢Z,ej-de .d¡gd�ej-de .d¡gd�ej-de .d¡gd�ej-de .d¡d�ej-de .d¡d�ej-de .d¡d�gZ/d5dd„Z0dd„ Z1ej2dd„ e/D ƒe3d�d d!„ ƒZ4ej2d"d#„ ƒZ5ej2d$d„ ƒZ6ej2d%d&„ ƒZ7d6d(d)„Z8d7d-d.„Z9d/d0„ Z:G d1d2„ d2ƒZ;G d3d4„ d4ƒZ<dS )8é    )Úannotations)ÚdatetimeÚtime)Úpartial)ÚBytesION)ÚPath)ÚURLError)Ú
BadZipFile)Úusing_pyarrow_string_dtype)Úis_platform_windows)Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚread_csv)ÚArrowStringArrayÚStringArray)ú.xlsú.xlsxú.xlsmú.xlsbú.odsÚxlrd©ÚmarksÚopenpyxlÚpyxlsbÚodfÚcalamineÚpython_calamineÚread_extÚstrÚreturnÚboolc                 C  s†   | j d } | dkr|dkrdS | dkr|dkrdS |dkr#| dvr#dS | dkr-|d	kr-dS |d	kr7| d
vr7dS | dkrA|dkrAdS dS )zm
    Filter out invalid (engine, ext) pairs instead of skipping, as that
    produces 500+ pytest.skips.
    r   r   r   Fr   r   >   r   r   r   r   >   r   r   r   T)Úvalues)Úenginer    © r&   úT/var/www/html/env/lib/python3.10/site-packages/pandas/tests/io/excel/test_readers.pyÚ_is_valid_engine_ext_pairF   s   
r(   c                 C  s    | j |f }tj|| jd�}|S )z�
    engine gives us a pytest.param object with some marks, read_ext is just
    a string.  We need to generate a new pytest.param inheriting the marks.
    r   )r$   ÚpytestÚparamr   )r%   r    r$   Ú	new_paramr&   r&   r'   Ú_transfer_marks[   s   r,   c                 C  s*   g | ]}t D ]}t||ƒrt||ƒ‘qqS r&   )Úread_ext_paramsr(   r,   )Ú.0ÚengÚextr&   r&   r'   Ú
<listcomp>f   s    ýüÿr1   )Ú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_exte   s   r6   c                 C  s   | \}}|S ©Nr&   ©r6   r%   r    r&   r&   r'   r%   u   ó   r%   c                 C  s   | \}}|S r7   r&   r8   r&   r&   r'   r    {   r9   c                 C  s"   | ddddƒ}t |dddd�}|S )	zI
    Obtain the reference data from read_csv with the Python engine.
    ÚioÚdataÚcsvz	test1.csvr   TÚpython)Ú	index_colÚparse_datesr%   )r   )ÚdatapathÚfilepathÚdf_refr&   r&   r'   rB   �   s   rB   ú
str | Nonec                 C  s   dS )NÚnsr&   )r    r%   r&   r&   r'   Úget_exp_unit‹   s   rE   Úexpectedr   ÚNonec                 C  s$   d | j _t||ƒ}| j  |¡| _ d S r7   )ÚindexÚnamerE   Úas_unit)rF   r    r%   Úunitr&   r&   r'   Úadjust_expected�   s   
rL   c                 C  s$   | dkr|  tjjdd�¡ d S d S )Nr   z3Sheets containing datetimes not supported by pyxlsb©Úreason)Úapplymarkerr)   ÚmarkÚxfail)r%   r5   r&   r&   r'   Úxfail_datetimes_with_pyxlsb–   s   ÿÿÿrR   c                   @  sš  e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
ej dg d¢g d¢g d¢g d¢g d¢g d¢g¡dd„ ƒZej dddgddgg¡dd„ ƒZdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zej d(d)d*g¡d+d,„ ƒZd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zej d=d)eg d>¢g d?¢g d>¢d@dAej dBgdCœƒfdDdEe!e!dCœee"g d>¢dDdF�e"g d?¢dEdF�e"g dG¢e#dF�e"dHdIej dJge#dF�dCœƒfg¡dKdL„ ƒZ$dMdN„ Z%dOdP„ Z&ejj'e(ƒ dQdR�dSdT„ ƒZ)ej dUi dVfdWdXidVfg¡dYdZ„ ƒZ*d[d\„ Z+ej d]d^ed_d`giƒfdaedbgdc�fg¡ddde„ ƒZ,dfdg„ Z-dhdi„ Z.djdk„ Z/dldm„ Z0dndo„ Z1dpdq„ Z2ej 3dr¡dsdt„ ƒZ4dudv„ Z5dwdx„ Z6dydz„ Z7ej d{d|d}d|gd|d}gd~dd~gd~dgg¡d€d�„ ƒZ8d‚dƒ„ Z9d„d…„ Z:ejj;ejj<d†d‡„ ƒƒZ=e>j?ejj<dˆd‰„ ƒƒZ@ejj<dŠd‹„ ƒZAejjBdŒd�„ ƒZCdŽd�„ ZDe> Ed�¡d‘d’„ ƒZFd“d”„ ZGd•d–„ ZHd—d˜„ ZIej d™dšej d›dœd›gfd�ej gdž fg¡dŸd „ ƒZJd¡d¢„ ZKd£d¤„ ZLd¥d¦„ ZMd§d¨„ ZNd©dª„ ZOd«d¬„ ZPd­d®„ ZQd¯d°„ ZRej d±d²d³d}dVgd}d)fd²d´d)d}dVgd)fd²dµd}dVgd}dVgd)fd²d¶d}dVgd}d)fd·d¸d)d)d}d*gfd·d¸d)d)d¹dº„ fg¡d»d¼„ ƒZSd½d¾„ ZTd¿dÀ„ ZUdÁdÂ„ ZVdÃdÄ„ ZWdÅdÆ„ ZXdÇdÈ„ ZYdÉdÊ„ ZZdËdÌ„ Z[d)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%   r:   r;   ÚexcelÚ
read_excelN)r   ÚpdrY   ÚchdirÚsetattr©Úselfr%   r@   ÚmonkeypatchÚfuncr&   r&   r'   Úcd_and_set_engine    ó   zTestReaders.cd_and_set_enginec           	      C  sŽ   dd„ }|  tjd|¡ ddddddœ}td	| d
ƒ�}t |¡}W d   ƒ n1 s+w   Y  |d ur7|}n||dd …  }||ksEJ ‚d S )Nc                 _  r4   r7   rW   )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\   rZ   Ú	ExcelFileÚopenrY   )	r^   r    r%   r_   re   Úexpected_defaultsÚfÚresultrF   r&   r&   r'   Útest_engine_used©   s   ûÿzTestReaders.test_engine_usedc              	   C  s¸   ddiddiddiddiddidœ}|dv rt  d¡}n|d	kr&t  d
¡}nt  d¡}|d urZtjt|d�� tjd| dd||dd …  d� W d   ƒ d S 1 sSw   Y  d S d S )NÚfooÚabcdé{   ÚTrueTrg   >   r   r   z8open_workbook() got an unexpected keyword argument 'foo'r   z/load() got an unexpected keyword argument 'foo'z8load_workbook() got an unexpected keyword argument 'foo'©Úmatchrm   ÚSheet1r   ro   )Ú
sheet_namer>   Úengine_kwargs)ÚreÚescaper)   ÚraisesÚ	TypeErrorrZ   rY   )r^   r    r%   rr   Ú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`rz   rm   r|   r   é   ©r}   r>   ÚusecolsÚSheet2ro   ©r}   Úskiprowsr>   r‡   ©r)   r�   Ú
ValueErrorrZ   rY   ©r^   r    rƒ   r&   r&   r'   Útest_usecols_intÛ   s   ÿÿû"ÿzTestReaders.test_usecols_intc                 C  sv   t ||ƒ |ddg }t|||ƒ tjd| ddg d¢d�}tjd| dd	gdg d¢d
�}t ||¡ t ||¡ d S )NÚBÚCrm   r|   r   )r   é   r…   r†   rˆ   ro   r‰   ©rR   rL   rZ   rY   ÚtmÚassert_frame_equal)r^   r5   r%   r    rB   rF   Údf1Údf2r&   r&   r'   Útest_usecols_listí   s   
ÿû	zTestReaders.test_usecols_listc                 C  s  t ||ƒ |g d¢ }t|||ƒ tjd| dddd�}tjd| ddgddd	�}t ||¡ t ||¡ |d
dg }t|||ƒ tjd| dddd�}tjd| ddgddd	�}t ||¡ t ||¡ tjd| dddd�}tjd| ddgddd	�}t ||¡ t ||¡ d S )N©ÚAr�   r�   rm   r|   r   zA:Dr†   rˆ   ro   r‰   r�   r�   zA,C,DzA,C:Dr’   )r^   r5   r%   r    rB   rF   r–   Údf3r&   r&   r'   Útest_usecols_str  sR   
ÿû	ÿûÿûzTestReaders.test_usecols_strr‡   )r   ro   r…   )r   r…   ro   )ro   r   r…   )ro   r…   r   )r…   r   ro   )r…   ro   r   c                 C  sH   t ||ƒ |ddg }t|||ƒ tjd| dd|d�}t ||¡ d S )Nr™   r�   rm   r|   r   r†   r’   )r^   r5   r%   r    r‡   rB   rF   rt   r&   r&   r'   Ú.test_usecols_diff_positional_int_columns_order5  s   
ÿz:TestReaders.test_usecols_diff_positional_int_columns_orderr�   ÚDc                 C  s>   |ddg }t t|ƒƒ|_tjd| d|d�}t ||¡ d S )Nr�   r�   rm   r|   ©r}   r‡   )ÚrangeÚlenrH   rZ   rY   r“   r”   )r^   r    r‡   rB   rF   rt   r&   r&   r'   Ú.test_usecols_diff_positional_str_columns_orderE  s   z:TestReaders.test_usecols_diff_positional_str_columns_orderc                 C  s>   t ||ƒ |}t|||ƒ tjd| ddd�}t ||¡ d S ©Nrm   r|   r   ©r}   r>   r’   ©r^   r5   r%   r    rB   rF   rt   r&   r&   r'   Útest_read_excel_without_slicingM  s
   
z+TestReaders.test_read_excel_without_slicingc                 C  sH   t ||ƒ |ddg }t|||ƒ tjd| dddd�}t ||¡ d S )Nr�   r�   rm   r|   r   zA,D:Er†   r’   r¤   r&   r&   r'   Útest_usecols_excel_range_strV  s   
ÿz(TestReaders.test_usecols_excel_range_strc                 C  sL   d}t jt|d�� tjd| ddd� W d   ƒ d S 1 sw   Y  d S )NzInvalid column name: E1rz   rm   r|   zD:E1rž   r‹   r�   r&   r&   r'   Ú$test_usecols_excel_range_str_invalida  s   "ÿz0TestReaders.test_usecols_excel_range_str_invalidc                 C  sT   d}t jt|d�� tjd| ddgddgd� W d   ƒ d S 1 s#w   Y  d S )Nz(list indices must be integers.*, not strrz   rm   r|   r™   r�   r†   ©r)   r�   r‚   rZ   rY   r�   r&   r&   r'   Útest_index_col_label_errorg  s   ü"ÿz&TestReaders.test_index_col_label_errorc                 C  s<   t jd| ddd�}tg d¢tg dd�d�}t ||¡ d S )Nrm   ÚSheet3r™   r£   )r�   r�   r�   ÚEÚF©rI   ©ÚcolumnsrH   )rZ   rY   r   r   r“   r”   ©r^   r    rt   rF   r&   r&   r'   Útest_index_col_strr  s
   ÿzTestReaders.test_index_col_strc                 C  sR   t jd| dg d¢d�}tg d¢tg gd g gd g d¢d�d�}t ||¡ d S )	Nrm   rª   r˜   r£   )r�   r«   r¬   r…   ©ÚlevelsÚcodesÚnamesr®   )rZ   rY   r   r   r“   r”   r°   r&   r&   r'   Útest_index_col_emptyz  s   ÿþz TestReaders.test_index_col_emptyr>   Nr‘   c                 C  sT   t jd| d|d�}tg d¢g d¢gg d¢d�}|r"| |j| ¡}t ||¡ d S )Nrm   ÚSheet4r£   )Úi1ÚaÚx)Úi2ÚbÚy)z
Unnamed: 0Úcol1Úcol2©r¯   )rZ   rY   r   Ú	set_indexr¯   r“   r”   )r^   r    r>   rt   rF   r&   r&   r'   Útest_index_col_with_unnamed…  s   
ÿÿz'TestReaders.test_index_col_with_unnamedc                 C  sL   d}t jt|d�� tjd| dgd� W d   ƒ d S 1 sw   Y  d S )NzEUsecols do not match columns, columns expected but not found: \['E'\]rz   rm   r«   ©r‡   r‹   r�   r&   r&   r'   Ú%test_usecols_pass_non_existent_column“  s
   ÿ"ÿz1TestReaders.test_usecols_pass_non_existent_columnc                 C  sN   d}t jt|d�� tjd| ddgd� W d   ƒ d S 1 s w   Y  d S )Nz['usecols' must either be list-like of all strings, all unicode, all integers or a callable.rz   rm   ÚE1r   rÃ   r‹   r�   r&   r&   r'   Útest_usecols_wrong_type�  s
   ÿ"ÿz#TestReaders.test_usecols_wrong_typec                 C  s8   t jd| dd�}tddggddgd�}t ||¡ d S )	NÚtest2r|   ©r}   ÚaaaaÚbbbbbÚTestÚTest1rÀ   ©rZ   rY   r   r“   r”   )r^   r    ÚparsedrF   r&   r&   r'   Útest_excel_stop_iterator¦  s   z$TestReaders.test_excel_stop_iteratorc                 C  sd   t ||ƒ |dkr|dkr| tjjdd�¡ tjd| dd�}ttj	ggdgd	�}t
 ||¡ d S )
Nr   r   z+Calamine can't extract error from ods filesrM   Útest3r|   rÈ   rË   rÀ   )rR   rO   r)   rP   rQ   rZ   rY   r   ÚnpÚnanr“   r”   )r^   r5   r%   r    rÎ   rF   r&   r&   r'   Útest_excel_cell_error_na«  s   
ÿz$TestReaders.test_excel_cell_error_nac           	      C  sŽ   t ||ƒ |}t|||ƒ tjd| ddd�}tjd| ddgdd�}t ||¡ t ||¡ tjd| dddd�}t ||jd d	… ¡ d S )
Nrm   r|   r   r£   rˆ   ro   ©r}   rŠ   r>   ©r}   r>   Ú
skipfooteréÿÿÿÿ)rR   rL   rZ   rY   r“   r”   Úiloc)	r^   r5   r%   r    rB   rF   r•   r–   rš   r&   r&   r'   Útest_excel_table¸  s   
ÿÿzTestReaders.test_excel_tablec                 C  sV  t ||ƒ t||ƒ}t g d¢g d¢g d¢g d¢g d¢ttdddƒtddd	ƒtd
ddƒtdddƒtdddƒgd|› d�d�dœ¡}d}tj|| dd�}t 	||¡ | 
¡ }d|j|jd df< tj|| dd�}t 	||¡ t|jƒD ]\}	}
tj|| d|	d�}| |
¡}t 	||¡ qt|d  t¡|d< tj|| ddtid�}t 	||¡ d S )N)ro   r‘   éýÿÿÿé   r   )g      ô?g      @gHáz®Gý?g¸…ëQ¸þ?g•Ö&è.>)TFTTF)ro   r‘   r…   rÛ   é   )r¹   r…   ÚcÚdÚeiÝ  é
   é   é   iq  ro   é   é   iß  r…   úM8[ú]©Údtype)ÚIntColÚFloatColÚBoolColÚStrColÚStr2ColÚDateColÚ
test_typesr|   rÈ   g      @rí   r£   rì   ©r}   Ú
converters)rR   rE   r   Ú	from_dictr   r   rZ   rY   r“   r”   ÚcopyÚlocrH   Ú	enumerater¯   rÁ   Úapplyr!   )r^   r5   r%   r    rK   rF   ÚbasenameÚactualÚfloat_expectedÚicolrI   Úexpr&   r&   r'   Útest_reader_special_dtypesË  sJ   






û
øúÿ
ÿ
ÿz&TestReaders.test_reader_special_dtypesc              
   C  sz   d}t  g d¢dtjdddgg d¢dtjd	d
dgdœ¡}dd„ dd„ dd„ dd„ dœ}tj|| d|d�}t ||¡ d S )NÚtest_converters)ro   r‘   rÚ   éüÿÿr   g      )@gÍÌÌÌÌL2@g3333333@g:Œ0âŽy5>)ÚFoundrÿ   rÿ   ú	Not foundrÿ   Ú1Ú3Ú4Ú5)ré   rê   rë   rì   c                 S  s   | dkrt | ƒS dS )NÚ rþ   )Úint©rº   r&   r&   r'   Ú<lambda>
  s    z4TestReaders.test_reader_converters.<locals>.<lambda>c                 S  s   | rd|  S t jS )Nrà   )rÑ   rÒ   r  r&   r&   r'   r    s    c                 S  s   | dkrdS dS )Nr  rÿ   r   r&   r  r&   r&   r'   r    ó    c                 S  s   | rt | ƒS dS )Nr  )r!   r  r&   r&   r'   r    r	  )ré   rê   r‘   r…   r|   rð   )r   rò   rÑ   rÒ   rZ   rY   r“   r”   )r^   r    r÷   rF   rñ   rø   r&   r&   r'   Útest_reader_convertersý  s"   üÿ
ü	
ÿz"TestReaders.test_reader_convertersc                 C  sò   d}t  || ¡}tg d¢g d¢g d¢ddtjdgdœƒ}t ||¡ t j|| dd	td
œd�}|d  d¡|d< |d  d	¡|d< t	g d¢t
d�|d< t ||¡ d}tjt|d�� t j|| ddid� W d   ƒ d S 1 srw   Y  d S )NÚ	testdtype©ro   r‘   r…   rÛ   ©ç      @ç      @ç      @ç      @ç      ð?ç       @ç      @©r¹   r¼   rÝ   rÞ   Úfloat64Úfloat32)r¹   r¼   rÝ   rç   r¹   r¼   ©Ú001Ú002Ú003Ú004rÝ   z(Unable to convert column d to type int64rz   rÞ   Úint64)rZ   rY   r   rÑ   rÒ   r“   r”   r!   Úastyper   Úobjectr)   r�   rŒ   )r^   r    r÷   rø   rF   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  Ú2r  c                 C  s&   d}t j|| |d�}t ||¡ d S )Nr  rç   ©rZ   rY   r“   r”   )r^   r    rè   rF   r÷   rø   r&   r&   r'   Útest_reader_dtype_str4  s   z!TestReaders.test_reader_dtype_strc                   s´  |dv rt  d|› d�¡ ttddgdd�tdd	gd
d�tddgdd�tddgdd�ttjdgdd�ttjdgd
d�ttjdgdd�ttjdgdd�tt d¡gd ƒttjtjgdd�dœ
ƒ‰t |¡�}ˆj	|ddd� tj
|d|d�}W d   ƒ n1 s€w   Y  |dkr¾dd l‰ddlm‰  t‡ ‡‡fdd„ˆjD ƒƒ}ˆ |d jj ˆjdd �¡ƒ|d< ˆ ˆ d d g¡ƒ|d!< nˆ}t||ƒ}|d  d"|› d#�¡|d< t ||¡ d S )$N©r   r   úNo engine for filetype: 'ú'ro   r…   ÚInt64rç   r  r  ÚFloat64TFÚbooleanr¹   r¼   Ústringé   g      @z
2019-12-31r‘   )
r¹   r¼   rÝ   rÞ   rß   rs   ÚgÚhÚiÚjÚtest©r}   rH   ©r}   Údtype_backendÚpyarrowr   )ÚArrowExtensionArrayc                   s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Úfrom_pandas)Úarray)r.   Úcol©r5  ÚdfÚpar&   r'   Ú
<dictcomp>t  s    ÿÿz2TestReaders.test_dtype_backend.<locals>.<dictcomp>r.  Úus)rK   r/  rå   ræ   )r)   Úskipr   r   rZ   ÚNAÚ	Timestampr“   Úensure_cleanÚto_excelrY   r4  Úpandas.arraysr5  r¯   r7  Ú	_pa_arrayÚcastÚ	timestamprE   r  r”   )r^   r    r3  r%   Ú	file_pathrt   rF   rK   r&   r9  r'   Útest_dtype_backendV  sJ   öÿÿþþÿÿ
zTestReaders.test_dtype_backendc                 C  s�   |dv rt  d|› d�¡ ttjdgdtjgdœƒ}t |¡�}|j|ddd	� tj	|dd
dd�}W d   ƒ n1 s;w   Y  t 
||¡ d S )Nr$  r%  r&  r  r  ©r¹   r¼   r0  Fr1  Únumpy_nullabler  )r}   r3  rè   )r)   r>  r   rÑ   rÒ   r“   rA  rB  rZ   rY   r”   )r^   r    r:  rG  rt   r&   r&   r'   Útest_dtype_backend_and_dtype†  s   üþz(TestReaders.test_dtype_backend_and_dtypezinfer_string takes precedencerM   c              	   C  sH  |dv rt  d|› d�¡ t  d¡}t d|¡�‚ ttjddgtjd�tjd	tj	gtjd�d
œƒ}t
 |¡�}|j|ddd� tj|ddd�}W d   ƒ n1 sQw   Y  |dkrwtttjddgtjd�ƒttjd	tj	gtjd�ƒd
œƒ}ntt| ddg¡ƒt| d	d g¡ƒd
œƒ}t
 ||¡ W d   ƒ d S 1 s�w   Y  d S )Nr$  r%  r&  r4  zmode.string_storager¹   r¼   rç   rº   rI  r0  Fr1  rJ  r2  r=   )r)   r>  ÚimportorskiprZ   Úoption_contextr   rÑ   r7  Úobject_r?  r“   rA  rB  rY   r   r   r”   )r^   r    Ústring_storager;  r:  rG  rt   rF   r&   r&   r'   Útest_dtype_backend_string–  s8   
þÿÿþþÿþÿ"åz%TestReaders.test_dtype_backend_stringzdtypes, exp_valuero   úa.1r  c           	      C  st   d}dt i|¥}| ¡ }tj|| |d�}ttdgt d�t|g|s#t nd d�dœƒ}||ks2J dƒ‚t ||¡ d S )NÚdf_mangle_dup_col_dtypesr¹   rç   ro   )r¹   rQ  zdtype dict changed)r  ró   rZ   rY   r   r   r“   r”   )	r^   r    ÚdtypesÚ	exp_valuer÷   Ú
dtype_dictÚdtype_dict_copyrt   rF   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 )NÚtest_spacesÚtestcol)zthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  timesrÍ   )r^   r    r÷   rø   rF   r&   r&   r'   Útest_reader_spacesÎ  s   ÿÿzTestReaders.test_reader_spaceszbasename,expectedzgh-35802ÚCOLUMNzTest (1)zgh-36122z
got 2nd sarÀ   c                 C  s6   |dkrt  d|› �¡ t || ¡}t ||¡ d S )Nr   zSkipped for engine: )r)   r>  rZ   rY   r“   r”   )r^   r%   r    r÷   rF   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)rZ   rY   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]  )r‘   r^  r^  rÈ   )rZ   rY   rc  Úsetr“   ra  rb  r    )r^   r    r÷   rf  re  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|   rˆ   rª   )rZ   rY   r“   ra  rb  rd  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È   )rZ   rY   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 )NÚcol_1Úcol_2rÀ   rj  r|   rÈ   )r   rZ   rY   r“   r”   )r^   r    rF   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\)$rz   rj  ro   )Úheaderr}   rm   c                 S  s   dd S )Nro   r   r&   r  r&   r&   r'   r  #  ó    zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)r‡   r}   )r)   r�   rŒ   rZ   rY   Ú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–   t ||ƒ tt d¡dgt d¡dgddggddgd	�}|d
kr*| tjjdd�¡ |d u r<|dv r<| tjjdd�¡ t d| ¡}t	 
||¡ d S )Nz
2016-03-12zMarc Johnsonz
2016-03-16z
Jack Blackg@Œµx¯DzTimothy BrownÚDateColWithBigIntÚ	StringColrÀ   r   zMaybe not supported by openpyxlrM   )r   r   z)Defaults to openpyxl, maybe not supportedÚtestdateoverflow)rR   r   rZ   r@  rO   r)   rP   rQ   rY   r“   r”   )r^   r5   r%   r    rF   rt   r&   r&   r'   Útest_date_conversion_overflow%  s$   
ýú	ÿÿz)TestReaders.test_date_conversion_overflowc           
      C  sf   t ||ƒ d}d}|}t|||ƒ tj|| |dd�}tj|| d|d�}	t ||¡ t |	|¡ d S ©Nrm   r|   r   r£   )r>   r}   r’   )
r^   r5   r    r%   rB   Úfilenamer}   rF   r•   r–   r&   r&   r'   Útest_sheet_nameA  s   

ÿzTestReaders.test_sheet_namec                 C  sd   d| }t j|ddd�}t|dƒ�}t j|ddd�}t ||¡ W d   ƒ d S 1 s+w   Y  d S )Nrm   r|   r   r£   rn   )rZ   rY   rq   r“   r”   )r^   r    ÚpthrF   rs   rø   r&   r&   r'   Útest_excel_read_bufferR  s   "þz"TestReaders.test_excel_read_bufferc                 C  sF   d}t jtdd�� tjd|d� W d   ƒ d S 1 sw   Y  d S )Nrv   zUnknown engine: foorz   r  rW   r‹   )r^   Ú
bad_enginer&   r&   r'   Útest_bad_engine_raisesY  s   "ÿz"TestReaders.test_bad_engine_raisesr}   r…   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 foundrz   rl  rÈ   r‹   )r^   r    r}   rƒ   r&   r&   r'   Útest_bad_sheetname_raises^  s   "ÿz%TestReaders.test_bad_sheetname_raisesc                 C  sV   d|› �}d  g d¢¡}tjt|d�� t |¡ W d   ƒ d S 1 s$w   Y  d S )Nrv   ú|)z(No such file or directoryu   æ²¡æœ‰é‚£ä¸ªæ–‡ä»¶æˆ–ç›®å½•zFile o directory non esistente)rz   )Újoinr)   r�   ÚFileNotFoundErrorrZ   rY   )r^   r    Úbad_filer{   r&   r&   r'   Útest_missing_file_raisesh  s   
ÿ"ÿz$TestReaders.test_missing_file_raisesc                 C  sœ   d}|d u rt }d}n"|dkrddlm} |}d}n|dkr)ddlm} |}d	}nt}d
}tj||d�� t 	t
|ƒ¡ W d   ƒ d S 1 sGw   Y  d S )Ns   foozLExcel file format cannot be determined, you must specify an engine manually.r   r   )Ú	XLRDErrorzFUnsupported format, or corrupt file: Expected BOF record; found b'foo'r   ©ÚCalamineErrorzCannot detect file formatzFile is not a zip filerz   )rŒ   r   rˆ  r   rŠ  r	   r)   r�   rZ   rY   r   )r^   r%   Ú
bad_streamÚerrorrƒ   rˆ  rŠ  r&   r&   r'   Útest_corrupt_bytes_raisesu  s&   ÿÿ"ÿz%TestReaders.test_corrupt_bytes_raisesc                 C  sh   t d| dƒ�}|j| ¡ d� W d   ƒ n1 sw   Y  t |j¡}t d| ¡}t ||¡ d S )Nrm   rn   )Úcontent)rq   Úserve_contentÚreadrZ   rY   Úurlr“   r”   )r^   Ú
httpserverr    rs   Ú	url_tableÚlocal_tabler&   r&   r'   Útest_read_from_http_url�  s   ÿz#TestReaders.test_read_from_http_urlc                 C  s~   t d| dƒ�}|jd| |d� W d   ƒ n1 sw   Y  d|j› d�| }tj||d�}t d| ¡}t ||¡ d S )Nrm   rn   ©ÚKeyÚBodyús3://ú/test1)Ústorage_options)rq   Ú
put_objectrI   rZ   rY   r“   r”   )r^   r    Ús3_public_bucketÚs3sors   r‘  r“  r”  r&   r&   r'   Útest_read_from_s3_url™  s   ÿz!TestReaders.test_read_from_s3_urlc           	      C  s¸   t d| dƒ�}|jd| |d� W d   ƒ n1 sw   Y  dd l}|jdi |¤Ž}|  d|j› d�| ¡�}t |¡}W d   ƒ n1 sHw   Y  t d| ¡}t ||¡ d S )Nrm   rn   r–  r   r™  rš  r&   )	rq   rœ  Ús3fsÚS3FileSystemrI   rZ   rY   r“   r”   )	r^   r    r�  rž  rs   r   Ús3r“  r”  r&   r&   r'   Útest_read_from_s3_object¦  s   ÿÿz$TestReaders.test_read_from_s3_objectc                 C  s|   t j |dddƒd| ¡}t |¡}z	t d| ¡}W n ty5   d t ¡ ¡ ¡ }t	 
d|› �¡ Y nw t ||¡ d S )Nr:   r;   rX   rm   zfile://localhost/ú zfailing on )ÚosÚpathr„  rZ   rY   r   ÚplatformÚunameÚstripr)   r>  r“   r”   )r^   r    r@   Ú
localtabler”  r“  Úplatform_infor&   r&   r'   Útest_read_from_file_url·  s   
ýz#TestReaders.test_read_from_file_urlc                 C  sD   d| }t j|ddd�}td| ƒ}t j|ddd�}t ||¡ d S r¢   )rZ   rY   r   r“   r”   )r^   r    Ústr_pathrF   Ú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   r|   r£   )	Úpy.pathr°  r¥  r¦  r„  rZ   rY   r“   r”   )r^   r    Ú	LocalPathr­  rF   r®  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 )Nrm   rn   r|   r   r£   )r¥  r¦  r„  rq   rZ   rY   r�  )r^   r    r­  rs   rº   r&   r&   r'   Útest_close_from_py_localpathÝ  s   
"üz(TestReaders.test_close_from_py_localpathc                 C  sü   t ||ƒ |dkr|dkr| tjjdd�¡ t dtdddƒtdd	d
dƒtddddƒtddddƒtddddƒtddddƒtddddƒtddd d!ƒtd d"dd#ƒtd$d%d&d'ƒtd(d)d*ƒgi¡}tj	d+| d,d-�}t
 ||¡ tj	d.| d,d-�}t
 ||¡ d S )/Nr   r   z0ODS file contains bad datetime (seconds as text)rM   ÚTimero   r‘   r…   é-   é8   i † rÛ   é   é1   i@ r+  é   é*   ià“ é   é9   é#   i€ é	   é)   é   i ¡ é   é   é   iÀ'	 rä   i`®
 é5   i 5 é   é%   r   i » é   é   é6   Ú
times_1900r|   rÈ   Ú
times_1904)rR   rO   r)   rP   rQ   r   rò   r   rZ   rY   r“   r”   )r^   r5   r%   r    rF   rø   r&   r&   r'   Útest_reader_secondsæ  s6   
ÿÿ

õÿÿzTestReaders.test_reader_secondsc           	   	   C  sJ  t ||ƒ t||ƒ}t ddgddgg¡}d| }tddt d¡d	gd
dt d¡dgddt d¡dgddt d¡d	gg|d�}||d
   d|› d�¡||d
 < tj|dddgdd�}t	 
||¡ ||_g d¢|_tj|dddgd�}t	 
||¡ ||_tj|dddgddgd�}t	 
||¡ g d¢|_| dd g¡|_tj|d!ddgd�}t	 
||¡ ttdƒƒ|_| d"d#g¡|_tj|d$ddgdd�}t	 
||¡ |jdd
gdd%� d"d#g¡|_tj|d&dddgd�}t	 
||¡ | d"d#g¡|_| dd g¡|_tj|d'ddgddgd�}t	 
||¡ tj|d(ddgddgd
d)�}t	 
||¡ d S )*Nrv   Úbarr¹   r¼   Útestmultiindexro   r  ú
2015-01-01Tr‘   r  ú
2015-01-02Fr…   r  ú
2015-01-03rÛ   r  ú
2015-01-04rÀ   rå   ræ   Ú	mi_columnr   )r}   rq  r>   r  Úmi_indexr£   Úboth©r}   r>   rq  Úilvl1Úilvl2Úmi_index_nameÚc1Úc2Úmi_column_name)ÚlevelÚname_with_intÚ	both_nameÚboth_name_skiprows)r}   r>   rq  rŠ   )rR   rE   r   Úfrom_productr   rZ   r@  r  rY   r“   r”   rH   r¯   Ú	set_namesrc  rŸ   Ú
set_levels)	r^   r5   r%   r    rK   ÚmiÚmi_filerF   rø   r&   r&   r'   Útest_read_excel_multiindex
  sn   

üù"	ÿ
ÿ
ÿÿÿûz&TestReaders.test_read_excel_multiindexzsheet_name,idx_lvl2Úboth_name_blank_after_mi_namer¼   r¹   Úboth_name_multiple_blanksrÛ   c              	   C  sê   t ||ƒ d| }tjddgddggddgd�}t||ƒ}td	d
t d¡dgddt d¡dgddt d¡dgddt d¡dgg|tjg d¢|fddgd�d�}	|	|d   d|› d�¡|	|d < tj	||dd	gdd	gd�}
t
 |
|	¡ d S )NrÏ  rv   rÎ  r¹   r¼   rÛ  rÜ  ©rµ   ro   r  rÐ  Tr‘   r  rÑ  Fr…   r  rÒ  rÛ   r  rÓ  )rv   rv   rÎ  rÎ  rØ  rÙ  r®   rå   ræ   r   r×  )rR   r   râ  rE   r   rZ   r@  Úfrom_arraysr  rY   r“   r”   )r^   r5   r%   r    r}   Úidx_lvl2ræ  rå  rK   rF   rt   r&   r&   r'   Ú+test_read_excel_multiindex_blank_after_name^  s0   

ü
þø"üz7TestReaders.test_read_excel_multiindex_blank_after_namec                 C  sP   d| }t j|dddgd�}t ddg¡}tg d¢gd	 |d
�}t ||¡ d S )NrÏ  Úindex_col_noner   ro   ©r}   rq  ©r™   r�   ©ÚkeyÚvalr  r‘   rÀ   )rZ   rY   r   râ  r   r“   r”   )r^   r    ræ  rt   Úexp_columnsrF   r&   r&   r'   Ú&test_read_excel_multiindex_header_only†  s
   z2TestReaders.test_read_excel_multiindex_header_onlyc           	      C  sš  d| }t jt jt jt jt jt jgg d¢g d¢g d¢g d¢g d¢gtd�}g d¢}tg d	¢g d
¢gg d¢g d¢gd d gd�}tg d	¢d d�}t|||d�}tj|ddd�}t	 
||¡ ||_tj|dddgd�}t	 
||¡ t  g d¢g d¢g d¢g d¢g d¢g¡}g d¢}tg d¢g d¢gg d¢g d¢gd d gd�}tg d¢d d�}t|||d�}tj|ddd�}t	 
||¡ ||_tj|dddgd�}t	 
||¡ d S )NÚtest_index_name_pre17)ÚR0C0ÚR0C1ÚR0C2ÚR0C3ÚR0C4)ÚR1C0ÚR1C1ÚR1C2ÚR1C3ÚR1C4)ÚR2C0ÚR2C1ÚR2C2ÚR2C3ÚR2C4)ÚR3C0ÚR3C1ÚR3C2ÚR3C3ÚR3C4)ÚR4C0ÚR4C1ÚR4C2ÚR4C3ÚR4C4rç   )Ú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   r‘   r…   rÛ   rÜ   r²   r­   ©rH   r¯   Úsingle_namesr   r£   Úmulti_namesro   )r  r  r  r  r  )r  r  r  r  r   )r   ro   r‘   r…   rÛ   Úsingle_no_namesÚmulti_no_names)rÑ   r7  rÒ   r  r   r   r   rZ   rY   r“   r”   rH   )	r^   r    r{  r;   r¯   rå  ÚsirF   rø   r&   r&   r'   Útest_excel_old_index_format‘  sf   ú÷þúÿûÿ	þúz'TestReaders.test_excel_old_index_formatc              	   C  sR   d}dD ]"}t jt|d�� tjd| |d� W d   ƒ n1 s!w   Y  qd S )Nz#Passing a bool to header is invalid)TFrz   rm   ©rq  r¨   )r^   r    rƒ   Úargr&   r&   r'   Útest_read_excel_bool_header_argÚ  s   ÿ€ÿz+TestReaders.test_read_excel_bool_header_argc              	   C  st  t ||ƒ t||ƒ}tjd| dddgd�}tddt d¡d	gdd
t d¡dgddt d¡dgddt d¡d	ggg d¢d�}|d  d|› d�¡|d< t ||¡ tjd| dt	 
ddg¡d�}t ||¡ tjd| ddd„ d�}t ||¡ tjd| ddg d¢d�}tdd
t d¡dgddt d¡dgddt d¡d	ggg d¢d�}|d  d|› d�¡|d< t ||¡ d S )NÚtestskiprowsÚskiprows_listr   r‘   ©r}   rŠ   ro   r  rÐ  Tr  rÑ  Fr…   r  rÒ  rÛ   r  rÓ  r  rÀ   rÝ   rå   ræ   c                 S  ó   | dv S ©N)r   r‘   r&   r  r&   r&   r'   r    rr  z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)r}   rŠ   rµ   )rR   rE   rZ   rY   r   r@  r  r“   r”   rÑ   r7  ©r^   r5   r%   r    rK   rø   rF   r&   r&   r'   Útest_read_excel_skiprowsá  sT   

ÿüù	ýýüüù	z$TestReaders.test_read_excel_skiprowsc                 C  s†   t ||ƒ t||ƒ}tjd| ddd„ d�}tddt d¡d	gd
dt d¡dggg d¢d�}|d  d|› d�¡|d< t ||¡ d S )Nr+  r,  c                 S  s   | dvS )N)ro   r…   rÜ   r&   r  r&   r&   r'   r    rr  zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r-  ro   r  rÐ  Tr…   r  rÒ  Fr  rÀ   rÝ   rå   ræ   )	rR   rE   rZ   rY   r   r@  r  r“   r”   r0  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ø   rF   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à   r3  )rZ   rY   r    r“   r”   )r^   r    rF   Únum_records_in_filer5  rø   r&   r&   r'   Ú0test_read_excel_nrows_greater_than_nrows_in_file5  s
   z<TestReaders.test_read_excel_nrows_greater_than_nrows_in_filec                 C  sJ   d}t jt|d�� tjd| dd� W d   ƒ d S 1 sw   Y  d S )Nz'nrows' must be an integer >=0rz   rm   r  r3  r‹   r�   r&   r&   r'   Ú+test_read_excel_nrows_non_integer_parameter=  s   "ÿz7TestReaders.test_read_excel_nrows_non_integer_parameterz-filename,sheet_name,header,index_col,skiprowsrÏ  rÔ  rÕ  rÖ  rÝ  r+  r,  c                 C  r.  r/  r&   r  r&   r&   r'   r  K  rr  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}   rq  r>   rŠ   Nr…   )r}   rq  r>   rŠ   r4  )rZ   rY   rØ   r“   r”   )	r^   r    r{  r}   rq  r>   rŠ   rF   rø   r&   r&   r'   Útest_read_excel_nrows_paramsC  s$   ûúúz(TestReaders.test_read_excel_nrows_paramsc                 C  sF   t jtdd�� t d| dd¡ W d   ƒ d S 1 sw   Y  d S )Nzbut 3 positional argumentsrz   rm   r|   r   r¨   rt  r&   r&   r'   Útest_deprecated_kwargsg  s   "ÿz"TestReaders.test_deprecated_kwargsc                 C  sV   d| }g d¢}t jg d¢dd�}t||dd�}tj|dd	d
gd d�}t ||¡ d S )NrÏ  ))r�   r�   rñ  ©r…   rÛ   r<  ))r™   r™   rñ  ©ro   r‘   r=  )r   ro   rê  )r‘   r…   r!  rî  r   ro   r×  )r   Úfrom_tuplesr   rZ   rY   r“   r”   )r^   r    Ú	file_namer;   ÚidxrF   rt   r&   r&   r'   Ú"test_no_header_with_list_index_colk  s   ÿÿz.TestReaders.test_no_header_with_list_index_colc                 C  s>   d| }dt jddg}t|dgd�}t |¡}t ||¡ d S )NÚone_col_blank_lineg      à?ro   r‘   ÚnumbersrÀ   )rÑ   rÒ   r   rZ   rY   r“   r”   )r^   r    r?  r;   rF   rt   r&   r&   r'   Útest_one_col_noskip_blank_linex  s
   
z*TestReaders.test_one_col_noskip_blank_linec                 C  sj   d| }t  ddg¡}tjtjgtjtjgddgddgg}t||d�}tj|d	d
dgd�}t ||¡ d S )NrÏ  )r¹   r™   )r¼   r�   ro   r…   r‘   rÛ   rÀ   Úmi_column_empty_rowsr   rï  )	r   r>  rÑ   rÒ   r   rZ   rY   r“   r”   )r^   r    r?  r¯   r;   rF   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)r…   r…   N)rZ   rY   Úshape)r^   r    r?  rt   r&   r&   r'   Útest_trailing_blanks‹  s   
z TestReaders.test_trailing_blanksc                 C  ót   |dkr	t  d¡ |dkr| t jjdd�¡ t jtdd�� tjd| d	d
� W d   ƒ d S 1 s3w   Y  d S )Nr   ú*chartsheets do not exist in the ODF formatr   ú4pyxlsb can't distinguish chartsheets from worksheetsrM   z"Worksheet named 'Chart1' not foundrz   Ú
chartsheetÚChart1rÈ   ©	r)   r>  rO   rP   rQ   r�   rŒ   rZ   rY   ©r^   r5   r%   r    r&   r&   r'   Útest_ignore_chartsheets_by_str”  s   
ÿÿ"ÿz*TestReaders.test_ignore_chartsheets_by_strc                 C  rJ  )Nr   rK  r   rL  rM   z0Worksheet index 1 is invalid, 1 worksheets foundrz   rM  ro   rÈ   rO  rP  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   )ÚdecimalrŠ   )ro   gAñcÌ�Ä—@gÕ	h¢ïÖAÚABCÚpoig2Ø[j‡ô@)r‘   gHáz®G^@g{®GáÍ@ÚDEFÚuytg¥Uq&Ø?)r…   g%�•Cq‹@gçû©ñÖ^ú@ÚGHIÚrezgÈ)¬ç³â@)ÚIdÚNumber1ÚNumber2ÚText1ÚText2ÚNumber3rÀ   rÍ   r°   r&   r&   r'   Útest_euro_decimal_format°  s   ýúz$TestReaders.test_euro_decimal_format)\Ú__name__Ú
__module__Ú__qualname__r)   Úfixturera   ru   r„   rŽ   r—   r›   rP   Úparametrizerœ   r¡   r¥   r¦   r§   r©   r±   r¶   rÂ   rÄ   rÆ   rÏ   rÓ   rÙ   rü   r
  r   r   rÑ   rÒ   r!   r   r  r#  rH  rK  rQ   r
   rP  rW  rZ  r\  rg  ri  rk  rm  rp  ru  Úfilterwarningsry  r|  r~  r€  r‚  r‡  r�  ÚnetworkÚ
single_cpur•  ÚtdÚskip_if_not_us_localerŸ  r£  Úslowr¬  r¯  Ú
skip_if_nor³  r´  rÍ  rç  rí  rõ  r'  r*  r1  r2  r6  r8  r9  r:  r;  rA  rD  rF  rI  rQ  rR  rb  r&   r&   r&   r'   rS   Ÿ   s   

3(ÿ

	

	2üÿþüÿþôþ
0ÿ
$
þþ



þ




	$Tþþ
!I6úþ
	rS   c                
   @  sþ   e Zd Zdd„ Zejdd�dd„ ƒZdd„ Zd	d
„ Zej	 
dg d¢¡dd„ ƒZdd„ Zdd„ Zej	 
ddddgddgdddgddgg¡dd„ ƒZdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zej	 
d&d'd(g¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3S )4ÚTestExcelFileReadc              	   C  sŠ   d}t jt|dd��1 td| dƒ�}tj| ¡ |d� W d   ƒ n1 s&w   Y  W d   ƒ d S W d   ƒ d S 1 s>w   Y  d S )Nz�Passing bytes to 'read_excel' is deprecated and will be removed in a future version. To read from a byte string, wrap it in a `BytesIO` object.F)r{   Úraise_on_extra_warningsrm   rn   rW   )r“   Úassert_produces_warningÚFutureWarningrq   rZ   rY   r�  )r^   r%   r    rƒ   rs   r&   r&   r'   Útest_deprecate_bytes_input¿  s   ÿÿÿý"ýz,TestExcelFileRead.test_deprecate_bytes_inputTrT   c                 C  rV   )zH
        Change directory and set engine for ExcelFile objects.
        rW   r:   r;   rX   rp   N)r   rZ   rp   r[   r\   r]   r&   r&   r'   ra   Í  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   )rZ   rp   r%   )r^   r    r%   rr   rX   rt   rF   r&   r&   r'   ru   Ö  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 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 sÉw   Y  ttjgdgtjgtjgdggd	gd
�}t ||¡ d S )NÚtest4r|   FÚapple©r}   Úkeep_default_naÚ	na_valuesr?  ro   ÚrabbitrË   rÀ   TÚtest5ú1.#QNANrÒ   )rZ   rp   rY   r   rÑ   rÒ   r“   r”   )r^   r    rX   rÎ   rF   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}  rz  r|   Tru  rv  Fr{  ro   rÒ   ry  rË   rÀ   )rZ   rp   rY   rÑ   rÒ   r   r“   r”   )r^   r    r}  rd   rX   rÎ   rF   r&   r&   r'   Útest_excel_passes_na_filter  s&   ÿüûÿ	z-TestExcelFileRead.test_excel_passes_na_filterc           
      C  s˜  t ||ƒ |}t|||ƒ t d| ¡�}tj|ddd�}tj|ddgdd�}W d   ƒ n1 s1w   Y  t ||¡ t ||¡ t d| ¡�}|jddd�}|jddgdd�}W d   ƒ n1 sdw   Y  t ||¡ t ||¡ t d| ¡�}tj|dddd�}	W d   ƒ n1 s�w   Y  t |	|jd d	… ¡ t d| ¡�}|jdddd
�}	W d   ƒ n1 sºw   Y  t |	|jd d	… ¡ d S )Nrm   r   r£   ro   rÔ   )r>   )rŠ   r>   rÕ   r×   )r>   rÖ   )	rR   rL   rZ   rp   rY   r“   r”   rf   rØ   )
r^   r5   r%   r    rB   rF   rX   r•   r–   rš   r&   r&   r'   Útest_excel_table_sheet_by_index'  s.   
þþÿÿz1TestExcelFileRead.test_excel_table_sheet_by_indexc                 C  s¶   t ||ƒ |}t|||ƒ d}d}t || ¡�}|j|dd�}	W d   ƒ n1 s*w   Y  t || ¡�}|jd|d�}
W d   ƒ n1 sHw   Y  t |	|¡ t |
|¡ d S rz  )rR   rL   rZ   rp   rf   r“   r”   )r^   r5   r%   r    rB   rF   r{  r}   rX   Ú	df1_parseÚ	df2_parser&   r&   r'   r|  B  s   
ÿÿz!TestExcelFileRead.test_sheet_namer}   r…   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 r�  )r)   r�   rŒ   rZ   rp   rf   )r^   r    r}   rƒ   rX   r&   r&   r'   r‚  T  s   ÿÿ"ÿz+TestExcelFileRead.test_bad_sheetname_raisesc              	   C  sŽ   d| }t j|dd|d�}t|dƒ�%}t  |¡�}t j|ddd�}W d   ƒ n1 s+w   Y  W d   ƒ n1 s:w   Y  t ||¡ d S )Nrm   r|   r   ©r}   r>   r%   rn   r£   )rZ   rY   rq   rp   r“   r”   )r^   r%   r    r}  rF   rs   rk   rø   r&   r&   r'   r~  _  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   r|   r   r‚  )rq   rZ   rp   rY   Úclosed)r^   r%   r    rs   rh   r&   r&   r'   Útest_reader_closes_filei  s   þ€ÿz)TestExcelFileRead.test_reader_closes_filec              	   C  s„   d}t  d| ¡�/}tjt|d�� t j|dd� W d   ƒ n1 s#w   Y  W d   ƒ d S W d   ƒ d S 1 s;w   Y  d S )Nz8Engine should not be specified when passing an ExcelFilerm   rz   rv   rW   )rZ   rp   r)   r�   rŒ   rY   )r^   r    rƒ   Úxlr&   r&   r'   Útest_conflicting_excel_enginesq  s   ÿÿ"ÿz0TestExcelFileRead.test_conflicting_excel_enginesc                 C  sj   t jd| |d�}td| dƒ�}| ¡ }W d   ƒ n1 sw   Y  t jt|ƒ|d�}t ||¡ d S )Nrm   rW   rn   )rZ   rY   rq   r�  r   r“   r”   )r^   r%   r    rF   rs   r;   rø   r&   r&   r'   Útest_excel_read_binaryy  s   
ÿz(TestExcelFileRead.test_excel_read_binaryc                 C  s^   t d| dƒ�}tj||d�}W d   ƒ n1 sw   Y  tjd| |d�}t ||¡ d S )Nrm   rn   rW   )rq   rZ   rY   r“   r”   )r^   r    r%   rs   rt   rF   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 maximumrz   r   ro   r(  )rq   r)   r�   rŒ   rZ   rY   )r^   r%   rs   r&   r&   r'   Ú)test_read_excel_header_index_out_of_rangeŠ  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ÚZÚI2r­   rð  )r™   zB.1ÚI11ÚI12rê  ro   r…   r  )rH   r¯   rè   r|   r   r×  )r   r   r>  r   rZ   rY   r“   r”   )r^   r{  r@  ÚcolsrF   rt   r&   r&   r'   Útest_header_with_index_col�  s   ÿz,TestExcelFileRead.test_header_with_index_colc                 C  sÊ   t ||ƒ d| }t |¡�}tj|ddgd|d�}W d   ƒ n1 s$w   Y  t||ƒ}tjddgd|› d�d	�}tj|d d… |dd … g|d  ¡ |d  ¡ gd
�}	t	g g |	d�}
t
 |
|¡ d S )NÚtest_datetime_mir   ro   )rq  r>   r%   z
2020-02-29z
2020-03-01rå   ræ   rç   rê  r!  )rR   rZ   rp   rY   rE   ÚDatetimeIndexr   rë  Úto_pydatetimer   r“   r”   )r^   r5   r%   r    rs   rX   rø   rK   ÚdtiÚexpected_column_indexrF   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 *rz   zio.excelz.readerÚabc)r)   r�   rŒ   rZ   rM  rt  r&   r&   r'   Útest_engine_invalid_option°  s   ÿÿ"ÿz,TestExcelFileRead.test_engine_invalid_optionc                 C  sr   |dkr	t  d¡ |dkr| t jjdd�¡ t d| ¡�}|jdgks'J ‚W d   ƒ d S 1 s2w   Y  d S )Nr   rK  r   rL  rM   rM  r|   )r)   r>  rO   rP   rQ   rZ   rp   Úsheet_names)r^   r5   r%   r    rX   r&   r&   r'   Útest_ignore_chartsheets¶  s   
ÿÿ"ÿz)TestExcelFileRead.test_ignore_chartsheetsc              
   C  s   t f}|d u rt d|› �¡ n|dkrdd l}t |jjf}n|dkr,ddlm} |f}t 	d|› �¡�B}t
|ƒjddd� t d	¡� z	tj||d
� W n	 |yV   Y nw W d   ƒ n1 saw   Y  W d   ƒ d S W d   ƒ d S 1 syw   Y  d S )NzInvalid test for engine=r   r   r   r‰  Úcorruptzutf-8)ÚencodingFrW   )r	   r)   r>  r   Úbiffhrˆ  r   rŠ  r“   rA  r   Ú
write_textrq  rZ   rp   )r^   r%   r    Úerrorsr   rŠ  Úfiler&   r&   r'   Útest_corrupt_files_closedÃ  s,   ÿ€ýþ"þz+TestExcelFileRead.test_corrupt_files_closedN)rc  rd  re  rs  r)   rf  ra   ru   r|  rP   rg  r~  r  r|  r‚  r~  r„  r†  r‡  rˆ  r‰  r�  r•  r—  r™  r   r&   r&   r&   r'   ro  ¾  s6    

&
þ




ro  )r    r!   r"   r#   )r    r!   r%   rC   r"   r!   )rF   r   r    r!   r%   r!   r"   rG   )=Ú
__future__r   r   r   Ú	functoolsr   r:   r   r¥  Úpathlibr   r§  r   Úurllib.errorr   Úzipfiler	   ÚnumpyrÑ   r)   Úpandas._configr
   Úpandas.compatr   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsrk  ÚpandasrZ   r   r   r   r   r   Úpandas._testingÚ_testingr“   Úpandas.core.arraysr   r   rP   rj  Ú
pytestmarkr-   r*   rn  Úengine_paramsr(   r,   rf  r!   r6   r%   r    rB   rE   rL   rR   rS   ro  r&   r&   r&   r'   Ú<module>   sŽ    ÿþÿþÿþè

þù
	



	
	          )