
    ds              
       (   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c 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-        g d          d             Z.d Z/ ej0        d           ej0        d          d                         Z1d Z2 ej0        d           ej0        d           ej0        d          d                                     Z3ej4        5                    d ej6        d ej0        d           ej0        d          g           ej6        d ej0        d                    g           G 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_html)zchinese_utf-16.htmlzchinese_utf-32.htmlzchinese_utf-8.htmlzletz_latin1.html)paramsc                 (     |ddd| j                   S )z6Parametrized fixture for HTML encoding test filenames.iodatahtml_encoding)param)requestdatapaths     U/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/tests/io/test_html.pyhtml_encoding_filer!   *   s     8D&/7=AAA    c                 n   t          |           t          |          k    s*J dt          |            dt          |                       d}t          t          d | |                    }|s
J |            t          | |          D ],\  }}t	          j        ||g|R i | |j        r
J d            -d S )Nz*lists are not of equal size len(list1) == z, len(list2) == z$not all list elements are DataFramesc                 V    t          | t                    ot          |t                    S N)
isinstancer   )xys     r    <lambda>z(assert_framelist_equal.<locals>.<lambda>@   s    Ay11NjI6N6N r"   zframes are both empty)lenallmapziptmassert_frame_equalempty)list1list2argskwargsmsgboth_framesframe_iframe_js           r    assert_framelist_equalr9   7   s    u::U###	&U	& 	&U	& 	& $##
 1CNN	
 	
 K u-- : :
gw@@@@@@@=99"99999: :r"   bs4html5libc           	          dd l }|                     |dd           t          j        t          d          5  t           |dddd	          d
           d d d            d S # 1 swxY w Y   d S )Nr   __version__z4.2zPandas requires versionmatchr   r   html	spam.htmlr:   flavor)r:   setattrpytestraisesImportErrorr   )monkeypatchr   r:   s      r    test_bs4_version_failsrI   K   s     JJJ]E222	{*C	D	D	D M M((4==eLLLLM M M M M M M M M M M M M M M M M Ms   A""A&)A&c                      d} d}d|z   dz   }t          j        t          |          5  t          | d|           d d d            d S # 1 swxY w Y   d S )Nz
google.comzinvalid flavorz\{z \} is not a valid set of flavorsr>   googler?   rC   rE   rF   
ValueErrorr   )urlrC   r5   s      r    test_invalid_flavorrP   U   s    
CF
&.>
>C	z	-	-	- 6 6#Xf55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   AAAlxmlc                      | dddd          }t          |ddg          }t          |ddg          }t          ||           d S )	Nr   r   r@   valid_markup.htmlr   rQ   )	index_colrC   r:   r   r9   )r   filenamedfs_lxmldfs_bs4s       r    test_same_orderingrY   ^   s\     xff.ABBHQx@@@HAug>>>G8W-----r"   rC   )marksc            	          e Zd Zej        d             Zej        d             Z ej        d          d             Zd Zd Z	ej
        j         ej        dd	          d
                         Zej
        j         ej        dd	          d                         Zej
        j        d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$ej
        j        ej        d"                         Z%ej
        j        ej
        j        ej        d#                                     Z&ej
        j        d$             Z'ej
        j        d%             Z(d& Z)ej
        j        d'             Z*ej
        j        d(             Z+ej
        j        d)             Z,ej
        j        d*             Z-ej
        j        d+             Z.ej
        j        d,             Z/ej
        j        d-             Z0d. Z1ej
        j         ej        d/d	          d0                         Z2ej
        j         ej        d/d	          d1                         Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9ej
        j        d8             Z:ej
        j        d9             Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHej
        I                    dGddHg          dI             ZJdJ ZKdK ZLdL ZMdM ZNdN ZOdO ZPdP ZQej
        j        dQ             ZRdR ZSdS ZTej
        I                    dTd eUdUg          dVfdH eUdWg           eUdUg          fg          dX             ZVej
        W                    dY          dZ             ZXd[ ZYd\ ZZej
        j        d]             Z[d^ Z\d_ Z]ej
        I                    dGg d`          da             Z^db Z_dc Z`dd ZadVS )eTestReadHtmlc                      |dddd          S )Nr   r   r@   rA    selfr   s     r    	spam_datazTestReadHtml.spam_datap   s    xffk:::r"   c                      |dddd          S )Nr   r   r@   banklist.htmlr^   r_   s     r    banklist_datazTestReadHtml.banklist_datat   s    xffo>>>r"   T)autousec              #   H   K   t          t          |          | _        d V  d S )NrB   )r   r   )r`   rC   s     r    set_defaultszTestReadHtml.set_defaultsx   s'       6:::r"   c                 ,   t          j        ddd dd                              dj                                      t
                    }|                                }|                     |ddid	
          d	         }t          j        ||           d S )N      c                  >    t           j                                        S r%   )nprandomrand)r3   s    r    r)   z2TestReadHtml.test_to_html_compat.<locals>.<lambda>   s    )9)9 r"   F)
data_gen_fc_idx_namesr_idx_namesz{:.3f}class	dataframer   )attrsrT   )	r.   makeCustomDataframeapplymapformatastypefloatto_htmlr   r/   )r`   dfoutress       r    test_to_html_compatz TestReadHtml.test_to_html_compat}   s    "99!!   Xho&&vve}} 	 jjllnnS+(>!nLLQO
c2&&&&&r"   c                   	
 t          t          dt          j        dgd          t          g dd          t          dt          j        dgd          t          g d	d          g d
g dg dg dd          }|dk    ret	          t          j        g dt          j                            }t	          t          j        ddt          gt          j                            }n\t          j	        d          
t          
                    g d                    }t          
                    g d                    }|                    d          }t          j        d|          5  |                     ||          d         }d d d            n# 1 swxY w Y   t          t          dt          j        dgd          t          g dd          t          dt          j        dgd          t          g d	d          t          ddt          gd          t          g dd          ||d          	|dk    r,dd l
ddlm t          	
fd	j        D                       	t'          j        |	           d S )N   rj   Int64)dtype)r      rj         ?      @Float64)r   g       @r   )TFN)TFTabc)r   r   N)r   r   r   defghpythonr   r   pyarrowFindexzmode.string_storagedtype_backendr   Tboolean)ArrowExtensionArrayc           	      ^    i | ])}|                      |         d                     *S )T)from_pandas)array).0colr   expectedpas     r    
<dictcomp>z3TestReadHtml.test_dtype_backend.<locals>.<dictcomp>   sL        ,,RXXhsmQUX-V-VWW  r"   )r   r   rl   nanr   r   object_r   rE   importorskipr   rz   pdoption_contextr   r   pandas.arraysr   columnsr.   r/   )r`   string_storager   r{   string_arraystring_array_nar|   resultr   r   r   s           @@@r    test_dtype_backendzTestReadHtml.test_dtype_backend   s   QN':::IIIW555S"&#.i@@@OOO9===(((((($__%%%	 	
 
 X%%&rxrz'R'R'RSSL)"(Cb>*T*T*TUUOO $Y//B+BHH___,E,EFFL.rxx8H8H8H/I/IJJOjjuj%%4nEE 	I 	I^^C}^EEaHF	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I QN':::IIIW555S"&#.i@@@OOO9===T5"-Y???///yAAA!$	 	
 
 I%%    999999      '/   H 	fh/////s   0FF!FThttps://www.fdic.gov/resources/resolutions/bank-failures/failed-bank-list/index.html)rO   check_before_testc                     d}|                      |d          }|                      |d          }t          ||           d S )Nr   First Federal Bank of Floridar>   Metcalf BankrU   r`   rO   df1df2s       r    test_banklist_urlzTestReadHtml.test_banklist_url   s`     enn1  
 
 nn   
 

 	sC(((((r"   \https://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/html/spam.htmlc                     d}|                      |d          }|                      |d          }t          ||           d S )Nr   	.*Water.*r>   UnitrU   r   s       r    test_spam_urlzTestReadHtml.test_spam_url   sN    2 	 nnSn44nnSn//sC(((((r"   c                     |                      |dddi          }|                      |dddi          }t          ||           d S )Nz.*Florida.*idtabler?   rt   r   rU   )r`   rd   r   r   s       r    test_banklistzTestReadHtml.test_banklist   sN    nn]-gnWWnn].wnXXsC(((((r"   c                     |                      |d          }|                      |d          }t          ||           |d         j        d         dk    sJ |d         j        d         dk    sJ d S )Nr   r>   r   r   r   r   
ProximatesNutrient)r   r9   ilocr   r`   ra   r   r   s       r    	test_spamzTestReadHtml.test_spam   sz    nnYkn::nnYfn55sC(((1v{4 L00001v~a J......r"   c                 h    |                      |          }|D ]}t          |t                    sJ d S r%   r   r&   r   )r`   ra   dfsr{   s       r    test_spam_no_matchzTestReadHtml.test_spam_no_match   sE    nnY'' 	- 	-Bb),,,,,,	- 	-r"   c                 p    |                      |ddi          }|D ]}t          |t                    sJ d S )Nr   r   )rt   r   )r`   rd   r   r{   s       r    test_banklist_no_matchz#TestReadHtml.test_banklist_no_match  sM    nn]4/nBB 	- 	-Bb),,,,,,	- 	-r"   c                 z    |                      |dd          d         }|j        d         dk    sJ |j        rJ d S )Nr   r   r?   headerr   r   )r   r   r0   )r`   ra   r{   s      r    test_spam_headerzTestReadHtml.test_spam_header  sI    ^^I[^CCAFz!},,,,8r"   c                     |                      |dd          }|                      |dd          }t          ||           d S Nr   r   r?   skiprowsr   rU   r   s       r    test_skiprows_intzTestReadHtml.test_skiprows_int  F    nnYkAnFFnnYfqnAAsC(((((r"   c                     |                      |dt          d                    }|                      |dt          d                    }t          ||           d S Nr   r   r   r   )r   ranger9   r   s       r    test_skiprows_rangez TestReadHtml.test_skiprows_range  R    nnYkE!HHnMMnnYfuQxxnHHsC(((((r"   c                     |                      |dddg          }|                      |dddg          }t          ||           d S Nr   r   r   r   r   rU   r   s       r    test_skiprows_listzTestReadHtml.test_skiprows_list  N    nnYkQFnKKnnYf1vnFFsC(((((r"   c                     |                      |dddh          }|                      |dddh          }t          ||           d S r   rU   r   s       r    test_skiprows_setzTestReadHtml.test_skiprows_set  r   r"   c                     |                      |dd          }|                      |dd          }t          ||           d S r   rU   r   s       r    test_skiprows_slicez TestReadHtml.test_skiprows_slice#  r   r"   c                     |                      |dt          d                    }|                      |dt          d                    }t          ||           d S r   r   slicer9   r   s       r    test_skiprows_slice_shortz&TestReadHtml.test_skiprows_slice_short)  r   r"   c           	          |                      |dt          dd                    }|                      |dt          ddd                    }t          ||           d S )	Nr   r      r   r   ri   r   r   r   s       r    test_skiprows_slice_longz%TestReadHtml.test_skiprows_slice_long/  sX    nnYkE!QKKnPPnnYfuQ2nOOsC(((((r"   c                     |                      |dt          j        d                    }|                      |dt          j        d                    }t          ||           d S r   )r   rl   aranger9   r   s       r    test_skiprows_ndarrayz"TestReadHtml.test_skiprows_ndarray5  sV    nnYkBIaLLnQQnnYfry||nLLsC(((((r"   c                     t          j        t          d          5  |                     |dd           d d d            d S # 1 swxY w Y   d S )Nz%is not a valid type for skipping rowsr>   r   asdfr   )rE   rF   	TypeErrorr   )r`   ra   s     r    test_skiprows_invalidz"TestReadHtml.test_skiprows_invalid;  s    ]9-TVVV 	J 	JNN9K&NIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   AA	Ac                     |                      |dd          }|                      |dd          }t          ||           d S Nr   r   r?   rT   r   rU   r   s       r    
test_indexzTestReadHtml.test_index?  sF    nnYkQnGGnnYfnBBsC(((((r"   c                     |                      |ddd          }|                      |ddd          }t          ||           d S Nr   r   r   )r?   r   rT   r   rU   r   s       r    test_header_and_index_no_typesz+TestReadHtml.test_header_and_index_no_typesD  J    nnYk!qnQQnnYfQ!nLLsC(((((r"   c                     |                      |ddd          }|                      |ddd          }t          ||           d S r   rU   r   s       r     test_header_and_index_with_typesz-TestReadHtml.test_header_and_index_with_typesI  r   r"   c                     |                      |dd          }|                      |dd          }t          ||           d S r   rU   r   s       r    test_infer_typeszTestReadHtml.test_infer_typesN  sF    nnYkQnGGnnYfnBBsC(((((r"   c                    t          |d          5 }t          |                                          }d d d            n# 1 swxY w Y   t          |d          5 }t          |                                          }d d d            n# 1 swxY w Y   |                     |d          }|                     |d          }t	          ||           d S NzUTF-8)encodingr   r>   r   )openr   readr   r9   )r`   ra   r   data1data2r   r   s          r    test_string_iozTestReadHtml.test_string_ioT  s:   )g... 	'!QVVXX&&E	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' )g... 	'!QVVXX&&E	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' nnU+n66nnU&n11sC(((((s#   "A  AA"B

BBc                     t          |d          5 }|                                }d d d            n# 1 swxY w Y   |                     |d          }|                     |d          }t          ||           d S r   )r  r  r   r9   )r`   ra   r   r   r   r   s         r    test_stringzTestReadHtml.test_string_  s    )g... 	!6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 nnTn55nnTn00sC(((((   377c                 &   t          |d          5 }|                     |d          }d d d            n# 1 swxY w Y   t          |d          5 }|                     |d          }d d d            n# 1 swxY w Y   t          ||           d S r   )r  r   r9   )r`   ra   r   r   r   s        r    test_file_likezTestReadHtml.test_file_likeh  s   )g... 	7!..+.66C	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 )g... 	2!..&.11C	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	sC(((((s   6::A66A:=A:c                     t          j        t          d          5  |                     dd           d d d            d S # 1 swxY w Y   d S )Nz#urlopen error unknown url type: gitr>   zgit://github.comr   )rE   rF   r	   r   r`   s    r    test_bad_url_protocolz"TestReadHtml.test_bad_url_protocolq  s     ]8+PQQQ 	B 	BNN-[NAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AAAc                     d}t          j        t          t          f|          5  |                     dd           d d d            d S # 1 swxY w Y   d S )NzNName or service not known|Temporary failure in name resolution|No tables foundr>   zhttp://www.a23950sdfa908sd.comr   )rE   rF   r	   rN   r   r`   r5   s     r    test_invalid_urlzTestReadHtml.test_invalid_urlw  s    
 	 ]Hj1=== 	P 	PNN;;NOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   A

AAc                     |}|                      t          t          j                            |                    dddi          }t          |t                    sJ |D ]}t          |t                    sJ d S )NFirstr   r   r   )r   r   ospathabspathr&   listr   r`   rd   rO   r   r{   s        r    test_file_urlzTestReadHtml.test_file_url  s    nnRW__S1122'$PW  
 
 #t$$$$$ 	- 	-Bb),,,,,,	- 	-r"   c                     |}t          j        t          d          5  |                     |dddi           d d d            d S # 1 swxY w Y   d S )NzNo tables foundr>   r   r   	tasdfabler   rM   )r`   rd   rO   s      r    test_invalid_table_attrsz%TestReadHtml.test_invalid_table_attrs  s    ]:->??? 	 	NN:4BU    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA
A
c                 (     | j         |fdddid|S )NMetcalfr   r   r   r   )r`   r  r4   s      r    
_bank_datazTestReadHtml._bank_data  s'    t~dU)D'?UUfUUUr"   c                 |    |                      |ddg          d         }t          |j        t                    sJ d S )Nr   r   r   r  r&   r   r   r`   rd   r{   s      r    test_multiindex_headerz#TestReadHtml.test_multiindex_header  s>    __]Aq6_::1="*j1111111r"   c                 |    |                      |ddg          d         }t          |j        t                    sJ d S )Nr   r   rT   )r  r&   r   r   r"  s      r    test_multiindex_indexz"TestReadHtml.test_multiindex_index  s>    __]q!f_==a@"(J///////r"   c                     |                      |ddgddg          d         }t          |j        t                    sJ t          |j        t                    sJ d S )Nr   r   )r   rT   )r  r&   r   r   r   r"  s      r    test_multiindex_header_indexz)TestReadHtml.test_multiindex_header_index  s\    __]Aq6aV_LLQO"*j11111"(J///////r"   c                 ~    |                      |ddgd          d         }t          |j        t                    sJ d S Nr   r   )r   r   r!  r"  s      r    &test_multiindex_header_skiprows_tuplesz3TestReadHtml.test_multiindex_header_skiprows_tuples  @    __]Aq6A_FFqI"*j1111111r"   c                 ~    |                      |ddgd          d         }t          |j        t                    sJ d S r*  r!  r"  s      r    test_multiindex_header_skiprowsz,TestReadHtml.test_multiindex_header_skiprows  r,  r"   c                     |                      |ddgddgd          d         }t          |j        t                    sJ t          |j        t                    sJ d S )Nr   r   )r   rT   r   )r  r&   r   r   r   r"  s      r    %test_multiindex_header_index_skiprowsz2TestReadHtml.test_multiindex_header_index_skiprows  sk    __1a&QFQ  
 

 "(J/////"*j1111111r"   c                 @   |}|                      t          t          j                            |                    t          j        t          j        d                    ddi          }t          |t                    sJ |D ]}t          |t                    sJ d S )NFloridar   r   r   )
r   r   r  r  r  recompiler&   r  r   r  s        r    test_regex_idempotencyz#TestReadHtml.test_regex_idempotency  s    nnRW__S1122*RZ	2233/  
 

 #t$$$$$ 	- 	-Bb),,,,,,	- 	-r"   c                     d}t          j        t          |          5  |                     |dd           d d d            d S # 1 swxY w Y   d S )Nz\(you passed a negative value\)r>   Waterr   r   rM   r`   ra   r5   s      r    test_negative_skiprowsz#TestReadHtml.test_negative_skiprows  s    0]:S111 	B 	BNN9GbNAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AAAhttps://docs.python.org/2/c                 b    d}|                      |d          }t          |          dk    sJ d S )Nr:  Pythonr>   r   r   r*   )r`   rO   r   s      r    test_multiple_matchesz"TestReadHtml.test_multiple_matches  s5     +nnSn113xx!||||||r"   c                     d}|                      |d          }d |D             }t          |          t          ddg          k    sJ d S )Nr:  r<  r>   c                 8    g | ]}|j         d          dd         S )r   r   ri   )r   )r   r{   s     r    
<listcomp>z7TestReadHtml.test_python_docs_table.<locals>.<listcomp>  s'    ///RbgdmAaC ///r"   RepoWhat)r   sorted)r`   rO   r   zzs       r    test_python_docs_tablez#TestReadHtml.test_python_docs_table  s[     +nnSn11//3///bzzVVV$455555555r"   c                 ^    d}|                      |          }t          |          dk    sJ 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=  )r`   r@   r   s      r    test_empty_tableszTestReadHtml.test_empty_tables  s9    ( %%6{{ar"   c                     |                      d          d         }t          ddgddggddg	          }t          j        ||           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   r   rj   ri   ABr   r   r   r   r.   r/   r`   r   r   s      r    test_multiple_tbodyz TestReadHtml.test_multiple_tbody  sd     
 
* +. Aq6Aq6"2S#JGGG
fh/////r"   c                     |                      d          d         }t          ddidg          }t          j        ||           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   r   NrM  rN  s      r    test_header_and_one_columnz'TestReadHtml.test_header_and_one_column  sZ    
 
 
  8W"5aSAAA
fh/////r"   c                     |                      d          d         }t          g dgg d          }t          j        ||           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   )UkraineOdessa  )CountryMunicipalityYearrL  NrM  rN  s      r    test_thead_without_trz"TestReadHtml.test_thead_without_tr*  sl     
 
" #& ---.777
 
 

 	fh/////r"   c                    d}t          ddggddg          }t          ddgddggddg          }|                    d	
          }|                    d
          }|                     |          d         }|                     |          d         }t          j        ||           t          j        ||           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>bodyAbodyBrJ  rK  rL  footAfootB )footerz%<tr><td>footA</td><th>footB</th></tr>r   N)r   rw   r   r.   r/   )r`   data_template	expected1	expected2r  r  result1result2s           r    test_tfoot_readzTestReadHtml.test_tfoot_readH  s    
$ Wg$6#7#sLLL	G$w&89C:
 
 
	 $$B$//$$,S$TT..''*..''*
gy111
gy11111r"   c                     |                      dd          d         }t          ddggd          }t          j        ||           d S )Na
  
            <table>
                <tr>
                    <td>S</td>
                    <td>I</td>
                </tr>
                <tr>
                    <td>text</td>
                    <td>1944</td>
                </tr>
            </table>
        r   r   textrX  )SIr   rM  rN  s      r    &test_parse_header_of_non_string_columnz3TestReadHtml.test_parse_header_of_non_string_columnn  sd         
 
   vtn-zBBB
fh/////r"   c                    ddl m fd}|                     |dddi          d         }t           |dd	d
d          t          t          d          }|j        |j        k    sJ g d}g d}|                    |                              ||          }|                    |          }	|}
ddg}|
|                             t                    |
|<   t          j        |
|	           d S )Nr   )_remove_whitespacec                 @    	  |           S # t           $ r | cY S w xY wr%   )AttributeError)r'   rq  s    r    try_remove_wsz8TestReadHtml.test_banklist_header.<locals>.try_remove_ws  s=    ))!,,,!   s   
 r  r   r   r   r   r   csvzbanklist.csv)Updated DateClosing Date
converters)
z,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 RicoEurobankzSanderson State BankzWashington Mutual BankzSilver State BankzAmTrade International BankzHamilton Bank, NAzThe Citizens Savings Bankrw  rv  )pandas.io.htmlrq  r   r   r   shaperv   replaceapplyr   r.   r/   )r`   rd   r   rt  r{   ground_trutholdnewdfnewgtnew	converted	date_colsrq  s               @r    test_banklist_headerz!TestReadHtml.test_banklist_header  s8   555555	 	 	 	 	 ^^M4/^RRSTUHT65.99(19MM
 
 
 x<-----
 
 

 
 
 M**223<<%%m44	#^4	(399+FF	)
i/////r"   c                     d}t          |          5 }|                                }d d d            n# 1 swxY w Y   ||v sJ |                     |dddi          d         }||                                v sJ d S )NzGold Canyonr   r   r   r   )r  r  r   	to_string)r`   rd   gcr   raw_textr{   s         r    test_gold_canyonzTestReadHtml.test_gold_canyon  s    -   	 AvvxxH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  X~~~~^^MtWo^VV
 R\\^^######r  c                     |                      dd          d         }|                      dd          d         }t          j        ||           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/   )r`   r   r   s      r    test_different_number_of_colsz*TestReadHtml.test_different_number_of_cols  sz    >> < ? "  
  
@ A D 6 9   
 
: ;> 	fh/////r"   c                     |                      d          d         }t          g dgg d          }t          j        ||           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   r   )rJ  rK  Crn  rM  rN  s      r    test_colspan_rowspan_1z#TestReadHtml.test_colspan_rowspan_1  s\    
 
 " ooo.HHH
fh/////r"   c                     |                      dd          d         }t          g dgg d          }t          j        ||           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   )rJ  rK  rK  Zr  )XzX.1Yr  WrL  rM  rN  s      r     test_colspan_rowspan_copy_valuesz-TestReadHtml.test_colspan_rowspan_copy_values  sv      !   
 
" #& +++,6Q6Q6Q
 
 
 	fh/////r"   c                     |                      dd          d         }t          g dgg d          }t          j        ||           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   )rJ  rK  rK  rK  D)rJ  rK  zB.1zB.2r  rL  rM  rN  s      r    test_colspan_rowspan_both_not_1z,TestReadHtml.test_colspan_rowspan_both_not_1=  sv         
 
   +++,6S6S6S
 
 
 	fh/////r"   c                     |                      dd          d         }t          ddggddg          }t          j        ||           d S )Nz
            <table>
                <tr>
                    <td>A</td>
                    <td rowspan="2">B</td>
                </tr>
                <tr>
                    <td>C</td>
                </tr>
            </table>
        r   r   r  rK  rJ  rL  rM  rN  s      r    test_rowspan_at_end_of_rowz'TestReadHtml.test_rowspan_at_end_of_row[  sg     
    
 
  C:,c
CCC
fh/////r"   c                     |                      dd          d         }t          ddgddggddg          }t          j        ||           d S )Nz
            <table>
                <tr>
                    <td rowspan="3">A</td>
                    <td rowspan="3">B</td>
                </tr>
            </table>
        r   r   rJ  rK  rL  rM  rN  s      r    test_rowspan_only_rowsz#TestReadHtml.test_rowspan_only_rowsv  sn         

 

 
 C:Sz":S#JOOO
fh/////r"   c                     |                      d          d         }t          ddgddggddgddgg          }t          dd	gg|
          }t          j        ||           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   rJ  rK  r   r   r   levelscodesr   rL  r   r   r   r.   r/   r`   r   r   r   s       r    +test_header_inferred_from_rows_with_only_thz8TestReadHtml.test_header_inferred_from_rows_with_only_th  s    
 
" #& c3Z#s$<aVaQRVDTUUUAq6(G<<<
fh/////r"   c                 >   t          dt          dd          i          }|                                }|                     |dgd          }t	          j        ||d                    |                     |dgd          }t	          j        ||d                    d S )Ndate1/1/2001
   periodsr   r   parse_datesrT   )r   r   rz   r   r.   r/   )r`   r{   r   r}   s       r    test_parse_dates_listz"TestReadHtml.test_parse_dates_list  s    
:r B B BCDD::<<nnXA3!nDD
b#a&)))nnXF8qnII
b#a&)))))r"   c                 j   t          t          dd                    }t          |                    d           |                    d           d          }|                     |                                ddd	gid
          }t          d|i          }t          j        ||d                    d S )Nr  r  r  c                 D    t          |                                           S r%   )strr  r'   s    r    r)   z7TestReadHtml.test_parse_dates_combine.<locals>.<lambda>      AFFHH r"   c                 D    t          |                                           S r%   )r  timer  s    r    r)   z7TestReadHtml.test_parse_dates_combine.<locals>.<lambda>  r  r"   )r  r  datetimer   r   r  r   )r   r   r   r,   r   rz   r.   r/   )r`   	raw_datesr{   r}   newdfs        r    test_parse_dates_combinez%TestReadHtml.test_parse_dates_combine  s    :j"===>>	!&=&=>>!&=&=>> 
 
 nnJJLLzAq6&:a  
 
 :y122
eSV,,,,,r"   c                     |dddd          }t           j                            |          sJ t          |           d            t           j                            |          sJ t          |           d            |                     |dd	          d
         }|j        dk    sJ d|j        d         v sJ |d         j        t          j        d          k    sJ t          j
        |j        d         d          sJ d S )Nr   r   r@   wikipedia_states.htmlz is not a filez is an empty fileArizonar   r   r   )<      Unnamedr   sq mifloat64)r   r  HzPN$A)r  r  isfilereprgetsizer   r|  r   r   rl   allcloselocr`   r   r   r   s       r    test_wikipedia_states_tablez(TestReadHtml.test_wikipedia_states_table  s   xff.EFFw~~d##BBT

%B%B%BBBBwt$$FFd&F&F&FFFFIa@@C|x''''FN2.....g$(;(;;;;;{6:j19=======r"   c                     |dddd          }|                      |dd          d         }|j        dk    sJ d	|j        d
         d         v sJ |j        j        dk    sJ t	          j        |j        d         d          sJ d S )Nr   r   r@   r  r  r   r   )r     r  r   r   r   )Alaska)zTotal area[2]r  r  )r   r|  r   nlevelsrl   r  r  r  s       r     test_wikipedia_states_multiindexz-TestReadHtml.test_wikipedia_states_multiindex  s    xff.EFFICCAF|x''''FN2.q11111~%****{6:&JKYWWWWWWWr"   c                     |                      dddg          }t          ddggt          j        ddg          	          }t	          j        |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   r   r   )Unnamed: 0_level_0rJ  )zUnnamed: 1_level_0rK  rn  )r   r   r   from_tuplesr.   r/   rN  s      r    %test_parser_error_on_empty_header_rowz2TestReadHtml.test_parser_error_on_empty_header_row  s    
 q6   
 
 3ZL*,.IJ 
 
 
 	fQi22222r"   c                     |                      dd          d         }t          ddidg          }|d         j        t          j        d          k    sJ t	          j        ||           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   rQ  gClg0@rS  r  )r   r   r   rl   r.   r/   rN  s      r    test_decimal_rowszTestReadHtml.test_decimal_rows  s      #   
 
$ %( 8X"6qcBBBh%))<)<<<<<
fh/////r"   argFc                     t          j        d          }t          j        t          |          5  |                     ||           d d d            d S # 1 swxY w Y   d S )NzPassing 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 namesr>   r   )r3  escaperE   rF   r   r   )r`   ra   r  r5   s       r    test_bool_header_argz!TestReadHtml.test_bool_header_arg  s     i
 

 ]9C000 	2 	2NN9SN111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   AAAc                     |                      ddt          i          d         }t          dddgi          }t          j        ||           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>r   rx  r   z0.763z0.244)r   r  r   r.   r/   rN  s      r    test_converterszTestReadHtml.test_converters  sd     Sz!   
 
" #& cGW#5677
fh/////r"   c                     |                      ddg          d         }t          ddt          j        gi          }t	          j        ||           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;?)	na_valuesr   r   g"~j?r   r   rl   r   r.   r/   rN  s      r    test_na_valueszTestReadHtml.test_na_values!  sc     g!   
 
" #& cE26?344
fh/////r"   c                 F   d}t          dddgi          }|                     |d          d         }t          j        ||           t          dt          j        t          j        gi          }|                     |d          d         }t          j        ||           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>r   zN/Ar   F)keep_default_nar   T)r   r   r.   r/   rl   r   )r`   	html_dataexpected_dfhtml_dfs       r    test_keep_default_naz!TestReadHtml.test_keep_default_na:  s     	   udm 455..E.BB1E
k7333rvrv&6 788..D.AA!D
k733333r"   c                     |                      d          d         }t          ddgt          j        t          j        ggddg          }t	          j        ||           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   r   r   rJ  rK  rL  r  rN  s      r    test_preserve_empty_rowsz%TestReadHtml.test_preserve_empty_rowsS  sh    
 
" #& C:/?"@3PS*UUU
fh/////r"   c                     |                      d          d         }t          ddgddggddgddgg          }t          dd	gg|
          }t          j        ||           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   rJ  rK  r   r   r   r  r   rL  r  r  s       r    ,test_ignore_empty_rows_when_inferring_headerz9TestReadHtml.test_ignore_empty_rows_when_inferring_headerk  s    
 
  c3Z#s$<aVaQRVDTUUUAq6(G<<<
fh/////r"   c                     t          g d          }g dg dg|_        |                    d          }|                     |          d         }t	          j        ||           d S )N))HillaryD   r  )BernieJ   r  )DonaldE   R)r   )r  AgeParty)NamezUnnamed: 1_level_1zUnnamed: 2_level_1Fr   r   )r   r   rz   r   r.   r/   )r`   r  r@   r  s       r    test_multiple_header_rowsz&TestReadHtml.test_multiple_header_rows  s    QQQ
 
 
 322@@@
 """//..&&q)
k733333r"   c                      |dddd          }|                      |d          }t          |t                    sJ t          |d         t                    sJ d S )Nr   r   r@   rS   r   r%  )r   r&   r  r   )r`   r   rV   r   s       r    test_works_on_valid_markupz'TestReadHtml.test_works_on_valid_markup  sc    8D&&2EFFnnXn33#t$$$$$#a&),,,,,,,r"   c                 V     |dddd          }|                      |dddg           d S )	Nr   r   r@   rc   r   rQ   r;   rL   r   )r`   r   rd   s      r    test_fallback_successz"TestReadHtml.test_fallback_success  s:     vvGG}K@TUUUUUr"   c                     t          dd          }t          t          j                            dd          |          }|                                }d|v sJ d S )Nz
2000-01-01r  r  ri   r   )r   r   rl   rm   randnrz   )r`   rngr{   r   s       r    test_to_html_timestampz#TestReadHtml.test_to_html_timestamp  sZ    r222ryr1--S999v%%%%%%r"   c                    t          dddg          }|                                }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }d|v sJ ||k    sJ ||k    sJ ||k    sJ d	|v sJ d
|vsJ d|vsJ ||k    sJ d S )Nr   r   )rJ  rK  T)borderr   Fz border="1"z border="2"z border="0"z border)r   rz   )r`   r{   out_border_defaultout_border_trueout_border_explicit_defaultout_border_nondefaultout_border_zeroout_border_falses           r    test_to_html_borderlessz$TestReadHtml.test_to_html_borderless  s   aa(()**ZZ\\**D*11&(jjj&:&:# "

!
 4 4**A*..::U:33 22222"44444!%@@@@@!%::::: 55555O3333 00000"2222222r"   zdisplayed_only,exp0,exp1fooNzfoo  bar  baz  quxc                     t          d          }|                     ||          }t          j        |d         |           |t          j        |d         |           d S t	          |          dk    sJ 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`   r	  exp0exp1r   r   s         r    test_displayed_onlyz TestReadHtml.test_displayed_only  s     
 
, nnT.nAA
c!fd+++!#a&$/////s88q======r"   z\ignore:You provided Unicode markup but also provided a value for from_encoding.*:UserWarningc                    t           j                            |          }t           j                            |          d         }|                    d          \  }}	 t          |d          5 }|                     |                                |d                                          }d d d            n# 1 swxY w Y   t          |d          5 }|                     t          |                                          |d                                          }d d d            n# 1 swxY w Y   |                     ||d                                          }	t          j        ||           t          j        ||	           d S # t          $ r+ t                      rd|v sd|v rt          j                      w xY w)Nr   _rb)r   rT   1632)r  r  basenamesplitextsplitr  r   r  popr   r.   r/   	Exceptionr
   rE   skip)
r`   r!   	base_pathrootr  r   fobjfrom_stringfrom_file_likefrom_filenames
             r    test_encodezTestReadHtml.test_encode  s)   
 G$$%788	w	**1-jjoo8	($// 4"nnIIKK(a -  #%%               
 ($// 4!%DIIKK((8q "0 " "#%%               
 !NN"X +  cee  !+~>>>!+}===== 	 	 	"$$ "8##tx'7'7KMMM	sV   F	 .=B7+F	 7B;;F	 >B;?F	 A
D(F	 (D,,F	 /D,0AF	 	5F>c                 p   | j         j                            d          dk    rt          j        d            G d dt
                    } |d          }|                      |          sJ t          j        t          d          5  |                      |           d d d            d S # 1 swxY w Y   d S )	NrC   rQ   zNot applicable for lxmlc                       e Zd Zd ZdS )FTestReadHtml.test_parse_failure_unseekable.<locals>.UnseekableStringIOc                     dS NFr^   r  s    r    seekablezOTestReadHtml.test_parse_failure_unseekable.<locals>.UnseekableStringIO.seekable  s    ur"   N)__name__
__module____qualname__r$  r^   r"   r    UnseekableStringIOr!     s#            r"   r(  z?
            <table><tr><td>spam<foobr />eggs</td></tr></table>z#passed a non-rewindable file objectr>   )r   keywordsgetrE   r  r   rF   rN   )r`   r(  bads      r    test_parse_failure_unseekablez*TestReadHtml.test_parse_failure_unseekable  s    >"&&x00F::K1222	 	 	 	 	 	 	 	 ! B
 

 ~~c"""""]:-RSSS 	  	 NN3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   B++B/2B/c                      G d d          } |d          } |d          }|                      |          sJ |                      |          sJ d S )Nc                   <    e Zd Zd	dZd
dZd Zd Zd ZdefdZ	dS )9TestReadHtml.test_parse_failure_rewinds.<locals>.MockFilereturnNc                 "    || _         d| _        d S r#  )r   at_end)r`   r   s     r    __init__zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__init__  s     	#r"   c                 4    | j         rdn| j        }d| _         |S )Nrb  T)r2  r   )r`   sizer   s      r    r  z>TestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.read  s     ![7rrdi"r"   c                     d| _         d S r#  )r2  )r`   offsets     r    seekz>TestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.seek  s    #r"   c                     dS )NTr^   r  s    r    r$  zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.seekable  s    tr"   c                     d S r%   r^   r  s    r    __next__zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__next__"  s    r"   c                     | S r%   r^   r  s    r    __iter__zBTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__iter__%  s	     r"   )r0  Nr%   )
r%  r&  r'  r3  r  r8  r$  r;  r   r=  r^   r"   r    MockFiler/    s        $ $ $ $   
$ $ $    (      r"   r>  z/<table><tr><td>spam<br />eggs</td></tr></table>z2<table><tr><td>spam<foobr />eggs</td></tr></table>r   )r`   r>  goodr+  s       r    test_parse_failure_rewindsz'TestReadHtml.test_parse_failure_rewinds  s    	 	 	 	 	 	 	 	2 xIJJhKLL~~d#####~~c"""""""r"   c                     G d dt           j                  }t          t          j        j                    |dddd          } || j        |f          } || j        |f          }|                                 |                                 |                                s|                                r)	 |                                |                                )d |j	        cxu r	|j	        u sn J d S )Nc                        e Zd Z fdZ xZS )@TestReadHtml.test_importcheck_thread_safety.<locals>.ErrorThreadc                     	 t                                                       d | _        d S # t          $ r}|| _        Y d }~d S d }~ww xY wr%   )superrunerrr  )r`   rG  	__class__s     r    rF  zDTestReadHtml.test_importcheck_thread_safety.<locals>.ErrorThread.run5  sZ    $GGKKMMM  $DHHH ! # # #"DHHHHHHH#s    , 
AAA)r%  r&  r'  rF  __classcell__)rH  s   @r    ErrorThreadrC  4  s8        $ $ $ $ $ $ $ $ $r"   rJ  r   r   r@   rS   )targetr3   )
	threadingThreadr   pandasr   r@   r   startis_aliverG  )r`   r   rJ  rV   helper_thread1helper_thread2s         r    test_importcheck_thread_safetyz+TestReadHtml.test_importcheck_thread_safety0  s1   	$ 	$ 	$ 	$ 	$)* 	$ 	$ 	$ 	vy~8D&&2EFF$DN(MMM$DN(MMM%%'' 	>+B+B+D+D 	 %%'' 	>+B+B+D+D 	~)????^-?????????r"   c                      |dddd          }t          |          }|                     |          d         }|                     |          d         }t          j        ||           d S )Nr   r   r@   rA   r   )r   r   r.   r/   )r`   r   file_path_string	file_pathr   r   s         r    test_parse_path_objectz#TestReadHtml.test_parse_path_objectK  sl    #8D&&+FF)**	nn-..q1nnY''*
c3'''''r"   c                     |                      d          d         }t          dggdg          }t          j        ||           d S )Nz
            <table>
                <tr>
                    <th>A</th>
                </tr>
                <tr>
                    <td>word1<br>word2</td>
                </tr>
            </table>
        r   zword1 word2rJ  rL  rM  rN  s      r    test_parse_br_as_spacez#TestReadHtml.test_parse_br_as_spaceS  sX    	
 
  M?"3cUCCC
fh/////r"   )r+   bodyr   rc  c                    d}g dg dg dg dg dg dd}|d	         }|d
         }|d         }|dk    r|d         }|d         }|d         }n,|dk    r	|d         }n|dk    r	|d         }n|dk    r|d         }|                      ||          d         }t          ||g|          }t          j        ||           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 TEXTr^  ))r_  zhttps://en.wikipedia.org/)r`  zftp://ftp.us.debian.org/)r^  N)Footer$Multiple links: Only first captured.N))ra  z)https://en.wikipedia.org/wiki/Page_footer)rb  1N)head_ignorehead_extractbody_ignorebody_extractfooter_ignorefooter_extractrf  rh  rd  r+   rg  ri  re  rZ  rc  r   extract_linksr   rn  rM  )	r`   r  gh_13141_datagh_13141_expecteddata_expfoot_exphead_expr   r   s	            r    test_extract_linkszTestReadHtml.test_extract_linksf  s;   0 766  
 POO  
  
  %
 
2 %]3$_5$]3%<<(8H()9:H(8HHF]](8HHH__()9:HHH__(8HSAA!Dh18DDD
fh/////r"   c                     d}t          j        t          |          5  t          |d           d d d            d S # 1 swxY w Y   d S )NzY`extract_links` must be one of {None, "header", "footer", "body", "all"}, got "incorrect"r>   	incorrectrj  rM   r8  s      r    test_extract_links_badz#TestReadHtml.test_extract_links_bad  s    I 	 ]:S111 	< 	<i{;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<   =AAc                     d}|                      |d          d         }t          dgg          }t          j        ||           d S )Nz
        <table>
          <tr>
            <td>
              <a href='https://google.com'>Google.com</a>
            </td>
          </tr>
        </table>
        r+   rj  r   )z
Google.comzhttps://google.comrM  )r`   r   r   r   s       r     test_extract_links_all_no_headerz-TestReadHtml.test_extract_links_all_no_header  sR     E::1=CDEFF
fh/////r"   c                     d}t          j        t          |          5  t          dd           d d d            d S # 1 swxY w Y   d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r>   testnumpyr   rM   r  s     r    test_invalid_dtype_backendz'TestReadHtml.test_invalid_dtype_backend  s    % 	 ]:S111 	5 	5fG4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5ru  )br%  r&  r'  rE   fixturera   rd   rg   r~   r   marknetworkr.   r   r   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.  r0  r5  r9  r>  rF  rH  rO  rT  r\  ri  ro  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  parametrizer  r  r  r  r  r  r  r  r  r  r  r   r  filterwarningsr  r,  r@  rS  rW  rY  rq  rt  rw  r{  r^   r"   r    r\   r\   h   so        ^; ; ^; ^? ? ^? V^D!!!  "!' ' ' 50 50 50n [RZ8   ) )  ) [RZ2   ) )  ) [) ) )/ / /- - -
- - -
  
) ) )) ) )) ) )) ) )) ) )) ) )) ) )) ) )J J J) ) )
) ) )
) ) )
) ) )	) 	) 	)) ) )) ) ) [ZB B Z B [[ZP P Z  P [- - - [  V V V [2 2 2 [0 0 0 [0 0 0
 [2 2 2 [2 2 2 [2 2 2 [	- 	- 	-B B B
 [RZ0DIII  JI 
 [RZ0DIII6 6 JI 6     60 0 0<0 0 000 0 0<$2 $2 $2L0 0 0. [-0 -0 -0^ [	$ 	$ 	$B0 B0 B0H0 0 0.0 0 0B0 0 0<0 0 060 0 0&0 0 04* * *- - -> > >X X X3 3 3.0 0 06 [UT5M222 2 3220 0 020 0 024 4 420 0 000 0 0*4 4 4- - - [V V V
& & &3 3 3& ["99eW%%t,II3455yy%7I7IJ	
 ! ! !@ [	&  	 8     ( #  #  #D [@ @ @4( ( (0 0 0& [U$G$G$GHHA0 A0 IHA0F< < <0 0 05 5 5 5 5r"   r\   )8	functoolsr   	importlibr   r   r   r   r  pathlibr   r3  rL  typingr   urllib.errorr	   rz  rl   rE   pandas.compatr
   pandas.util._test_decoratorsutil_test_decoratorstdrN  r   r   r   r   r   r   r   r   r   pandas._testing_testingr.   pandas.core.arraysr   r   pandas.io.commonr   r{  r   r|  r!   r9   
skip_if_norI   rP   rY   r}  r  r   r\   r^   r"   r    <module>r     sv                      
			       				           ! ! ! ! ! !      - - - - - - ) ) ) ) ) ) ) ) )    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	             
 . - - - - -     $ $ $ $ $ $     B B B
: : :( uzM M  M6 6 6 uvz. .   . U=2=#7#7z9R9R"STTTV=2=#8#8999 X5 X5 X5 X5 X5 X5 X5 X5 X5 X5r"   