o
    Û­j:õ  ã                
   @  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  mZ d dlZd d
lmZmZmZmZm Z  d dl!m"Z# eƒ rne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*d3dd„Z+dd„ Z,ej-dd„ e*D ƒe.d�dd„ ƒZ/ej-d d!„ ƒZ0ej-d"d„ ƒZ1ej-d#d$„ ƒZ2d4d&d'„Z3d5d+d,„Z4d-d.„ Z5G d/d0„ d0ƒZ6G d1d2„ d2ƒZ7dS )6é    )Úannotations)ÚdatetimeÚtime)Úpartial)ÚBytesION)ÚPath)ÚURLError)Ú
BadZipFile)Úis_platform_windows)Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚread_csv)ú.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#   ú_/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/io/excel/test_readers.pyÚ_is_valid_engine_ext_pair@   s   
r%   c                 C  s    | j |f }tj|| jd�}|S )z�
    engine gives us a pytest.param object with some marks, read_ext is just
    a string.  We need to generate a new pytest.param inheriting the marks.
    r   )r!   ÚpytestÚparamr   )r"   r   r!   Ú	new_paramr#   r#   r$   Ú_transfer_marksU   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>`   s    ýüÿr.   )ÚparamsÚidsc                 C  ó   | j S )zS
    Fixture for Excel reader engine and read_ext, only including valid pairs.
    )r'   )Úrequestr#   r#   r$   Úengine_and_read_ext_   s   r3   c                 C  s   | \}}|S ©Nr#   ©r3   r"   r   r#   r#   r$   r"   o   ó   r"   c                 C  s   | \}}|S r4   r#   r5   r#   r#   r$   r   u   r6   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$   r?   {   s   r?   ú
str | Nonec                 C  s   dS )NÚnsr#   )r   r"   r#   r#   r$   Úget_exp_unit…   s   rB   Úexpectedr   ÚNonec                 C  s$   d | j _t||ƒ}| j  |¡| _ d S r4   )ÚindexÚnamerB   Úas_unit)rC   r   r"   Úunitr#   r#   r$   Úadjust_expected‰   s   
rI   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"   r2   r#   r#   r$   Úxfail_datetimes_with_pyxlsb�   s   ÿÿÿrO   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¢dHdF�e"dIdJej dKgdHdF�dCœƒfg¡dLdM„ ƒZ#dNdO„ Z$dPdQ„ Z%dRdS„ Z&ej dTi dUfdVdWidUfg¡dXdY„ ƒZ'dZd[„ Z(ej d\d]ed^d_giƒfd`edagdb�fg¡dcdd„ ƒZ)dedf„ Z*dgdh„ Z+didj„ Z,dkdl„ Z-dmdn„ Z.dodp„ Z/ej 0dq¡drds„ ƒZ1dtdu„ Z2dvdw„ Z3dxdy„ Z4ej dzd{d|d{gd{d|gd}d~d}gd}d~gg¡dd€„ ƒZ5d�d‚„ Z6dƒd„„ Z7ejj8ejj9d…d†„ ƒƒZ:e;j<ejj9d‡dˆ„ ƒƒZ=ejj9d‰dŠ„ ƒZ>ejj?d‹dŒ„ ƒZ@d�dŽ„ ZAe; Bd�¡d�d‘„ ƒZCd’d“„ ZDd”d•„ ZEd–d—„ ZFej d˜d™ej dšd›dšgfdœej gd� fg¡dždŸ„ ƒZGd d¡„ ZHd¢d£„ ZId¤d¥„ ZJd¦d§„ ZKd¨d©„ ZLdªd«„ ZMd¬d­„ ZNd®d¯„ ZOej d°d±d²d|dUgd|d)fd±d³d)d|dUgd)fd±d´d|dUgd|dUgd)fd±dµd|dUgd|d)fd¶d·d)d)d|d*gfd¶d·d)d)d¸d¹„ fg¡dºd»„ ƒZPd¼d½„ ZQd¾d¿„ ZRdÀdÁ„ ZSdÂdÃ„ ZTdÄdÅ„ ZUdÆdÇ„ ZVdÈdÉ„ ZWdÊdË„ ZXd)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"   r7   r8   ÚexcelÚ
read_excelN)r   ÚpdrV   Ú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                 _  r1   r4   rT   )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é   )rY   rW   Ú	ExcelFileÚopenrV   )	r[   r   r"   r\   rb   Úexpected_defaultsÚfÚresultrC   r#   r#   r$   Útest_engine_used£   s   ûÿzTestReaders.test_engine_usedc              	   C  s¸   ddiddiddiddiddidœ}|dv rt  d¡}n|d	kr&t  d
¡}nt  d¡}|d urZtjt|d�� tjd| dd||dd …  d� W d   ƒ d S 1 sSw   Y  d S d S )NÚfooÚabcdé{   ÚTrueTrd   >   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'©Úmatchrj   ÚSheet1r   rl   )Ú
sheet_namer;   Úengine_kwargs)ÚreÚescaper&   ÚraisesÚ	TypeErrorrW   rV   )r[   r   r"   ro   Ú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`rw   rj   ry   r   é   ©rz   r;   ÚusecolsÚSheet2rl   ©rz   Úskiprowsr;   r„   ©r&   r~   Ú
ValueErrorrW   rV   ©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ÚCrj   ry   r   )r   é   r‚   rƒ   r…   rl   r†   ©rO   rI   rW   rV   ÚtmÚassert_frame_equal)r[   r2   r"   r   r?   rC   Údf1Údf2r#   r#   r$   Útest_usecols_listç   s   
ÿû	zTestReaders.test_usecols_listc                 C  s  t ||ƒ |g d¢ }t|||ƒ tjd| dddd�}tjd| ddgddd	�}t ||¡ t ||¡ |d
dg }t|||ƒ tjd| dddd�}tjd| ddgddd	�}t ||¡ t ||¡ tjd| dddd�}tjd| ddgddd	�}t ||¡ t ||¡ d S )N©ÚArŒ   r�   rj   ry   r   zA:Drƒ   r…   rl   r†   rŒ   r�   zA,C,DzA,C:Dr�   )r[   r2   r"   r   r?   rC   r“   Údf3r#   r#   r$   Útest_usecols_strü   sR   
ÿû	ÿûÿûzTestReaders.test_usecols_strr„   )r   rl   r‚   )r   r‚   rl   )rl   r   r‚   )rl   r‚   r   )r‚   r   rl   )r‚   rl   r   c                 C  sH   t ||ƒ |ddg }t|||ƒ tjd| dd|d�}t ||¡ d S )Nr–   r�   rj   ry   r   rƒ   r�   )r[   r2   r"   r   r„   r?   rC   rq   r#   r#   r$   Ú.test_usecols_diff_positional_int_columns_order/  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š   rj   ry   ©rz   r„   )ÚrangeÚlenrE   rW   rV   r�   r‘   )r[   r   r„   r?   rC   rq   r#   r#   r$   Ú.test_usecols_diff_positional_str_columns_order?  s   z:TestReaders.test_usecols_diff_positional_str_columns_orderc                 C  s>   t ||ƒ |}t|||ƒ tjd| ddd�}t ||¡ d S ©Nrj   ry   r   ©rz   r;   r�   ©r[   r2   r"   r   r?   rC   rq   r#   r#   r$   Útest_read_excel_without_slicingG  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š   rj   ry   r   zA,D:Erƒ   r�   r¡   r#   r#   r$   Útest_usecols_excel_range_strP  s   
ÿz(TestReaders.test_usecols_excel_range_strc                 C  sL   d}t jt|d�� tjd| ddd� W d   ƒ d S 1 sw   Y  d S )NzInvalid column name: E1rw   rj   ry   zD:E1r›   rˆ   rŠ   r#   r#   r$   Ú$test_usecols_excel_range_str_invalid[  s   "ÿz0TestReaders.test_usecols_excel_range_str_invalidc                 C  sT   d}t jt|d�� tjd| ddgddgd� W d   ƒ d S 1 s#w   Y  d S )Nz(list indices must be integers.*, not strrw   rj   ry   r–   r�   rƒ   ©r&   r~   r   rW   rV   rŠ   r#   r#   r$   Útest_index_col_label_errora  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 )Nrj   ÚSheet3r–   r    )rŒ   r�   rš   ÚEÚF©rF   ©ÚcolumnsrE   )rW   rV   r   r   r�   r‘   ©r[   r   rq   rC   r#   r#   r$   Útest_index_col_strl  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 )	Nrj   r§   r•   r    )rš   r¨   r©   r‚   ©ÚlevelsÚcodesÚnamesr«   )rW   rV   r   r   r�   r‘   r­   r#   r#   r$   Útest_index_col_emptyt  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 )Nrj   ÚSheet4r    )Úi1ÚaÚx)Úi2ÚbÚy)z
Unnamed: 0Úcol1Úcol2©r¬   )rW   rV   r   Ú	set_indexr¬   r�   r‘   )r[   r   r;   rq   rC   r#   r#   r$   Útest_index_col_with_unnamed  s   
ÿÿz'TestReaders.test_index_col_with_unnamedc                 C  sL   d}t jt|d�� tjd| dgd� W d   ƒ d S 1 sw   Y  d S )NzEUsecols do not match columns, columns expected but not found: \['E'\]rw   rj   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.rw   rj   Ú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Útest2ry   ©rz   ÚaaaaÚbbbbbÚTestÚTest1r½   ©rW   rV   r   r�   r‘   )r[   r   ÚparsedrC   r#   r#   r$   Útest_excel_stop_iterator   s   z$TestReaders.test_excel_stop_iteratorc                 C  sd   t ||ƒ |dkr|dkr| tjjdd�¡ tjd| dd�}ttj	ggdgd	�}t
 ||¡ d S )
Nr   r   z+Calamine can't extract error from ods filesrJ   Útest3ry   rÅ   rÈ   r½   )rO   rL   r&   rM   rN   rW   rV   r   ÚnpÚnanr�   r‘   )r[   r2   r"   r   rË   rC   r#   r#   r$   Útest_excel_cell_error_na¥  s   
ÿz$TestReaders.test_excel_cell_error_nac           	      C  sŽ   t ||ƒ |}t|||ƒ tjd| ddd�}tjd| ddgdd�}t ||¡ t ||¡ tjd| dddd�}t ||jd d	… ¡ d S )
Nrj   ry   r   r    r…   rl   ©rz   r‡   r;   ©rz   r;   Ú
skipfooteréÿÿÿÿ)rO   rI   rW   rV   r�   r‘   Úiloc)	r[   r2   r"   r   r?   rC   r’   r“   r—   r#   r#   r$   Útest_excel_table²  s   
ÿÿzTestReaders.test_excel_tablec                 C  sV  t ||ƒ t||ƒ}t g d¢g d¢g d¢g d¢g d¢ttdddƒtddd	ƒtd
ddƒtdddƒtdddƒgd|› d�d�dœ¡}d}tj|| dd�}t 	||¡ | 
¡ }d|j|jd df< tj|| dd�}t 	||¡ t|jƒD ]\}	}
tj|| d|	d�}| |
¡}t 	||¡ qt|d  t¡|d< tj|| ddtid�}t 	||¡ d S )N)rl   rŽ   éýÿÿÿé   r   )g      ô?g      @gHáz®Gý?g¸…ëQ¸þ?g•Ö&è.>)TFTTF)rl   rŽ   r‚   rØ   é   )r¶   r‚   ÚcÚdÚeiÝ  é
   é   é   iq  rl   é   é   iß  r‚   úM8[ú]©Údtype)ÚIntColÚFloatColÚBoolColÚStrColÚStr2ColÚDateColÚ
test_typesry   rÅ   g      @rê   r    ré   ©rz   Ú
converters)rO   rB   r   Ú	from_dictr   r   rW   rV   r�   r‘   ÚcopyÚlocrE   Ú	enumerater¬   r¾   Úapplyr   )r[   r2   r"   r   rH   rC   ÚbasenameÚactualÚfloat_expectedÚicolrF   Úexpr#   r#   r$   Útest_reader_special_dtypesÅ  sJ   






û
øúÿ
ÿ
ÿz&TestReaders.test_reader_special_dtypesc              
   C  sz   d}t  g d¢dtjdddgg d¢dtjd	d
dgdœ¡}dd„ dd„ dd„ dd„ dœ}tj|| d|d�}t ||¡ d S )NÚtest_converters)rl   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‚   ry   rí   )r   rï   rÎ   rÏ   rW   rV   r�   r‘   )r[   r   rô   rC   rî   rõ   r#   r#   r$   Útest_reader_converters÷  s"   üÿ
ü	
ÿz"TestReaders.test_reader_convertersc                 C  sò   d}t  || ¡}tg d¢g d¢g d¢ddtjdgdœƒ}t ||¡ t j|| dd	td
œd�}|d  d¡|d< |d  d	¡|d< t	g d¢d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©rl   rŽ   r‚   rØ   ©ç      @ç      @ç      @ç      @ç      ð?ç       @ç      @©r¶   r¹   rÚ   rÛ   Úfloat64Úfloat32)r¶   r¹   rÚ   rä   r¶   r¹   ©Ú001Ú002Ú003Ú004r   rÚ   z(Unable to convert column d to type int64rw   rÛ   Úint64)rW   rV   r   rÎ   rÏ   r�   r‘   r   Úastyper   r&   r~   r‰   )r[   r   rô   rõ   rC   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þ   Ú2r   c                 C  s&   d}t j|| |d�}t ||¡ d S )Nr  rä   ©rW   rV   r�   r‘   )r[   r   rå   rC   rô   rõ   r#   r#   r$   Útest_reader_dtype_str.  s   z!TestReaders.test_reader_dtype_strc                   s´  |dv rt  d|› d�¡ ttddgdd�tdd	gd
d�tddgdd�tddgdd�ttjdgdd�ttjdgd
d�ttjdgdd�ttjdgdd�tt d¡gd ƒttjtjgdd�dœ
ƒ‰t |¡�}ˆj	|ddd� tj
|d|d�}W d   ƒ n1 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: 'ú'rl   r‚   ÚInt64rä   r  r  ÚFloat64TFÚbooleanr¶   r¹   Ústringé   g      @z
2019-12-31rŽ   )
r¶   r¹   rÚ   rÛ   rÜ   rp   ÚgÚhÚiÚjÚtest©rz   rE   ©rz   Údtype_backendÚpyarrowr   )ÚArrowExtensionArrayc                   s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Úfrom_pandas)Úarray)r+   Úcol©r1  ÚdfÚpar#   r$   Ú
<dictcomp>n  s    ÿÿz2TestReaders.test_dtype_backend.<locals>.<dictcomp>r*  Úus)rH   r+  râ   rã   )r&   Úskipr   r   rW   ÚNAÚ	Timestampr�   Úensure_cleanÚto_excelrV   r0  Úpandas.arraysr1  r¬   r3  Ú	_pa_arrayÚcastÚ	timestamprB   r  r‘   )r[   r   r/  r"   Ú	file_pathrq   rC   rH   r#   r5  r$   Útest_dtype_backendP  sJ   öÿÿþþÿÿ
zTestReaders.test_dtype_backendc                 C  s�   |dv rt  d|› d�¡ ttjdgdtjgdœƒ}t |¡�}|j|ddd	� tj	|dd
dd�}W d   ƒ n1 s;w   Y  t 
||¡ d S )Nr   r!  r"  r  r  ©r¶   r¹   r,  Fr-  Únumpy_nullabler  )rz   r/  rå   )r&   r:  r   rÎ   rÏ   r�   r=  r>  rW   rV   r‘   )r[   r   r6  rC  rq   r#   r#   r$   Útest_dtype_backend_and_dtype€  s   üþz(TestReaders.test_dtype_backend_and_dtypec              	   C  s  |dv rt  d|› d�¡ t d|¡�g 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 sLw   Y  ttddgt |¡d�tdd gt |¡d�d	œƒ}t	j||dd� W d   ƒ d S 1 s}w   Y  d S )Nr   r!  r"  zmode.string_storager¶   r¹   rä   r·   rE  r,  Fr-  rF  r.  )Úcheck_column_type)r&   r:  rW   Úoption_contextr   rÎ   r3  Úobject_r;  r�   r=  r>  rV   r   ÚStringDtyper‘   )r[   r   Ústring_storager6  rC  rq   rC   r#   r#   r$   Útest_dtype_backend_string�  s*   þÿÿþþÿ"êz%TestReaders.test_dtype_backend_stringzdtypes, exp_valuerl   ú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ä   rl   )r¶   rN  zdtype dict changed)Úobjectrð   rW   rV   r   r   r�   r‘   )	r[   r   ÚdtypesÚ	exp_valuerô   Ú
dtype_dictÚdtype_dict_copyrq   rC   r#   r#   r$   Útest_dtype_mangle_dup_cols­  s   þÿz&TestReaders.test_dtype_mangle_dup_colsc                 C  s2   d}t  || ¡}tdg d¢iƒ}t ||¡ d S )NÚtest_spacesÚtestcol)zthis is greatz4    spacesz1 trailing z
 1 leadingz2  spaces  multiple  timesrÊ   )r[   r   rô   rõ   rC   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:  rW   rV   r�   r‘   )r[   r"   r   rô   rC   rõ   r#   r#   r$   Útest_read_excel_ods_nested_xmlÑ  s   	z*TestReaders.test_read_excel_ods_nested_xmlc                 C  sF   d}t j|| d d�}g d¢}t || ¡ ¡ |t| ¡ ƒks!J ‚d S )NÚtest_multisheetrÅ   )ÚCharlieÚAlphaÚBeta)rW   rV   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Å   )rW   rV   ra  Úsetr�   r_  r`  r�   )r[   r   rô   rd  rc  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Å   )ry   r…   r§   )rW   rV   r�   r_  r`  rb  r#   r#   r$   Ú"test_reading_all_sheets_with_blankû  s   z.TestReaders.test_reading_all_sheets_with_blankc                 C  s$   t jd| dd�}t |tƒ ¡ d S )NÚblankry   rÅ   )rW   rV   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½   rh  ry   rÅ   )r   rW   rV   r�   r‘   )r[   r   rC   rõ   r#   r#   r$   Ú!test_read_excel_blank_with_header	  s   z-TestReaders.test_read_excel_blank_with_headerc                 C  s�   t jtdd�� tjd| dgd d� W d   ƒ n1 sw   Y  t jtdd�� tjd| dd„ d d	� W d   ƒ d S 1 sAw   Y  d S )
Nz \(sheet: Sheet1\)$rw   rh  rl   )Úheaderrz   rj   c                 S  s   dd S )Nrl   r   r#   r  r#   r#   r$   r    ó    zHTestReaders.test_exception_message_includes_sheet_name.<locals>.<lambda>)r„   rz   )r&   r~   r‰   rW   rV   Ú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 openpyxlrJ   )r   r   z)Defaults to openpyxl, maybe not supportedÚtestdateoverflow)rO   r   rW   r<  rL   r&   rM   rN   rV   r�   r‘   )r[   r2   r"   r   rC   rq   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 ©Nrj   ry   r   r    )r;   rz   r�   )
r[   r2   r   r"   r?   Úfilenamerz   rC   r’   r“   r#   r#   r$   Útest_sheet_name1  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 )Nrj   ry   r   r    rk   )rW   rV   rn   r�   r‘   )r[   r   ÚpthrC   rp   rõ   r#   r#   r$   Útest_excel_read_bufferB  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 )Nrs   zUnknown engine: foorw   r  rT   rˆ   )r[   Ú
bad_enginer#   r#   r$   Útest_bad_engine_raisesI  s   "ÿz"TestReaders.test_bad_engine_raisesrz   r‚   r   r´   ry   c                 C  sJ   d}t jt|d�� tjd| |d� W d   ƒ d S 1 sw   Y  d S ©Nz?Worksheet index 3 is invalid|Worksheet named 'Sheet4' not foundrw   rj  rÅ   rˆ   )r[   r   rz   r€   r#   r#   r$   Útest_bad_sheetname_raisesN  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 )Nrs   ú|)z(No such file or directoryu   æ²¡æœ‰é‚£ä¸ªæ–‡ä»¶æˆ–ç›®å½•zFile o directory non esistente)rw   )Újoinr&   r~   ÚFileNotFoundErrorrW   rV   )r[   r   Úbad_filerx   r#   r#   r$   Útest_missing_file_raisesX  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 filerw   )r‰   r   r†  r   rˆ  r	   r&   r~   rW   rV   r   )r[   r"   Ú
bad_streamÚerrorr€   r†  rˆ  r#   r#   r$   Útest_corrupt_bytes_raisese  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 )Nrj   rk   )Úcontent)rn   Úserve_contentÚreadrW   rV   Úurlr�   r‘   )r[   Ú
httpserverr   rp   Ú	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 )Nrj   rk   ©ÚKeyÚBodyús3://ú/test1)Ústorage_options)rn   Ú
put_objectrF   rW   rV   r�   r‘   )r[   r   Ús3_public_bucketÚs3sorp   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 )Nrj   rk   r”  r   r—  r˜  r#   )	rn   rš  Ús3fsÚS3FileSystemrF   rW   rV   r�   r‘   )	r[   r   r›  rœ  rp   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 )Nr7   r8   rU   rj   zfile://localhost/ú zfailing on )ÚosÚpathr‚  rW   rV   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Ÿ   )rW   rV   r   r�   r‘   )r[   r   Ústr_pathrC   Úpath_objrõ   r#   r#   r$   Útest_read_from_pathlib_path¶  s
   z'TestReaders.test_read_from_pathlib_pathzpy.pathc                 C  s\   ddl m} tj d| ¡}tj|ddd�}|ƒ  d| ¡}tj|ddd�}t ||¡ d S )Nr   )Úlocalrj   ry   r    )	Úpy.pathr®  r£  r¤  r‚  rW   rV   r�   r‘   )r[   r   Ú	LocalPathr«  rC   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 )Nrj   rk   ry   r   r    )r£  r¤  r‚  rn   rW   rV   rŽ  )r[   r   r«  rp   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)rJ   ÚTimerl   rŽ   r‚   é-   é8   i † rØ   é   é1   i@ r'  é   é*   ià“ é   é9   é#   i€ é	   é)   é   i ¡ é   é   é   iÀ'	 rá   i`®
 é5   i 5 é   é%   r   i » é   é   é6   Ú
times_1900ry   rÅ   Ú
times_1904)rO   rL   r&   rM   rN   r   rï   r   rW   rV   r�   r‘   )r[   r2   r"   r   rC   rõ   r#   r#   r$   Útest_reader_secondsÖ  s6   
ÿÿ

õÿÿzTestReaders.test_reader_secondsc           	   	   C  sJ  t ||ƒ t||ƒ}t ddgddgg¡}d| }tddt d¡d	gd
dt d¡dgddt d¡dgddt d¡d	gg|d�}||d
   d|› d�¡||d
 < tj|dddgdd�}t	 
||¡ ||_g d¢|_tj|dddgd�}t	 
||¡ ||_tj|dddgddgd�}t	 
||¡ g d¢|_| dd g¡|_tj|d!ddgd�}t	 
||¡ ttdƒƒ|_| d"d#g¡|_tj|d$ddgdd�}t	 
||¡ |jdd
gdd%� d"d#g¡|_tj|d&dddgd�}t	 
||¡ | d"d#g¡|_| dd g¡|_tj|d'ddgddgd�}t	 
||¡ tj|d(ddgddgd
d)�}t	 
||¡ d S )*Nrs   Úbarr¶   r¹   Útestmultiindexrl   r  ú
2015-01-01TrŽ   r  ú
2015-01-02Fr‚   r  ú
2015-01-03rØ   r  ú
2015-01-04r½   râ   rã   Ú	mi_columnr   )rz   ro  r;   r  Úmi_indexr    Úboth©rz   r;   ro  Úilvl1Úilvl2Úmi_index_nameÚc1Úc2Úmi_column_name)ÚlevelÚname_with_intÚ	both_nameÚboth_name_skiprows)rz   r;   ro  r‡   )rO   rB   r   Úfrom_productr   rW   r<  r  rV   r�   r‘   rE   r¬   Ú	set_namesra  rœ   Ú
set_levels)	r[   r2   r"   r   rH   ÚmiÚmi_filerC   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Í  rs   rÌ  r¶   r¹   rÙ  rÚ  ©r²   rl   r  rÎ  TrŽ   r  rÏ  Fr‚   r  rÐ  rØ   r  rÑ  )rs   rs   rÌ  rÌ  rÖ  r×  r«   râ   rã   r   rÕ  )rO   r   rà  rB   r   rW   r<  Úfrom_arraysr  rV   r�   r‘   )r[   r2   r"   r   rz   Úidx_lvl2rä  rã  rH   rC   rq   r#   r#   r$   Ú+test_read_excel_multiindex_blank_after_nameN  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   rl   ©rz   ro  ©r–   rŒ   ©ÚkeyÚvalr	  rŽ   r½   )rW   rV   r   rà  r   r�   r‘   )r[   r   rä  rq   Úexp_columnsrC   r#   r#   r$   Ú&test_read_excel_multiindex_header_onlyv  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   rl   rŽ   r‚   rØ   rÙ   r¯   rª   ©rE   r¬   Úsingle_namesr   r    Úmulti_namesrl   )r  r  r  r  r  )r  r  r  r  r  )r   rl   rŽ   r‚   rØ   Úsingle_no_namesÚmulti_no_names)rÎ   r3  rÏ   rP  r   r   r   rW   rV   r�   r‘   rE   )	r[   r   ry  r8   r¬   rã  ÚsirC   rõ   r#   r#   r$   Útest_excel_old_index_format�  sf   ú÷þúÿûÿ	þúz'TestReaders.test_excel_old_index_formatc              	   C  sR   d}dD ]"}t jt|d�� tjd| |d� W d   ƒ n1 s!w   Y  qd S )Nz#Passing a bool to header is invalid)TFrw   rj   ©ro  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Ž   ©rz   r‡   rl   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  ñ  rp  z6TestReaders.test_read_excel_skiprows.<locals>.<lambda>)rz   r‡   r²   )rO   rB   rW   rV   r   r<  r  r�   r‘   rÎ   r3  ©r[   r2   r"   r   rH   rõ   rC   r#   r#   r$   Útest_read_excel_skiprowsÑ  sT   

ÿüù	ýýüüù	z$TestReaders.test_read_excel_skiprowsc                 C  s†   t ||ƒ t||ƒ}tjd| ddd„ d�}tddt d¡d	gd
dt d¡dggg d¢d�}|d  d|› d�¡|d< t ||¡ d S )Nr)  r*  c                 S  s   | dvS )N)rl   r‚   rÙ   r#   r  r#   r#   r$   r    rp  zFTestReaders.test_read_excel_skiprows_callable_not_in.<locals>.<lambda>r+  rl   r  rÎ  Tr‚   r  rÐ  Fr  r½   rÚ   râ   rã   )	rO   rB   rW   rV   r   r<  r  r�   r‘   r.  r#   r#   r$   Ú(test_read_excel_skiprows_callable_not_in  s   

ýýù	z4TestReaders.test_read_excel_skiprows_callable_not_inc                 C  s@   d}t jd| |d�}t  d| ¡}|d |… }t ||¡ d S )NrÙ   rj   ©Únrowsr  )r[   r   Únum_rows_to_pullrõ   rC   r#   r#   r$   Útest_read_excel_nrows  s
   z!TestReaders.test_read_excel_nrowsc                 C  s@   t  d| ¡}t|ƒ}|d }t jd| |d�}t ||¡ d S )Nrj   rÝ   r1  )rW   rV   r�   r�   r‘   )r[   r   rC   Únum_records_in_filer3  rõ   r#   r#   r$   Ú0test_read_excel_nrows_greater_than_nrows_in_file%  s
   z<TestReaders.test_read_excel_nrows_greater_than_nrows_in_filec                 C  sJ   d}t jt|d�� tjd| dd� W d   ƒ d S 1 sw   Y  d S )Nz'nrows' must be an integer >=0rw   rj   r  r1  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  ;  rp  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]).
        )rz   ro  r;   r‡   Nr‚   )rz   ro  r;   r‡   r2  )rW   rV   rÕ   r�   r‘   )	r[   r   ry  rz   ro  r;   r‡   rC   rõ   r#   r#   r$   Útest_read_excel_nrows_params3  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 argumentsrw   rj   ry   r   r¥   rr  r#   r#   r$   Útest_deprecated_kwargsW  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ï  ©rl   rŽ   r;  )r   rl   rè  )rŽ   r‚   r  rì  r   rl   rÕ  )r   Úfrom_tuplesr   rW   rV   r�   r‘   )r[   r   Ú	file_namer8   ÚidxrC   rq   r#   r#   r$   Ú"test_no_header_with_list_index_col[  s   ÿÿz.TestReaders.test_no_header_with_list_index_colc                 C  s>   d| }dt jddg}t|dgd�}t |¡}t ||¡ d S )NÚone_col_blank_lineg      à?rl   rŽ   Únumbersr½   )rÎ   rÏ   r   rW   rV   r�   r‘   )r[   r   r=  r8   rC   rq   r#   r#   r$   Útest_one_col_noskip_blank_lineh  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Œ   rl   r‚   rŽ   rØ   r½   Úmi_column_empty_rowsr   rí  )	r   r<  rÎ   rÏ   r   rW   rV   r�   r‘   )r[   r   r=  r¬   r8   rC   rq   r#   r#   r$   Ú test_multiheader_two_blank_linesp  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)rW   rV   Úshape)r[   r   r=  rq   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 worksheetsrJ   z"Worksheet named 'Chart1' not foundrw   Ú
chartsheetÚChart1rÅ   ©	r&   r:  rL   rM   rN   r~   r‰   rW   rV   ©r[   r2   r"   r   r#   r#   r$   Útest_ignore_chartsheets_by_str„  s   
ÿÿ"ÿz*TestReaders.test_ignore_chartsheets_by_strc                 C  rH  )Nr   rI  r   rJ  rJ   z0Worksheet index 1 is invalid, 1 worksheets foundrw   rK  rl   rÅ   rM  rN  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ú,rl   )Údecimalr‡   )rl   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)YÚ__name__Ú
__module__Ú__qualname__r&   Úfixturer^   rr   r�   r‹   r”   r˜   rM   Úparametrizer™   rž   r¢   r£   r¤   r¦   r®   r³   r¿   rÁ   rÃ   rÌ   rÐ   rÖ   rù   r  r  r   rÎ   rÏ   r   r   r  rD  rG  rM  rU  rX  rZ  re  rg  ri  rk  rn  rs  Úfilterwarningsrw  rz  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(  r/  r0  r4  r6  r7  r8  r9  r?  rB  rD  rG  rO  rP  r`  r#   r#   r#   r$   rP   ™   s   

3(ÿ

	

	2üÿþüÿþôþ
0
þþ



þ




	$Tþþ
!I6úþ
	rP   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)rx   Úraise_on_extra_warningsrj   rk   rT   )r�   Úassert_produces_warningÚFutureWarningrn   rW   rV   rŽ  )r[   r"   r   r€   rp   r#   r#   r$   Útest_deprecate_bytes_input¯  s   ÿÿÿý"ýz,TestExcelFileRead.test_deprecate_bytes_inputTrQ   c                 C  rS   )zH
        Change directory and set engine for ExcelFile objects.
        rT   r7   r8   rU   rm   N)r   rW   rm   rX   rY   rZ   r#   r#   r$   r^   ½  r_   z#TestExcelFileRead.cd_and_set_enginec                 C  sr   ddddddœ}t  d| ¡�}|j}W d   ƒ n1 sw   Y  |d ur)|}n||dd …  }||ks7J ‚d S )Nr   r   r   r   rd   rj   rl   )rW   rm   r"   )r[   r   r"   ro   rU   rq   rC   r#   r#   r$   rr   Æ  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Útest4ry   FÚapple©rz   Úkeep_default_naÚ	na_valuesr;  rl   ÚrabbitrÈ   r½   TÚtest5ú1.#QNANrÏ   )rW   rm   rV   r   rÎ   rÏ   r�   r‘   )r[   r   rU   rË   rC   r#   r#   r$   Útest_excel_passes_naØ  sH   
ÿÿÿ
ÿÿ ÿ
ÿÿÿ
ÿÿ ÿz&TestExcelFileRead.test_excel_passes_naÚ	na_filter)NTFc                 C  s¼   i }|d ur
||d< t  d| ¡�}t j|fdddgdœ|¤Ž}W d   ƒ n1 s*w   Y  |du r@dgd	gd
gdgdgg}ntjgd	gtjgtjgdgg}t|dgd�}t ||¡ d S )Nr{  rx  ry   Trs  rt  Fry  rl   rÏ   rw  rÈ   r½   )rW   rm   rV   rÎ   rÏ   r   r�   r‘   )r[   r   r{  ra   rU   rË   rC   r#   r#   r$   Útest_excel_passes_na_filterþ  s&   ÿüûÿ	z-TestExcelFileRead.test_excel_passes_na_filterc           
      C  s˜  t ||ƒ |}t|||ƒ t d| ¡�}tj|ddd�}tj|ddgdd�}W d   ƒ n1 s1w   Y  t ||¡ t ||¡ t d| ¡�}|jddd�}|jddgdd�}W d   ƒ n1 sdw   Y  t ||¡ t ||¡ t d| ¡�}tj|dddd�}	W d   ƒ n1 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 )Nrj   r   r    rl   rÑ   )r;   )r‡   r;   rÒ   rÔ   )r;   rÓ   )	rO   rI   rW   rm   rV   r�   r‘   rc   rÕ   )
r[   r2   r"   r   r?   rC   rU   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 rx  )rO   rI   rW   rm   rc   r�   r‘   )r[   r2   r"   r   r?   rC   ry  rz   rU   Ú	df1_parseÚ	df2_parser#   r#   r$   rz  2  s   
ÿÿz!TestExcelFileRead.test_sheet_namerz   r‚   r   r´   ry   c              	   C  s‚   d}t jt|d��. t d| ¡�}|j|d� W d   ƒ n1 s"w   Y  W d   ƒ d S W d   ƒ d S 1 s:w   Y  d S r  )r&   r~   r‰   rW   rm   rc   )r[   r   rz   r€   rU   r#   r#   r$   r€  D  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 )Nrj   ry   r   ©rz   r;   r"   rk   r    )rW   rV   rn   rm   r�   r‘   )r[   r"   r   r{  rC   rp   rh   rõ   r#   r#   r$   r|  O  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 )Nrj   rk   ry   r   r€  )rn   rW   rm   rV   Úclosed)r[   r"   r   rp   re   r#   r#   r$   Útest_reader_closes_fileY  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 ExcelFilerj   rw   rs   rT   )rW   rm   r&   r~   r‰   rV   )r[   r   r€   Úxlr#   r#   r$   Útest_conflicting_excel_enginesa  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 )Nrj   rT   rk   )rW   rV   rn   rŽ  r   r�   r‘   )r[   r"   r   rC   rp   r8   rõ   r#   r#   r$   Útest_excel_read_binaryi  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 )Nrj   rk   rT   )rn   rW   rV   r�   r‘   )r[   r   r"   rp   rq   rC   r#   r#   r$   Ú%test_excel_read_binary_via_read_excels  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.xlsxrk   zexceeds maximumrw   r   rl   r&  )rn   r&   r~   r‰   rW   rV   )r[   r"   rp   r#   r#   r$   Ú)test_read_excel_header_index_out_of_rangez  s   ÿÿ"ÿz;TestExcelFileRead.test_read_excel_header_index_out_of_rangery  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è  rl   r‚   r  )rE   r¬   rå   ry   r   rÕ  )r   r   r<  r   rW   rV   r�   r‘   )r[   ry  r>  ÚcolsrC   rq   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   rl   )ro  r;   r"   z
2020-02-29z
2020-03-01râ   rã   rä   rè  r  )rO   rW   rm   rV   rB   ÚDatetimeIndexr   ré  Úto_pydatetimer   r�   r‘   )r[   r2   r"   r   rp   rU   rõ   rH   ÚdtiÚexpected_column_indexrC   r#   r#   r$   Útest_read_datetime_multiindex‹  s   
ÿ


þþz/TestExcelFileRead.test_read_datetime_multiindexc              	   C  sx   t jtdd��+ t d|› d�d¡� W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s5w   Y  d S )NzValue must be one of *rw   zio.excelz.readerÚabc)r&   r~   r‰   rW   rI  rr  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   rI  r   rJ  rJ   rK  ry   )r&   r:  rL   rM   rN   rW   rm   Úsheet_names)r[   r2   r"   r   rU   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)ÚencodingFrT   )r	   r&   r:  r   Úbiffhr†  r   rˆ  r�   r=  r   Ú
write_textro  rW   rm   )r[   r"   r   Úerrorsr   rˆ  Úfiler#   r#   r$   Útest_corrupt_files_closed³  s,   ÿ€ýþ"þz+TestExcelFileRead.test_corrupt_files_closedN)ra  rb  rc  rq  r&   rd  r^   rr   rz  rM   re  r|  r}  rz  r€  r|  r‚  r„  r…  r†  r‡  r�  r“  r•  r—  rž  r#   r#   r#   r$   rm  ®  s6    

&
þ




rm  )r   r   r   r    )r   r   r"   r@   r   r   )rC   r   r   r   r"   r   r   rD   )8Ú
__future__r   r   r   Ú	functoolsr   r7   r   r£  Úpathlibr   r¥  r|   Úurllib.errorr   Úzipfiler	   ÚnumpyrÎ   r&   Úpandas.compatr
   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsri  ÚpandasrW   r   r   r   r   r   Úpandas._testingÚ_testingr�   rM   rh  Ú
pytestmarkr*   r'   rl  Úengine_paramsr%   r)   rd  r   r3   r"   r   r?   rB   rI   rO   rP   rm  r#   r#   r#   r$   Ú<module>   sŠ    ÿþÿþÿþè

þù
	



	
	          