U
    ¾mœds»  ã                	   @   sº  d dl mZ d dlmZ d dlmZ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m Z m!Z!m"Z" d dl#m$Z% d d
l&m'Z'm(Z( d dl)m*Z* d dl+Zd dl+m,Z, ej-ddddgd�dd„ ƒZ.dd„ Z/e 0d¡e 0d¡dd„ ƒƒZ1dd„ Z2e 0d¡e 0d¡e 0d¡dd„ ƒƒƒZ3ej4 5dej6de 0d¡e 0d¡gd �ej6de 0d¡d �g¡G d!d"„ d"ƒƒZ7dS )#é    )Úpartial)Úreload)ÚBytesIOÚStringION)ÚPath)ÚIterator)ÚURLError)Úis_platform_windows)ÚNAÚ	DataFrameÚ
MultiIndexÚSeriesÚ	TimestampÚ
date_rangeÚread_csvÚto_datetime)ÚArrowStringArrayÚStringArray)Úfile_path_to_url©Ú	read_htmlzchinese_utf-16.htmlzchinese_utf-32.htmlzchinese_utf-8.htmlzletz_latin1.html)Úparamsc                 C   s   |ddd| j ƒS )z6Parametrized fixture for HTML encoding test filenames.ÚioÚdataZhtml_encoding)Úparam)ÚrequestÚdatapath© r   úR/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/io/test_html.pyÚhtml_encoding_file*   s    
r   c                 O   sŠ   t | ƒt |ƒks,tdt | ƒ› dt |ƒ› �ƒ‚d}ttdd„ | |ƒƒ}|sPt|ƒ‚t| |ƒD ]*\}}tj||f|ž|Ž |jrZtdƒ‚qZd S )Nz*lists are not of equal size len(list1) == z, len(list2) == z$not all list elements are DataFramesc                 S   s   t | tƒot |tƒS ©N)Ú
isinstancer   )ÚxÚyr   r   r   Ú<lambda>@   ó    z(assert_framelist_equal.<locals>.<lambda>zframes are both empty)ÚlenÚAssertionErrorÚallÚmapÚzipÚtmÚassert_frame_equalÚempty)Zlist1Zlist2ÚargsÚkwargsÚmsgZboth_framesZframe_iZframe_jr   r   r   Úassert_framelist_equal7   s    ÿýÿr1   Úbs4Úhtml5libc              	   C   sJ   dd l }|  |dd¡ tjtdd�� t|dddd	ƒd
d� W 5 Q R X d S )Nr   Ú__version__z4.2zPandas requires version©Úmatchr   r   Úhtmlú	spam.htmlr2   ©Úflavor)r2   ÚsetattrÚpytestÚraisesÚImportErrorr   )Zmonkeypatchr   r2   r   r   r   Útest_bs4_version_failsK   s    r?   c               	   C   s@   d} d}d| d }t jt|d�� t| d|d� W 5 Q R X d S )Nz
google.comzinvalid flavorz\{z \} is not a valid set of flavorsr5   Zgoogle©r6   r:   ©r<   r=   Ú
ValueErrorr   )Úurlr:   r0   r   r   r   Útest_invalid_flavorU   s
    rD   Úlxmlc                 C   s<   | ddddƒ}t |ddgd�}t |ddgd�}t||ƒ d S )	Nr   r   r7   úvalid_markup.htmlr   rE   )Ú	index_colr:   r2   ©r   r1   )r   ÚfilenameZdfs_lxmlZdfs_bs4r   r   r   Útest_same_ordering^   s    rJ   r:   )Zmarksc                   @   s$  e Zd Zejdd„ ƒZejdd„ ƒZejdd�dd„ ƒZd	d
„ Zdd„ Z	ej
jejddd�dd„ ƒƒZej
jejddd�dd„ ƒƒZej
jdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$ej
jejd>d?„ ƒƒZ%ej
jej
jejd@dA„ ƒƒƒZ&ej
jdBdC„ ƒZ'ej
jdDdE„ ƒZ(dFdG„ Z)ej
jdHdI„ ƒZ*ej
jdJdK„ ƒZ+ej
jdLdM„ ƒZ,ej
jdNdO„ ƒZ-ej
jdPdQ„ ƒZ.ej
jdRdS„ ƒZ/ej
jdTdU„ ƒZ0dVdW„ Z1ej
jejdXdd�dYdZ„ ƒƒZ2ej
jejdXdd�d[d\„ ƒƒZ3d]d^„ Z4d_d`„ Z5dadb„ Z6dcdd„ Z7dedf„ Z8dgdh„ Z9ej
jdidj„ ƒZ:ej
jdkdl„ ƒZ;dmdn„ Z<dodp„ Z=dqdr„ Z>dsdt„ Z?dudv„ Z@dwdx„ ZAdydz„ ZBd{d|„ ZCd}d~„ ZDdd€„ ZEd�d‚„ ZFdƒd„„ ZGd…d†„ ZHej
 Id‡ddˆg¡d‰dŠ„ ƒZJd‹dŒ„ ZKd�dŽ„ ZLd�d�„ ZMd‘d’„ ZNd“d”„ ZOd•d–„ ZPd—d˜„ ZQej
jd™dš„ ƒZRd›dœ„ ZSd�dž„ ZTej
 IdŸdeUd gƒd¡fdˆeUd¢gƒeUd gƒfg¡d£d¤„ ƒZVej
 Wd¥¡d¦d§„ ƒZXd¨d©„ ZYdªd«„ ZZej
jd¬d­„ ƒZ[d®d¯„ Z\d°d±„ Z]ej
 Id‡d²d³d´dµg¡d¶d·„ ƒZ^d¸d¹„ Z_dºd»„ Z`d¼d½„ Zad¡S )¾ÚTestReadHtmlc                 C   s   |ddddƒS )Nr   r   r7   r8   r   ©Úselfr   r   r   r   Ú	spam_datap   s    zTestReadHtml.spam_datac                 C   s   |ddddƒS )Nr   r   r7   úbanklist.htmlr   rL   r   r   r   Úbanklist_datat   s    zTestReadHtml.banklist_dataT)Zautousec                 c   s   t t|d�| _d V  d S )Nr9   )r   r   )rM   r:   r   r   r   Úset_defaultsx   s    zTestReadHtml.set_defaultsc                 C   sV   t jdddd„ ddd� dj¡ t¡}| ¡ }| j|dd	id
d�d
 }t  ||¡ d S )Né   é   c                  W   s
   t j ¡ S r    )ÚnpÚrandomZrand)r.   r   r   r   r$   ‚   r%   z2TestReadHtml.test_to_html_compat.<locals>.<lambda>F)Z
data_gen_fZc_idx_namesZr_idx_namesz{:.3f}ÚclassZ	dataframer   )ÚattrsrG   )	r+   ZmakeCustomDataframeÚapplymapÚformatZastypeÚfloatÚto_htmlr   r,   )rM   ÚdfÚoutÚresr   r   r   Útest_to_html_compat}   s    ûøøÿz TestReadHtml.test_to_html_compatc                    sÐ  t tdtjdgdd�tdddgdd�tdtjdgdd�tdd	dgdd�d
dd gd
dd
gdddgddd gdœƒ}|dkr¬ttjdddgtjd�ƒ}ttjddtgtjd�ƒ}n2t 	d¡‰t
ˆ dddg¡ƒ}t
ˆ ddd g¡ƒ}|jdd�}t d|¡� | j||d�d }W 5 Q R X t tdtjdgdd�tdddgdd�tdtjdgdd�tdd	dgdd�td
dtgdd�td
dd
gdd�||dœƒ‰|dk�rÀdd l‰ddlm‰  t ‡ ‡‡fdd„ˆjD ƒƒ‰t |ˆ¡ d S )Né   rS   ZInt64)Údtypeé   g      ø?g      @ZFloat64g       @TFÚaÚbÚc)rc   rd   re   ÚdÚeÚfÚgÚhÚpythonÚpyarrow©Úindexzmode.string_storage©Údtype_backendr   Úboolean)ÚArrowExtensionArrayc                    s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Zfrom_pandas)Úarray)Ú.0Úcol©rr   ÚexpectedÚpar   r   Ú
<dictcomp>¼   s   ÿ z3TestReadHtml.test_dtype_backend.<locals>.<dictcomp>)r   r   rT   Únanr   rs   Zobject_r
   r<   Zimportorskipr   r[   ÚpdZoption_contextr   rl   Zpandas.arraysrr   Úcolumnsr+   r,   )rM   Zstring_storagerp   r\   Zstring_arrayZstring_array_nar]   Úresultr   rv   r   Útest_dtype_backend�   sP    øÿ
øÿ
þÿzTestReadHtml.test_dtype_backendúThttps://www.fdic.gov/resources/resolutions/bank-failures/failed-bank-list/index.html)rC   Zcheck_before_testc                 C   s.   d}| j |dd�}| j |dd�}t||ƒ d S )Nr   úFirst Federal Bank of Floridar5   úMetcalf BankrH   ©rM   rC   Údf1Údf2r   r   r   Útest_banklist_urlÄ   s    	ýþzTestReadHtml.test_banklist_urlú\https://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/html/spam.htmlc                 C   s.   d}| j |dd�}| j |dd�}t||ƒ d S )Nr†   ú	.*Water.*r5   ÚUnitrH   r‚   r   r   r   Útest_spam_urlÛ   s
    
ÿzTestReadHtml.test_spam_urlc                 C   s6   | j |dddid�}| j |dddid�}t||ƒ d S )Nz.*Florida.*ÚidÚtable©r6   rW   r�   rH   )rM   rP   rƒ   r„   r   r   r   Útest_banklistí   s    zTestReadHtml.test_banklistc                 C   sV   | j |dd�}| j |dd�}t||ƒ |d jd dks<t‚|d jd dksRt‚d S )Nr‡   r5   rˆ   r   ©r   r   Ú
ProximatesZNutrient)r   r1   Úilocr'   r|   ©rM   rN   rƒ   r„   r   r   r   Ú	test_spamô   s
    
zTestReadHtml.test_spamc                 C   s&   |   |¡}|D ]}t|tƒst‚qd S r    ©r   r!   r   r'   )rM   rN   Údfsr\   r   r   r   Útest_spam_no_matchü   s    
zTestReadHtml.test_spam_no_matchc                 C   s.   | j |ddid�}|D ]}t|tƒst‚qd S )NrŠ   r‹   )rW   r“   )rM   rP   r”   r\   r   r   r   Útest_banklist_no_match  s    z#TestReadHtml.test_banklist_no_matchc                 C   s4   | j |ddd�d }|jd dks&t‚|jr0t‚d S )Nr‡   rb   ©r6   Úheaderr   r�   )r   r|   r'   r-   )rM   rN   r\   r   r   r   Útest_spam_header  s    zTestReadHtml.test_spam_headerc                 C   s.   | j |ddd�}| j |ddd�}t||ƒ d S ©Nr‡   r`   ©r6   Úskiprowsrˆ   rH   r‘   r   r   r   Útest_skiprows_int  s    zTestReadHtml.test_skiprows_intc                 C   s6   | j |dtdƒd�}| j |dtdƒd�}t||ƒ d S ©Nr‡   rb   r›   rˆ   )r   Úranger1   r‘   r   r   r   Útest_skiprows_range  s    z TestReadHtml.test_skiprows_rangec                 C   s6   | j |dddgd�}| j |dddgd�}t||ƒ d S ©Nr‡   r`   rb   r›   rˆ   rH   r‘   r   r   r   Útest_skiprows_list  s    zTestReadHtml.test_skiprows_listc                 C   s6   | j |dddhd�}| j |dddhd�}t||ƒ d S r¡   rH   r‘   r   r   r   Útest_skiprows_set  s    zTestReadHtml.test_skiprows_setc                 C   s.   | j |ddd�}| j |ddd�}t||ƒ d S rš   rH   r‘   r   r   r   Útest_skiprows_slice#  s    z TestReadHtml.test_skiprows_slicec                 C   s6   | j |dtdƒd�}| j |dtdƒd�}t||ƒ d S rž   ©r   Úslicer1   r‘   r   r   r   Útest_skiprows_slice_short)  s    z&TestReadHtml.test_skiprows_slice_shortc                 C   s<   | j |dtddƒd�}| j |dtdddƒd�}t||ƒ d S )	Nr‡   rb   é   r›   rˆ   rR   r`   éÿÿÿÿr¥   r‘   r   r   r   Útest_skiprows_slice_long/  s    z%TestReadHtml.test_skiprows_slice_longc                 C   s:   | j |dt d¡d�}| j |dt d¡d�}t||ƒ d S rž   )r   rT   Zaranger1   r‘   r   r   r   Útest_skiprows_ndarray5  s    z"TestReadHtml.test_skiprows_ndarrayc              	   C   s.   t jtdd�� | j|ddd� W 5 Q R X d S )Nz%is not a valid type for skipping rowsr5   r‡   Zasdfr›   )r<   r=   Ú	TypeErrorr   )rM   rN   r   r   r   Útest_skiprows_invalid;  s    z"TestReadHtml.test_skiprows_invalidc                 C   s.   | j |ddd�}| j |ddd�}t||ƒ d S ©Nr‡   r   ©r6   rG   rˆ   rH   r‘   r   r   r   Ú
test_index?  s    zTestReadHtml.test_indexc                 C   s2   | j |dddd�}| j |dddd�}t||ƒ d S ©Nr‡   r`   r   )r6   r˜   rG   rˆ   rH   r‘   r   r   r   Útest_header_and_index_no_typesD  s    z+TestReadHtml.test_header_and_index_no_typesc                 C   s2   | j |dddd�}| j |dddd�}t||ƒ d S r±   rH   r‘   r   r   r   Ú test_header_and_index_with_typesI  s    z-TestReadHtml.test_header_and_index_with_typesc                 C   s.   | j |ddd�}| j |ddd�}t||ƒ d S r®   rH   r‘   r   r   r   Útest_infer_typesN  s    zTestReadHtml.test_infer_typesc              	   C   sr   t |dd��}t| ¡ ƒ}W 5 Q R X t |dd��}t| ¡ ƒ}W 5 Q R X | j|dd�}| j|dd�}t||ƒ d S ©NzUTF-8)Úencodingr‡   r5   rˆ   )Úopenr   Úreadr   r1   )rM   rN   rh   Údata1Údata2rƒ   r„   r   r   r   Útest_string_ioT  s    zTestReadHtml.test_string_ioc              	   C   sJ   t |dd��}| ¡ }W 5 Q R X | j|dd�}| j|dd�}t||ƒ d S rµ   )r·   r¸   r   r1   )rM   rN   rh   r   rƒ   r„   r   r   r   Útest_string_  s
    zTestReadHtml.test_stringc              	   C   sZ   t |dd��}| j|dd�}W 5 Q R X t |dd��}| j|dd�}W 5 Q R X t||ƒ d S rµ   )r·   r   r1   )rM   rN   rh   rƒ   r„   r   r   r   Útest_file_likeh  s
    zTestReadHtml.test_file_likec              	   C   s,   t jtdd�� | jddd� W 5 Q R X d S )Nz#urlopen error unknown url type: gitr5   zgit://github.comr‡   )r<   r=   r   r   ©rM   r   r   r   Útest_bad_url_protocolq  s    z"TestReadHtml.test_bad_url_protocolc              	   C   s4   d}t jttf|d�� | jddd� W 5 Q R X d S )NzNName or service not known|Temporary failure in name resolution|No tables foundr5   zhttp://www.a23950sdfa908sd.comr‡   )r<   r=   r   rB   r   ©rM   r0   r   r   r   Útest_invalid_urlw  s    ÿzTestReadHtml.test_invalid_urlc                 C   sN   |}| j ttj |¡ƒdddid�}t|tƒs2t‚|D ]}t|tƒs6t‚q6d S )NZFirstrŠ   r‹   rŒ   )	r   r   ÚosÚpathÚabspathr!   Úlistr'   r   ©rM   rP   rC   r”   r\   r   r   r   Útest_file_url‚  s      ÿzTestReadHtml.test_file_urlc              	   C   s6   |}t jtdd�� | j|dddid� W 5 Q R X d S )NzNo tables foundr5   r€   rŠ   Z	tasdfablerŒ   rA   )rM   rP   rC   r   r   r   Útest_invalid_table_attrsŒ  s      ÿz%TestReadHtml.test_invalid_table_attrsc                 K   s   | j |fdddidœ|—ŽS )NÚMetcalfrŠ   r‹   rŒ   r   )rM   rÃ   r/   r   r   r   Ú
_bank_data”  s    zTestReadHtml._bank_datac                 C   s*   | j |ddgd�d }t|jtƒs&t‚d S )Nr   r`   ©r˜   ©rÊ   r!   r|   r   r'   ©rM   rP   r\   r   r   r   Útest_multiindex_header—  s    z#TestReadHtml.test_multiindex_headerc                 C   s*   | j |ddgd�d }t|jtƒs&t‚d S )Nr   r`   ©rG   )rÊ   r!   rn   r   r'   rÍ   r   r   r   Útest_multiindex_indexœ  s    z"TestReadHtml.test_multiindex_indexc                 C   s@   | j |ddgddgd�d }t|jtƒs,t‚t|jtƒs<t‚d S )Nr   r`   )r˜   rG   )rÊ   r!   r|   r   r'   rn   rÍ   r   r   r   Útest_multiindex_header_index¡  s    z)TestReadHtml.test_multiindex_header_indexc                 C   s,   | j |ddgdd�d }t|jtƒs(t‚d S ©Nr   r`   )r˜   rœ   rÌ   rÍ   r   r   r   Ú&test_multiindex_header_skiprows_tuples§  s    z3TestReadHtml.test_multiindex_header_skiprows_tuplesc                 C   s,   | j |ddgdd�d }t|jtƒs(t‚d S rÒ   rÌ   rÍ   r   r   r   Útest_multiindex_header_skiprows¬  s    z,TestReadHtml.test_multiindex_header_skiprowsc                 C   sB   | j |ddgddgdd�d }t|jtƒs.t‚t|jtƒs>t‚d S )Nr   r`   )r˜   rG   rœ   )rÊ   r!   rn   r   r'   r|   rÍ   r   r   r   Ú%test_multiindex_header_index_skiprows±  s       ÿþz2TestReadHtml.test_multiindex_header_index_skiprowsc                 C   sZ   |}| j ttj |¡ƒt t d¡¡ddid�}t|tƒs>t	‚|D ]}t|t
ƒsBt	‚qBd S )NZFloridarŠ   r‹   rŒ   )r   r   rÂ   rÃ   rÄ   ÚreÚcompiler!   rÅ   r'   r   rÆ   r   r   r   Útest_regex_idempotency¹  s    ýz#TestReadHtml.test_regex_idempotencyc              	   C   s2   d}t jt|d�� | j|ddd� W 5 Q R X d S )Nz\(you passed a negative value\)r5   ZWaterr©   r›   rA   ©rM   rN   r0   r   r   r   Útest_negative_skiprowsÅ  s    z#TestReadHtml.test_negative_skiprowsúhttps://docs.python.org/2/c                 C   s&   d}| j |dd�}t|ƒdks"t‚d S )NrÛ   ÚPythonr5   r`   ©r   r&   r'   )rM   rC   r”   r   r   r   Útest_multiple_matchesÊ  s    z"TestReadHtml.test_multiple_matchesc                 C   s<   d}| j |dd�}dd„ |D ƒ}t|ƒtddgƒks8t‚d S )NrÛ   rÜ   r5   c                 S   s   g | ]}|j d  dd… ‘qS )rŽ   r   rR   )r�   )rt   r\   r   r   r   Ú
<listcomp>Ö  s     z7TestReadHtml.test_python_docs_table.<locals>.<listcomp>ZRepoZWhat)r   Úsortedr'   )rM   rC   r”   Úzzr   r   r   Útest_python_docs_tableÑ  s    z#TestReadHtml.test_python_docs_tablec                 C   s"   d}|   |¡}t|ƒdkst‚dS )z@
        Make sure that read_html ignores empty tables.
        aà  
            <table>
                <thead>
                    <tr>
                        <th>A</th>
                        <th>B</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1</td>
                        <td>2</td>
                    </tr>
                </tbody>
            </table>
            <table>
                <tbody>
                </tbody>
            </table>
        r`   NrÝ   )rM   r7   r}   r   r   r   Útest_empty_tablesÙ  s    
zTestReadHtml.test_empty_tablesc                 C   s:   |   d¡d }tddgddggddgd	�}t ||¡ d S )
NaÎ  <table>
            <thead>
                <tr>
                    <th>A</th>
                    <th>B</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1</td>
                    <td>2</td>
                </tr>
            </tbody>
            <tbody>
                <tr>
                    <td>3</td>
                    <td>4</td>
                </tr>
            </tbody>
        </table>r   r`   rb   rS   rR   ÚAÚB©r   r|   ©r   r   r+   r,   ©rM   r}   rw   r   r   r   Útest_multiple_tbodyô  s    ÿëz TestReadHtml.test_multiple_tbodyc                 C   s0   |   d¡d }tddidgd�}t ||¡ dS )zt
        Don't fail with bs4 when there is a header and only one column
        as described in issue #9178
        a3  <table>
                <thead>
                    <tr>
                        <th>Header</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>first</td>
                    </tr>
                </tbody>
            </table>r   ÚHeaderÚfirst©r   rn   Nrç   rè   r   r   r   Útest_header_and_one_column  s    ÿóz'TestReadHtml.test_header_and_one_columnc                 C   s8   |   d¡d }tdddggdddgd	�}t ||¡ d
S )zK
        Ensure parser adds <tr> within <thead> on malformed HTML.
        aœ  <table>
            <thead>
                <tr>
                    <th>Country</th>
                    <th>Municipality</th>
                    <th>Year</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Ukraine</td>
                    <th>Odessa</th>
                    <td>1944</td>
                </tr>
            </tbody>
        </table>r   ZUkraineZOdessaé˜  ZCountryZMunicipalityZYearræ   Nrç   rè   r   r   r   Útest_thead_without_tr*  s    ÿï
þz"TestReadHtml.test_thead_without_trc                 C   s†   d}t ddggddgd�}t ddgddggddgd�}|jd	d
�}|jdd
�}|  |¡d }|  |¡d }t ||¡ t ||¡ dS )zh
        Make sure that read_html reads tfoot, containing td or th.
        Ignores empty tfoot
        a†  <table>
            <thead>
                <tr>
                    <th>A</th>
                    <th>B</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>bodyA</td>
                    <td>bodyB</td>
                </tr>
            </tbody>
            <tfoot>
                {footer}
            </tfoot>
        </table>ZbodyAZbodyBrä   rå   ræ   ZfootAZfootBÚ )Úfooterz%<tr><td>footA</td><th>footB</th></tr>r   N)r   rY   r   r+   r,   )rM   Zdata_templateZ	expected1Z	expected2r¹   rº   Zresult1Zresult2r   r   r   Útest_tfoot_readH  s     ÿzTestReadHtml.test_tfoot_readc                 C   s4   | j ddd�d }tddggdd�}t ||¡ d S )Na
  
            <table>
                <tr>
                    <td>S</td>
                    <td>I</td>
                </tr>
                <tr>
                    <td>text</td>
                    <td>1944</td>
                </tr>
            </table>
        r   rË   Útextrî   )ÚSÚI©r|   rç   rè   r   r   r   Ú&test_parse_header_of_non_string_columnn  s    óòz3TestReadHtml.test_parse_header_of_non_string_columnc              
      sÖ   ddl m‰  ‡ fdd„}| j|dddid�d }t|d	d
ddƒttdœd�}|j|jks\t‚ddddddddddg
}dddddddd d!d"g
}| |¡ ||¡}| |¡}	|}
d#d$g}|
|  	t
¡|
|< t |
|	¡ d S )%Nr   ©Ú_remove_whitespacec                    s(   z
ˆ | ƒW S  t k
r"   |  Y S X d S r    )ÚAttributeError©r"   rø   r   r   Útry_remove_ws‰  s    
z8TestReadHtml.test_banklist_header.<locals>.try_remove_wsrÉ   rŠ   r‹   rŒ   r   r   Úcsvzbanklist.csv)úUpdated DateúClosing Date©Ú
convertersz,First Vietnamese American Bank In Vietnamesez"Westernbank Puerto Rico En Espanolz*R-G Premier Bank of Puerto Rico En EspanolzEurobank En EspanolzSanderson State Bank En EspanolzLWashington Mutual Bank (Including its subsidiary Washington Mutual Bank FSB)zSilver State Bank En Espanolz%AmTrade International Bank En EspanolzHamilton Bank, NA En Espanolz6The Citizens Savings Bank Pioneer Community Bank, Inc.zFirst Vietnamese American BankzWesternbank Puerto RicozR-G Premier Bank of Puerto RicoZEurobankzSanderson State BankzWashington Mutual BankzSilver State BankzAmTrade International BankzHamilton Bank, NAzThe Citizens Savings Bankrÿ   rþ   )Úpandas.io.htmlrù   r   r   r   Úshaper'   rX   ÚreplaceÚapplyr   r+   r,   )rM   rP   r   rü   r\   Zground_truthÚoldÚnewZdfnewZgtnewZ	convertedZ	date_colsr   rø   r   Útest_banklist_header…  sH    þõö
z!TestReadHtml.test_banklist_headerc              	   C   sX   d}t |ƒ�}| ¡ }W 5 Q R X ||ks,t‚| j|dddid�d }|| ¡ ksTt‚d S )NzGold CanyonrŠ   r‹   rŒ   r   )r·   r¸   r'   r   Z	to_string)rM   rP   Úgcrh   Zraw_textr\   r   r   r   Útest_gold_canyonµ  s    
ÿzTestReadHtml.test_gold_canyonc                 C   s4   | j ddd�d }| j ddd�d }t ||¡ d S )Na�  <table>
                        <thead>
                            <tr style="text-align: right;">
                            <th></th>
                            <th>C_l0_g0</th>
                            <th>C_l0_g1</th>
                            <th>C_l0_g2</th>
                            <th>C_l0_g3</th>
                            <th>C_l0_g4</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                            <th>R_l0_g0</th>
                            <td> 0.763</td>
                            <td> 0.233</td>
                            <td> nan</td>
                            <td> nan</td>
                            <td> nan</td>
                            </tr>
                            <tr>
                            <th>R_l0_g1</th>
                            <td> 0.244</td>
                            <td> 0.285</td>
                            <td> 0.392</td>
                            <td> 0.137</td>
                            <td> 0.222</td>
                            </tr>
                        </tbody>
                    </table>r   rÏ   a¸  <table>
                    <thead>
                        <tr style="text-align: right;">
                        <th></th>
                        <th>C_l0_g0</th>
                        <th>C_l0_g1</th>
                        <th>C_l0_g2</th>
                        <th>C_l0_g3</th>
                        <th>C_l0_g4</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                        <th>R_l0_g0</th>
                        <td> 0.763</td>
                        <td> 0.233</td>
                        </tr>
                        <tr>
                        <th>R_l0_g1</th>
                        <td> 0.244</td>
                        <td> 0.285</td>
                        <td> 0.392</td>
                        <td> 0.137</td>
                        <td> 0.222</td>
                        </tr>
                    </tbody>
                 </table>)r   r+   r,   )rM   rw   r}   r   r   r   Útest_different_number_of_colsÁ  s    á à"äãz*TestReadHtml.test_different_number_of_colsc                 C   s8   |   d¡d }tdddggdddgd	�}t ||¡ d S )
NaZ  
            <table>
                <tr>
                    <th>A</th>
                    <th colspan="1">B</th>
                    <th rowspan="1">C</th>
                </tr>
                <tr>
                    <td>a</td>
                    <td>b</td>
                    <td>c</td>
                </tr>
            </table>
        r   rc   rd   re   rä   rå   ÚCrö   rç   rè   r   r   r   Útest_colspan_rowspan_1  s    ÿñz#TestReadHtml.test_colspan_rowspan_1c                 C   sD   | j ddd�d }tdddddggdd	d
ddgd�}t ||¡ d S )Na…  
            <table>
                <tr>
                    <td colspan="2">X</td>
                    <td>Y</td>
                    <td rowspan="2">Z</td>
                    <td>W</td>
                </tr>
                <tr>
                    <td>A</td>
                    <td colspan="2">B</td>
                    <td>C</td>
                </tr>
            </table>
        r   rË   rä   rå   ÚZr  ÚXzX.1ÚYÚWræ   rç   rè   r   r   r   Ú test_colspan_rowspan_copy_values  s    ðï ÿz-TestReadHtml.test_colspan_rowspan_copy_valuesc                 C   sD   | j ddd�d }tdddddggddddd	gd
�}t ||¡ d S )Na(  
            <table>
                <tr>
                    <td rowspan="2">A</td>
                    <td rowspan="2" colspan="3">B</td>
                    <td>C</td>
                </tr>
                <tr>
                    <td>D</td>
                </tr>
            </table>
        r   rË   rä   rå   ÚDzB.1zB.2r  ræ   rç   rè   r   r   r   Útest_colspan_rowspan_both_not_1=  s    óò ÿz,TestReadHtml.test_colspan_rowspan_both_not_1c                 C   s8   | j ddd�d }tddggddgd�}t ||¡ d S )Nzñ
            <table>
                <tr>
                    <td>A</td>
                    <td rowspan="2">B</td>
                </tr>
                <tr>
                    <td>C</td>
                </tr>
            </table>
        r   rË   r  rå   rä   ræ   rç   rè   r   r   r   Útest_rowspan_at_end_of_row[  s    ôóz'TestReadHtml.test_rowspan_at_end_of_rowc                 C   s>   | j ddd�d }tddgddggddgd�}t ||¡ d S )Nz³
            <table>
                <tr>
                    <td rowspan="3">A</td>
                    <td rowspan="3">B</td>
                </tr>
            </table>
        r   rË   rä   rå   ræ   rç   rè   r   r   r   Útest_rowspan_only_rowsv  s    ÷
öz#TestReadHtml.test_rowspan_only_rowsc                 C   sT   |   d¡d }tddgddggddgddggd�}tdd	gg|d
�}t ||¡ d S )Nam  
            <table>
                <tr>
                    <th>A</th>
                    <th>B</th>
                </tr>
                <tr>
                    <th>a</th>
                    <th>b</th>
                </tr>
                <tr>
                    <td>1</td>
                    <td>2</td>
                </tr>
            </table>
        r   rä   rå   rc   rd   r`   ©ZlevelsÚcodesrb   ræ   ©r   r   r   r+   r,   ©rM   r}   r|   rw   r   r   r   Ú+test_header_inferred_from_rows_with_only_th‰  s    ÿï$z8TestReadHtml.test_header_inferred_from_rows_with_only_thc                 C   sd   t dtddd�iƒ}| ¡ }| j|dgdd�}t ||d ¡ | j|dgdd�}t ||d ¡ d S )NÚdateú1/1/2001é
   ©Zperiodsr`   r   ©Zparse_datesrG   )r   r   r[   r   r+   r,   )rM   r\   rw   r^   r   r   r   Útest_parse_dates_list£  s    z"TestReadHtml.test_parse_dates_listc                 C   sn   t tddd�ƒ}t| dd„ ¡| dd„ ¡dœƒ}| j| ¡ dd	d
gid	d�}td|iƒ}t ||d ¡ d S )Nr  r  r  c                 S   s   t |  ¡ ƒS r    )Ústrr  rû   r   r   r   r$   ¯  r%   z7TestReadHtml.test_parse_dates_combine.<locals>.<lambda>c                 S   s   t |  ¡ ƒS r    )r"  Útimerû   r   r   r   r$   °  r%   )r  r#  Údatetimer`   rb   r   r   )r   r   r   r)   r   r[   r+   r,   )rM   Z	raw_datesr\   r^   Znewdfr   r   r   Útest_parse_dates_combine«  s    þÿ 
 ÿz%TestReadHtml.test_parse_dates_combinec                 C   s°   |ddddƒ}t j |¡s,tt|ƒ› d�ƒ‚t j |¡sJtt|ƒ› d�ƒ‚| j|ddd	�d
 }|jdkslt‚d|jd ks~t‚|d j	t
 	d¡ks–t‚t
 |jd d¡s¬t‚d S )Nr   r   r7   úwikipedia_states.htmlz is not a filez is an empty fileÚArizonar`   r—   r   )é<   é   ÚUnnamedr©   úsq miÚfloat64)r   r+  çHázPN$A)rÂ   rÃ   Úisfiler'   ÚreprÚgetsizer   r  r|   ra   rT   ÚallcloseÚloc©rM   r   r   r}   r   r   r   Útest_wikipedia_states_table¹  s    z(TestReadHtml.test_wikipedia_states_tablec                 C   sp   |ddddƒ}| j |ddd�d }|jdks0t‚d	|jd
 d ksFt‚|jjdksVt‚t |jd d¡slt‚d S )Nr   r   r7   r&  r'  r   r¯   )r(  é   r*  r©   r`   rb   )ZAlaska)zTotal area[2]r+  r-  )r   r  r'   r|   ZnlevelsrT   r1  r2  r3  r   r   r   Ú test_wikipedia_states_multiindexÃ  s    z-TestReadHtml.test_wikipedia_states_multiindexc                 C   sB   | j dddgd�}tddggt ddg¡d	�}t |d |¡ d S )
NaK  
                <table>
                    <thead>
                        <tr><th></th><th></tr>
                        <tr><th>A</th><th>B</th></tr>
                    </thead>
                    <tbody>
                        <tr><td>a</td><td>b</td></tr>
                    </tbody>
                </table>
            r   r`   rË   rc   rd   )úUnnamed: 0_level_0rä   )zUnnamed: 1_level_0rå   rö   )r   r   r   Úfrom_tuplesr+   r,   rè   r   r   r   Ú%test_parser_error_on_empty_header_rowË  s    ôÿþz2TestReadHtml.test_parser_error_on_empty_header_rowc                 C   sL   | j ddd�d }tddidgd�}|d jt d¡ks<t‚t ||¡ d S )	Na�  <html>
            <body>
             <table>
                <thead>
                    <tr>
                        <th>Header</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1100#101</td>
                    </tr>
                </tbody>
            </table>
            </body>
        </html>ú#)Údecimalr   rê   g–C‹lg0‘@rì   r,  )r   r   ra   rT   r'   r+   r,   rè   r   r   r   Útest_decimal_rowsâ  s    ïîzTestReadHtml.test_decimal_rowsÚargFc              	   C   s6   t  d¡}tjt|d�� | j||d� W 5 Q R X d S )Nz–Passing a bool to header is invalid. Use header=None for no header or header=int or list-like of ints to specify the row(s) making up the column namesr5   rË   )rÖ   Úescaper<   r=   r¬   r   )rM   rN   r=  r0   r   r   r   Útest_bool_header_argý  s
    ÿz!TestReadHtml.test_bool_header_argc                 C   s6   | j ddtid�d }tdddgiƒ}t ||¡ d S )Naƒ  <table>
                 <thead>
                   <tr>
                     <th>a</th>
                    </tr>
                 </thead>
                 <tbody>
                   <tr>
                     <td> 0.763</td>
                   </tr>
                   <tr>
                     <td> 0.244</td>
                   </tr>
                 </tbody>
               </table>rc   r   r   z0.763z0.244)r   r"  r   r+   r,   rè   r   r   r   Útest_converters  s    ðïzTestReadHtml.test_convertersc                 C   s6   | j ddgd�d }tddtjgiƒ}t ||¡ d S )Na‚  <table>
                 <thead>
                   <tr>
                     <th>a</th>
                   </tr>
                 </thead>
                 <tbody>
                   <tr>
                     <td> 0.763</td>
                   </tr>
                   <tr>
                     <td> 0.244</td>
                   </tr>
                 </tbody>
               </table>g¬Zd;Ï?)Z	na_valuesr   rc   gÑ"Ûù~jè?©r   r   rT   rz   r+   r,   rè   r   r   r   Útest_na_values!  s    ðïzTestReadHtml.test_na_valuesc                 C   sh   d}t dddgiƒ}| j|dd�d }t ||¡ t dtjtjgiƒ}| j|dd�d }t ||¡ d S )	Naé  <table>
                        <thead>
                            <tr>
                            <th>a</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                            <td> N/A</td>
                            </tr>
                            <tr>
                            <td> NA</td>
                            </tr>
                        </tbody>
                    </table>rc   zN/Ar
   F)Zkeep_default_nar   T)r   r   r+   r,   rT   rz   )rM   Z	html_dataÚexpected_dfÚhtml_dfr   r   r   Útest_keep_default_na:  s    z!TestReadHtml.test_keep_default_nac                 C   s>   |   d¡d }tddgtjtjggddgd�}t ||¡ d S )Nak  
            <table>
                <tr>
                    <th>A</th>
                    <th>B</th>
                </tr>
                <tr>
                    <td>a</td>
                    <td>b</td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                </tr>
            </table>
        r   rc   rd   rä   rå   ræ   rA  rè   r   r   r   Útest_preserve_empty_rowsS  s    ÿï z%TestReadHtml.test_preserve_empty_rowsc                 C   sT   |   d¡d }tddgddggddgddggd�}tdd	gg|d
�}t ||¡ d S )NaU  
            <table>
                <thead>
                    <tr><th></th><th></tr>
                    <tr><th>A</th><th>B</th></tr>
                    <tr><th>a</th><th>b</th></tr>
                </thead>
                <tbody>
                    <tr><td>1</td><td>2</td></tr>
                </tbody>
            </table>
        r   rä   rå   rc   rd   r`   r  rb   ræ   r  r  r   r   r   Ú,test_ignore_empty_rows_when_inferring_headerk  s    ÿó$z9TestReadHtml.test_ignore_empty_rows_when_inferring_headerc                 C   sP   t dddgd�}dddgdd	d
gg|_|jdd�}|  |¡d }t ||¡ d S )N)ZHillaryéD   r  )ZBernieéJ   r  )ZDonaldéE   ÚR)r   r7  ZAgeZPartyÚNamezUnnamed: 1_level_1zUnnamed: 2_level_1Frm   r   )r   r|   r[   r   r+   r,   )rM   rC  r7   rD  r   r   r   Útest_multiple_header_rows€  s    ÿþz&TestReadHtml.test_multiple_header_rowsc                 C   s@   |ddddƒ}| j |dd�}t|tƒs*t‚t|d tƒs<t‚d S )Nr   r   r7   rF   r   rÏ   )r   r!   rÅ   r'   r   )rM   r   rI   r”   r   r   r   Útest_works_on_valid_markup�  s    z'TestReadHtml.test_works_on_valid_markupc                 C   s&   |ddddƒ}| j |dddgd� d S )	Nr   r   r7   rO   r‡   rE   r3   r@   r   )rM   r   rP   r   r   r   Útest_fallback_success“  s    z"TestReadHtml.test_fallback_successc                 C   s:   t ddd�}ttj dd¡|d�}| ¡ }d|ks6t‚d S )Nz
2000-01-01r  r  rR   rm   )r   r   rT   rU   Zrandnr[   r'   )rM   Úrngr\   r}   r   r   r   Útest_to_html_timestamp™  s    z#TestReadHtml.test_to_html_timestampc                 C   s¸   t dddœgƒ}| ¡ }|jdd�}|jdd�}|jdd�}|jdd�}|jdd�}d|ks`t‚||kslt‚||ksxt‚||ks„t‚d	|ks�t‚d
|ksœt‚d|ks¨t‚||ks´t‚d S )Nr`   rb   )rä   rå   T)Úborderr   Fz border="1"z border="2"z border="0"z border)r   r[   r'   )rM   r\   Zout_border_defaultZout_border_trueZout_border_explicit_defaultZout_border_nondefaultZout_border_zeroZout_border_falser   r   r   Útest_to_html_borderless   s    z$TestReadHtml.test_to_html_borderlesszdisplayed_only,exp0,exp1ZfooNzfoo  bar  baz  quxc                 C   sT   t dƒ}| j||d�}t |d |¡ |d k	r@t |d |¡ nt|ƒdksPt‚d S )Na  <html>
          <body>
            <table>
              <tr>
                <td>
                  foo
                  <span style="display:none;text-align:center">bar</span>
                  <span style="display:none">baz</span>
                  <span style="display: none">qux</span>
                </td>
              </tr>
            </table>
            <table style="display: none">
              <tr>
                <td>foo</td>
              </tr>
            </table>
          </body>
        </html>)Údisplayed_onlyr   r`   )r   r   r+   r,   r&   r'   )rM   rT  Zexp0Zexp1r   r”   r   r   r   Útest_displayed_only³  s    	ÿz TestReadHtml.test_displayed_onlyz\ignore:You provided Unicode markup but also provided a value for from_encoding.*:UserWarningc           
   	   C   sô   t j |¡}t j |¡d }| d¡\}}z�t|dƒ�}| j| ¡ |dd� ¡ }W 5 Q R X t|dƒ�"}| jt	| ¡ ƒ|dd� ¡ }W 5 Q R X | j||dd� ¡ }	t
 ||¡ t
 ||	¡ W n4 tk
rî   tƒ rèd|ksàd|krèt ¡  ‚ Y nX d S )Nr   Ú_Úrb)r¶   rG   Z16Z32)rÂ   rÃ   ÚbasenameÚsplitextÚsplitr·   r   r¸   Úpopr   r+   r,   Ú	Exceptionr	   r<   Úskip)
rM   r   Ú	base_pathÚrootrV  r¶   ZfobjZfrom_stringZfrom_file_likeÚfrom_filenamer   r   r   Útest_encodeÚ  s8      ÿ
  ÿ  ÿ
zTestReadHtml.test_encodec              	   C   sj   | j j d¡dkrt d¡ G dd„ dtƒ}|dƒ}|   |¡sBt‚tjtdd�� |   |¡ W 5 Q R X d S )	Nr:   rE   zNot applicable for lxmlc                   @   s   e Zd Zdd„ ZdS )zFTestReadHtml.test_parse_failure_unseekable.<locals>.UnseekableStringIOc                 S   s   dS ©NFr   r¾   r   r   r   Úseekable  s    zOTestReadHtml.test_parse_failure_unseekable.<locals>.UnseekableStringIO.seekableN)Ú__name__Ú
__module__Ú__qualname__rc  r   r   r   r   ÚUnseekableStringIO   s   rg  z?
            <table><tr><td>spam<foobr />eggs</td></tr></table>z#passed a non-rewindable file objectr5   )	r   ÚkeywordsÚgetr<   r]  r   r'   r=   rB   )rM   rg  Úbadr   r   r   Útest_parse_failure_unseekableú  s    
ÿz*TestReadHtml.test_parse_failure_unseekablec                 C   s>   G dd„ dƒ}|dƒ}|dƒ}|   |¡s,t‚|   |¡s:t‚d S )Nc                   @   sJ   e Zd Zddœdd„Zddd„Zdd„ Zd	d
„ Zdd„ Zedœdd„Z	dS )z9TestReadHtml.test_parse_failure_rewinds.<locals>.MockFileN)Úreturnc                 S   s   || _ d| _d S rb  )r   Úat_end)rM   r   r   r   r   Ú__init__  s    zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__init__c                 S   s   | j r
dn| j}d| _ |S )Nrð   T)rm  r   )rM   Úsizer   r   r   r   r¸     s    z>TestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.readc                 S   s
   d| _ d S rb  )rm  )rM   Úoffsetr   r   r   Úseek  s    z>TestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.seekc                 S   s   dS )NTr   r¾   r   r   r   rc    s    zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.seekablec                 S   s   d S r    r   r¾   r   r   r   Ú__next__"  s    zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__next__c                 S   s   | S r    r   r¾   r   r   r   Ú__iter__%  s    zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__iter__)N)
rd  re  rf  rn  r¸   rq  rc  rr  r   rs  r   r   r   r   ÚMockFile  s   
rt  z/<table><tr><td>spam<br />eggs</td></tr></table>z2<table><tr><td>spam<foobr />eggs</td></tr></table>)r   r'   )rM   rt  Zgoodrj  r   r   r   Útest_parse_failure_rewinds  s
    z'TestReadHtml.test_parse_failure_rewindsc                 C   s�   G dd„ dt jƒ}ttjjƒ |ddddƒ}|| j|fd�}|| j|fd�}| ¡  | ¡  | ¡ s\| ¡ rnq\d |j	  kr†|j	ksŒn t
‚d S )Nc                       s   e Zd Z‡ fdd„Z‡  ZS )z@TestReadHtml.test_importcheck_thread_safety.<locals>.ErrorThreadc              
      sB   zt ƒ  ¡  W n( tk
r6 } z
|| _W 5 d }~X Y nX d | _d S r    )ÚsuperÚrunr\  Úerr)rM   rx  ©Ú	__class__r   r   rw  5  s
    zDTestReadHtml.test_importcheck_thread_safety.<locals>.ErrorThread.run)rd  re  rf  rw  Ú__classcell__r   r   ry  r   ÚErrorThread4  s   r|  r   r   r7   rF   )Útargetr.   )Ú	threadingÚThreadr   Úpandasr   r7   r   ÚstartÚis_aliverx  r'   )rM   r   r|  rI   Zhelper_thread1Zhelper_thread2r   r   r   Útest_importcheck_thread_safety0  s    
z+TestReadHtml.test_importcheck_thread_safetyc                 C   sB   |ddddƒ}t |ƒ}|  |¡d }|  |¡d }t ||¡ d S )Nr   r   r7   r8   r   )r   r   r+   r,   )rM   r   Zfile_path_stringÚ	file_pathrƒ   r„   r   r   r   Útest_parse_path_objectK  s
    z#TestReadHtml.test_parse_path_objectc                 C   s0   |   d¡d }tdggdgd�}t ||¡ d S )NzÓ
            <table>
                <tr>
                    <th>A</th>
                </tr>
                <tr>
                    <td>word1<br>word2</td>
                </tr>
            </table>
        r   zword1 word2rä   ræ   rç   rè   r   r   r   Útest_parse_br_as_spaceS  s    ÿõz#TestReadHtml.test_parse_br_as_spacer(   Úbodyr˜   rñ   c           	      C   sÚ   d}dddgdddgdd	dgd
ddgddd gddd gdœ}|d }|d }|d }|dkrt|d }|d }|d }n4|dkr†|d }n"|dkr˜|d }n|dkr¨|d }| j ||d�d }t||g|d�}t ||¡ d S )Naì  
          <table>
            <tr>
              <th>HTTP</th>
              <th>FTP</th>
              <th><a href="https://en.wiktionary.org/wiki/linkless">Linkless</a></th>
            </tr>
            <tr>
              <td><a href="https://en.wikipedia.org/">Wikipedia</a></td>
              <td>SURROUNDING <a href="ftp://ftp.us.debian.org/">Debian</a> TEXT</td>
              <td>Linkless</td>
            </tr>
            <tfoot>
              <tr>
                <td><a href="https://en.wikipedia.org/wiki/Page_footer">Footer</a></td>
                <td>
                  Multiple <a href="1">links:</a> <a href="2">Only first captured.</a>
                </td>
              </tr>
            </tfoot>
          </table>
          ÚHTTPÚFTPÚLinkless)rˆ  N)r‰  N)rŠ  z'https://en.wiktionary.org/wiki/linklessÚ	WikipediaúSURROUNDING Debian TEXT)r‹  zhttps://en.wikipedia.org/)rŒ  zftp://ftp.us.debian.org/)rŠ  NÚFooterú$Multiple links: Only first captured.)r�  z)https://en.wikipedia.org/wiki/Page_footer)rŽ  Ú1)Úhead_ignoreÚhead_extractÚbody_ignoreÚbody_extractÚfooter_ignoreÚfooter_extractr’  r”  r�  r(   r“  r•  r‘  r‡  rñ   r˜   ©Zextract_linksr   rö   rç   )	rM   r=  Zgh_13141_dataZgh_13141_expectedZdata_expZfoot_expZhead_expr}   rw   r   r   r   Útest_extract_linksf  sH    ýýýýî


zTestReadHtml.test_extract_linksc              	   C   s.   d}t jt|d�� t|dd� W 5 Q R X d S )NzY`extract_links` must be one of {None, "header", "footer", "body", "all"}, got "incorrect"r5   Z	incorrectr–  rA   rÙ   r   r   r   Útest_extract_links_badª  s    ÿz#TestReadHtml.test_extract_links_badc                 C   s2   d}| j |dd�d }tdggƒ}t ||¡ d S )Nz¦
        <table>
          <tr>
            <td>
              <a href='https://google.com'>Google.com</a>
            </td>
          </tr>
        </table>
        r(   r–  r   )z
Google.comzhttps://google.comrç   )rM   r   r}   rw   r   r   r   Ú test_extract_links_all_no_header²  s    	z-TestReadHtml.test_extract_links_all_no_headerc              	   C   s.   d}t jt|d�� tddd� W 5 Q R X d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r5   ÚtestÚnumpyro   rA   rÀ   r   r   r   Útest_invalid_dtype_backendÁ  s    ÿz'TestReadHtml.test_invalid_dtype_backend)brd  re  rf  r<   ÚfixturerN   rP   rQ   r_   r~   ÚmarkÚnetworkr+   r…   r‰   Zslowr�   r’   r•   r–   r™   r�   r    r¢   r£   r¤   r§   rª   r«   r­   r°   r²   r³   r´   r»   r¼   r½   r¿   rÁ   rÇ   rÈ   rÊ   rÎ   rÐ   rÑ   rÓ   rÔ   rÕ   rØ   rÚ   rÞ   râ   rã   ré   rí   rï   rò   r÷   r  r
  r  r  r  r  r  r  r  r!  r%  r4  r6  r9  r<  Úparametrizer?  r@  rB  rE  rF  rG  rM  rN  rO  rQ  rS  r   rU  Úfilterwarningsra  rk  ru  rƒ  r…  r†  r—  r˜  r™  rœ  r   r   r   r   rK   h   s
  



7ûû

		
	







&
/
D!



þþ
 ÿ
"

CrK   )8Ú	functoolsr   Ú	importlibr   r   r   r   rÂ   Úpathlibr   rÖ   r~  Útypingr   Úurllib.errorr   r›  rT   r<   Zpandas.compatr	   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdr€  r{   r
   r   r   r   r   r   r   r   Zpandas._testingZ_testingr+   Zpandas.core.arraysr   r   Zpandas.io.commonr   r  r   r�  r   r1   Z
skip_if_nor?   rD   rJ   rž  r   r   rK   r   r   r   r   Ú<module>   sV   (
üÿ
	þþ