
    Mh              	          S SK Jr  S SKJr  S SKJrJr  S SKrS SKJ	r	  S SK
r
S SKrS SKJr  S SKrS SKrS SKJr  S SKJs  Jr  S SKrS SKJrJrJrJrJrJrJrJ r J!r!  S SK"J#r$  S S	K%J&r&J'r'  S S
K(J)r)  \RT                  " / SQS9S 5       r+S r,S r-S r.S r/\RT                  " \R`                  " S\Rb                  " S5      \Rb                  " S5      /S9\R`                  " S\Rb                  " S5      S9/S9S 5       r2 " S S5      r3g)    )Iterator)partial)BytesIOStringION)Path)URLError)is_platform_windows)	NA	DataFrame
MultiIndexSeries	Timestamp
date_rangeread_csv	read_htmlto_datetime)ArrowStringArrayStringArray)file_path_to_url)zchinese_utf-16.htmlzchinese_utf-32.htmlzchinese_utf-8.htmlzletz_latin1.html)paramsc                 ,    U" SSSU R                   5      $ )z6Parametrized fixture for HTML encoding test filenames.iodatahtml_encoding)param)requestdatapaths     K/var/www/html/env/lib/python3.13/site-packages/pandas/tests/io/test_html.pyhtml_encoding_filer   (   s     D&/7==AA    c                 L   [        U 5      [        U5      :X  d   S[        U 5       S[        U5       35       eSn[        [        S U U5      5      nU(       d   U5       e[        X5       H7  u  pg[        R
                  " Xg/UQ70 UD6  UR                  (       d  M2   S5       e   g )Nz*lists are not of equal size len(list1) == z, len(list2) == z$not all list elements are DataFramesc                 P    [        U [        5      =(       a    [        U[        5      $ N
isinstancer   )xys     r   <lambda>(assert_framelist_equal.<locals>.<lambda>>   s    Ay1NjI6NNr    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   5   s    u:U# 	U %U	&#
 1CN	
K ;-
g@@@===9"99  .r    c           	         [         R                  " S5      n[         R                  " S5        U R                  USS5        [         R                  " [        SS9   [        U" SSS	S
5      SS9  S S S 5        g ! , (       d  f       g = f)Nbs4html5lib__version__z4.2zPandas requires versionmatchr   r   html	spam.htmlflavor)pytestimportorskipsetattrraisesImportErrorr   )monkeypatchr   r;   s      r   test_bs4_version_failsrJ   I   sc    


e
$C

#]E2	{*C	D(4=eL 
E	D	Ds   A66
Bc                      Sn SnSU-   S-   n[         R                  " [        US9   [        [	        U 5      SUS9  S S S 5        g ! , (       d  f       g = f)Nz
google.comzinvalid flavorz\{z \} is not a valid set of flavorsr>   googler?   rC   )rD   rG   
ValueErrorr   r   )urlrC   r5   s      r   test_invalid_flavorrP   R   sE    
CF
&.>
>C	z	-(3-x? 
.	-	-s   A
Ac                     [         R                  " S5        [         R                  " S5        [         R                  " S5        U " SSSS5      n[        USS/S	9n[        USS/S	9n[        X#5        g )
Nr;   lxmlr<   r   r   r@   valid_markup.htmlr   )	index_colrC   )rD   rE   r   r9   )r   filenamedfs_lxmldfs_bs4s       r   test_same_orderingrX   [   se    



#ff.ABHQx@HAug>G8-r    r;   r<   )marksrR   c                 2    [        [        U R                  S9$ )NrB   )r   r   r   )r   s    r   flavor_read_htmlr[   f   s     9W]]33r    c            	       p	   \ rS rSrS r\R                  S 5       r\R                  S 5       rS r	S r
\R                  R                  \R                  R                  S 5       5       r\R                  R                  \R                  R                  S 5       5       r\R                  R                   S	 5       rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%\R                  R                  \R                  R                  S 5       5       r&\R                  R                   \R                  R                  \R                  R                  S 5       5       5       r'\R                  R                   S  5       r(\R                  R                   S! 5       r)\R                  R                   S" 5       r*\R                  R                   S# 5       r+\R                  R                   S$ 5       r,\R                  R                   S% 5       r-\R                  R                   S& 5       r.\R                  R                   S' 5       r/\R                  R                   S( 5       r0S) r1\R                  S* 5       r2\R                  R                  \R                  R                  S+ 5       5       r3\R                  R                  \R                  R                  S, 5       5       r4S- r5S. r6S/ r7S0 r8S1 r9S2 r:\R                  R                   S3 5       r;\R                  R                   S4 5       r<S5 r=S6 r>S7 r?S8 r@S9 rAS: rBS; rCS< rDS= rES> rFS? rGS@ rHSA rI\R                  R                  SBSCSD/5      SE 5       rKSF rLSG rMSH rNSI rOSJ rPSK rQSL rR\R                  R                   SM 5       rSSN rTSO rU\R                  R                  SPSC\V" SQ/5      SR4SD\V" SS/5      \V" SQ/5      4/5      ST 5       rW\R                  R                  SUSCSD/5      SV 5       rX\R                  R                  SW5      SX 5       rZSY r[SZ r\\R                  R                   \R                  R                  S[ 5       5       r]S\ r^S] r_\R                  R                  SB/ S^Q5      S_ 5       r`S` raSa rbSb rcSc rdSdregR)eTestReadHtmlp   c                 ~    Sn[         R                  " [        US9   U" S5        S S S 5        g ! , (       d  f       g = f)NzPassing literal html to 'read_html' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.r>   a  <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.   assert_produces_warningFutureWarning)selfr[   r5   s      r   test_literal_html_deprecation*TestReadHtml.test_literal_html_deprecationq   s8    > 	 ''SA BAA   	.
<c                     U" SSSS5      $ )Nr   r   r@   rA    rb   r   s     r   	spam_dataTestReadHtml.spam_data   s    ffk::r    c                     U" SSSS5      $ )Nr   r   r@   banklist.htmlrg   rh   s     r   banklist_dataTestReadHtml.banklist_data   s    ffo>>r    c                    [        [        R                  R                  S5      R                  S5      [        R
                  " [        S5      [        S9S9R                  SR                  5      R                  [        5      nUR                  5       nU" [        U5      SS0S	S
9S	   n[        R                  " XB5        g )N   )      abcdtypecolumnsz{:.3f}class	dataframer   )attrsrT   )r   nprandomdefault_rngpdIndexlistobjectr,   formatastypefloatto_htmlr   r.   r/   )rb   r[   dfoutress        r   test_to_html_compat TestReadHtml.test_to_html_compat   s    		%%a(//7eF;
 S!&&- 	 jjlSM';!71

 	c&r    c                 :   [        [        S[        R                  S/SS9[        / SQSS9[        S[        R                  S/SS9[        / S	QSS9/ S
Q/ SQ/ SQ/ SQS.5      nUS:X  ab  [	        [        R
                  " / SQ[        R                  S95      n[	        [        R
                  " SS[        /[        R                  S95      nOUS:X  aO  [        R                  " S5      nSSK
Jn  U" UR                  / SQ5      5      nU" UR                  / SQ5      5      nON[        R                  " S5      n[        UR                  / SQ5      5      n[        UR                  / SQ5      5      nUR                  SS9n	[        R                  " SU5         U" [!        U	5      US9S   n
S S S 5        [        [        S[        R                  S/SS9[        / SQSS9[        S[        R                  S/SS9[        / S	QSS9[        SS[        /SS9[        / SQSS9UUS.5      nUS:X  aF  SS KnSSK
Jn  [        UR$                   Vs0 s H  nX" UR                  X   SS95      _M     sn5      n[&        R(                  " W
U5        g ! , (       d  f       N= fs  snf )N   rr   Int64rt   )r   rp   rr         ?      @Float64)r   g       @r   )TFN)TFTabc)r   r   N)r   r   r   defghpythonr   r   pyarrowr   )ArrowExtensionArrayFindexzmode.string_storagedtype_backendTboolean)from_pandas)r   r   r{   nanr   arrayobject_r
   rD   rE   pandas.arraysr   r   r   r~   option_contextr   r   rw   r.   r/   )rb   string_storager   r[   r   string_arraystring_array_napar   r   resultexpectedcols                r   test_dtype_backendTestReadHtml.test_dtype_backend   s:   QN':IW5S"&&#.i@O9=(($%	
 X%&rxxrzz'RSL)"((Cb>*TUOi'$$Y/B9.rxx/HIL1"((;K2LMO$$Y/B+BHH_,EFL.rxx8H/IJOjjuj%4nE%hsm=QRSTF F QN':IW5S"&&#.i@O9=T5"-Y?/yA!$	
 I% 9   (/// ,RXXhmQUX-VWW/H 	fh/9 FE,s   J"J
Jc                     [        USS9 nUR                  UR                  5       S9  U" UR                  SS9nU" UR                  SS9nS S S 5        [	        WW5        g ! , (       d  f       N= f)Nutf-8encodingcontentFirst Federal Bank of Floridar>   Metcalf Bankopenserve_contentreadrO   r9   )rb   
httpserverrm   r[   r   df1df2s          r   test_banklist_urlTestReadHtml.test_banklist_url   sk     -'2a$$QVVX$6"5C #$C 3 	sC( 32   A A  
A.c                     [        USS9 nUR                  UR                  5       S9  U" UR                  SS9nU" UR                  SS9nS S S 5        [	        WW5        g ! , (       d  f       N= f)Nr   r   r   	.*Water.*r>   Unitr   )rb   r   ri   r[   r   r   r   s          r   test_spam_urlTestReadHtml.test_spam_url   sa     )g.!$$QVVX$6":>>EC":>>@C /
 	sC( /.r   c                 B    U" USSS0S9nU" USSS0S9n[        X45        g )Nz.*Florida.*idtabler?   rz   r   r9   )rb   rm   r[   r   r   s        r   test_banklistTestReadHtml.test_banklist   s8    tWo
 g
 	s(r    c                     U" USS9nU" USS9n[        X45        US   R                  S   S:X  d   eUS   R                  S   S:X  d   eg )Nr   r>   r   r   r   r   
ProximatesNutrient)r9   ilocrw   rb   ri   r[   r   r   s        r   	test_spamTestReadHtml.test_spam  sX    y<y7s(1v{{4 L0001v~~a J...r    c                 T    U" U5      nU H  n[        U[        5      (       a  M   e   g r#   r$   )rb   ri   r[   dfsr   s        r   test_spam_no_matchTestReadHtml.test_spam_no_match  s)    y)Bb),,,, r    c                 V    U" USS0S9nU H  n[        U[        5      (       a  M   e   g )Nr   r   )rz   r$   )rb   rm   r[   r   r   s        r   test_banklist_no_match#TestReadHtml.test_banklist_no_match  s/    }T7ODBb),,,, r    c                 j    U" USSS9S   nUR                   S   S:X  d   eUR                  (       a   eg )Nr   rp   r?   headerr   r   )rw   r0   )rb   ri   r[   r   s       r   test_spam_headerTestReadHtml.test_spam_header  s9    i{1EaHzz!},,,88|8r    c                 :    U" USSS9nU" USSS9n[        X45        g Nr   r   r?   skiprowsr   r   r   s        r   test_skiprows_intTestReadHtml.test_skiprows_int"  &    yaHyCs(r    c                 ^    U" US[        S5      S9nU" US[        S5      S9n[        X45        g Nr   rp   r   r   )ranger9   r   s        r   test_skiprows_range TestReadHtml.test_skiprows_range(  .    yeAhOyqJs(r    c                 B    U" USSS/S9nU" USSS/S9n[        X45        g Nr   r   rp   r   r   r   r   s        r   test_skiprows_listTestReadHtml.test_skiprows_list.  .    yq!fMy!QHs(r    c                 B    U" USSS1S9nU" USSS1S9n[        X45        g r   r   r   s        r   test_skiprows_setTestReadHtml.test_skiprows_set4  r   r    c                 :    U" USSS9nU" USSS9n[        X45        g r   r   r   s        r   test_skiprows_slice TestReadHtml.test_skiprows_slice:  r   r    c                 ^    U" US[        S5      S9nU" US[        S5      S9n[        X45        g r   slicer9   r   s        r   test_skiprows_slice_short&TestReadHtml.test_skiprows_slice_short@  r   r    c           	      d    U" US[        SS5      S9nU" US[        SSS5      S9n[        X45        g )	Nr   rp      r   r   rq   r   r   r   s        r   test_skiprows_slice_long%TestReadHtml.test_skiprows_slice_longF  s4    yeAqkRyq!RQs(r    c                     U" US[         R                  " S5      S9nU" US[         R                  " S5      S9n[        X45        g r   )r{   aranger9   r   s        r   test_skiprows_ndarray"TestReadHtml.test_skiprows_ndarrayL  s7    ybiiPQlSy1Ns(r    c                 z    [         R                  " [        SS9   U" USSS9  S S S 5        g ! , (       d  f       g = f)Nz%is not a valid type for skipping rowsr>   r   asdfr   )rD   rG   	TypeError)rb   ri   r[   s      r   test_skiprows_invalid"TestReadHtml.test_skiprows_invalidR  s*    ]]9-TVYkFK WVVs   	,
:c                 :    U" USSS9nU" USSS9n[        X45        g Nr   r   r?   rT   r   r   r   s        r   
test_indexTestReadHtml.test_indexV  s&    yqIy!Ds(r    c                 >    U" USSSS9nU" USSSS9n[        X45        g Nr   r   r   )r?   r   rT   r   r   r   s        r   test_header_and_index_no_types+TestReadHtml.test_header_and_index_no_types[  +    yAQRSyqANs(r    c                 >    U" USSSS9nU" USSSS9n[        X45        g r  r   r   s        r    test_header_and_index_with_types-TestReadHtml.test_header_and_index_with_types`  r  r    c                 :    U" USSS9nU" USSS9n[        X45        g r  r   r   s        r   test_infer_typesTestReadHtml.test_infer_typese  s&    yqIy!Ds(r    c                 *   [        USS9 n[        UR                  5       5      nS S S 5        [        USS9 n[        UR                  5       5      nS S S 5        U" WSS9nU" WSS9n[        Xg5        g ! , (       d  f       NT= f! , (       d  f       N9= fNzUTF-8r   r   r>   r   )r   r   r   r9   )rb   ri   r[   r   data1data2r   r   s           r   test_string_ioTestReadHtml.test_string_iok  sz    )g.!QVVX&E / )g.!QVVX&E / uK8uF3s( /. /.s   A3B3
B
Bc                     [        USS9 nUR                  5       nS S S 5        U" [        W5      SS9nU" [        U5      SS9n[        XV5        g ! , (       d  f       N:= fr  )r   r   r   r9   )rb   ri   r[   r   r   r   r   s          r   test_stringTestReadHtml.test_stringv  sQ    )g.!668D / x~[Ax~V<s( /.s   A
Ac                     [        USS9 nU" USS9nS S S 5        [        USS9 nU" USS9nS S S 5        [        WW5        g ! , (       d  f       N5= f! , (       d  f       N,= fr  )r   r9   )rb   ri   r[   r   r   r   s         r   test_file_likeTestReadHtml.test_file_like  s\    )g.!"1K8C / )g.!"1F3C / 	sC( /. /.s   AA
A
A!c                     UR                  SSS9  [        R                  " [        SS9   U" SSS9  S S S 5        g ! , (       d  f       g = f)Nz#urlopen error unknown url type: git  coder>   zgit://github.comr   )r   rD   rG   r   rb   r   r[   s      r   test_bad_url_protocol"TestReadHtml.test_bad_url_protocol  s?     	  !FS Q]]8+PQ/{C RQQs	   ;
A	c                     UR                  SSS9  [        R                  " [        [        4SS9   U" UR
                  SS9  S S S 5        g ! , (       d  f       g = f)NzName or service not knownr+  r,  zHTTP Error 404: NOT FOUNDr>   r   )r   rD   rG   r   rN   rO   r.  s      r   test_invalid_urlTestReadHtml.test_invalid_url  sG     	  !<3 G]]Hj19TUZ^^;? VUUs   A
Ac                     UnU" [        [        R                  R                  U5      5      SSS0S9n[	        U[
        5      (       d   eU H  n[	        U[        5      (       a  M   e   g )NFirstr   r   r   )r   ospathabspathr%   r   r   rb   rm   r[   rO   r   r   s         r   test_file_urlTestReadHtml.test_file_url  sa    RWW__S12'$PW
 #t$$$$Bb),,,, r    c                     Un[         R                  " [        SS9   U" USSS0S9  S S S 5        g ! , (       d  f       g = f)NzNo tables foundr>   r   r   	tasdfabler   rD   rG   rN   )rb   rm   r[   rO   s       r   test_invalid_table_attrs%TestReadHtml.test_invalid_table_attrs  s8    ]]:->?:4BU @??   0
>c                 f    U" USSS0SS/S9S   n[        UR                  [        5      (       d   eg )NMetcalfr   r   r   r   )r?   rz   r   r%   rw   r   rb   rm   r[   r   s       r   test_multiindex_header#TestReadHtml.test_multiindex_header  s>    4/1a&

 "**j1111r    c                 f    U" USSS0SS/S9S   n[        UR                  [        5      (       d   eg )NrC  r   r   r   r   )r?   rz   rT   )r%   r   r   rE  s       r   test_multiindex_index"TestReadHtml.test_multiindex_index  s?    4/aQRV

 "((J////r    c                     U" USSS0SS/SS/S9S   n[        UR                  [        5      (       d   e[        UR                  [        5      (       d   eg )NrC  r   r   r   r   )r?   rz   r   rT   )r%   rw   r   r   rE  s       r   test_multiindex_header_index)TestReadHtml.test_multiindex_header_index  sa    /q6!f
  "**j1111"((J////r    c                 h    U" USSS0SS/SS9S   n[        UR                  [        5      (       d   eg NrC  r   r   r   r   )r?   rz   r   r   rD  rE  s       r   &test_multiindex_header_skiprows_tuples3TestReadHtml.test_multiindex_header_skiprows_tuples  F    /q6
  "**j1111r    c                 h    U" USSS0SS/SS9S   n[        UR                  [        5      (       d   eg rO  rD  rE  s       r   test_multiindex_header_skiprows,TestReadHtml.test_multiindex_header_skiprows  rR  r    c           	          U" USSS0SS/SS/SS9S   n[        UR                  [        5      (       d   e[        UR                  [        5      (       d   eg )NrC  r   r   r   r   )r?   rz   r   rT   r   )r%   r   r   rw   rE  s       r   %test_multiindex_header_index_skiprows2TestReadHtml.test_multiindex_header_index_skiprows  sd    /q6!f
  "((J////"**j1111r    c                 &   UnU" [        [        R                  R                  U5      5      [        R
                  " [        R
                  " S5      5      SS0S9n[        U[        5      (       d   eU H  n[        U[        5      (       a  M   e   g )NFloridar   r   r   )	r   r6  r7  r8  recompiler%   r   r   r9  s         r   test_regex_idempotency#TestReadHtml.test_regex_idempotency  st    RWW__S12**RZZ	23/

 #t$$$$Bb),,,, r    c                 ~    Sn[         R                  " [        US9   U" USSS9  S S S 5        g ! , (       d  f       g = f)Nz\(you passed a negative value\)r>   Waterr  r   r>  )rb   ri   r[   r5   s       r   test_negative_skiprows#TestReadHtml.test_negative_skiprows  s-    0]]:S1YgC 211re   c                     g)Naf  
          <table class="contentstable" align="center"><tr>
            <td width="50%">
            <p class="biglink"><a class="biglink" href="whatsnew/2.7.html">What's new in Python 2.7?</a><br/>
                <span class="linkdescr">or <a href="whatsnew/index.html">all "What's new" documents</a> since 2.0</span></p>
            <p class="biglink"><a class="biglink" href="tutorial/index.html">Tutorial</a><br/>
                <span class="linkdescr">start here</span></p>
            <p class="biglink"><a class="biglink" href="library/index.html">Library Reference</a><br/>
                <span class="linkdescr">keep this under your pillow</span></p>
            <p class="biglink"><a class="biglink" href="reference/index.html">Language Reference</a><br/>
                <span class="linkdescr">describes syntax and language elements</span></p>
            <p class="biglink"><a class="biglink" href="using/index.html">Python Setup and Usage</a><br/>
                <span class="linkdescr">how to use Python on different platforms</span></p>
            <p class="biglink"><a class="biglink" href="howto/index.html">Python HOWTOs</a><br/>
                <span class="linkdescr">in-depth documents on specific topics</span></p>
            </td><td width="50%">
            <p class="biglink"><a class="biglink" href="installing/index.html">Installing Python Modules</a><br/>
                <span class="linkdescr">installing from the Python Package Index &amp; other sources</span></p>
            <p class="biglink"><a class="biglink" href="distributing/index.html">Distributing Python Modules</a><br/>
                <span class="linkdescr">publishing modules for installation by others</span></p>
            <p class="biglink"><a class="biglink" href="extending/index.html">Extending and Embedding</a><br/>
                <span class="linkdescr">tutorial for C/C++ programmers</span></p>
            <p class="biglink"><a class="biglink" href="c-api/index.html">Python/C API</a><br/>
                <span class="linkdescr">reference for C/C++ programmers</span></p>
            <p class="biglink"><a class="biglink" href="faq/index.html">FAQs</a><br/>
                <span class="linkdescr">frequently asked questions (with answers!)</span></p>
            </td></tr>
        </table>

        <p><strong>Indices and tables:</strong></p>
        <table class="contentstable" align="center"><tr>
            <td width="50%">
            <p class="biglink"><a class="biglink" href="py-modindex.html">Python Global Module Index</a><br/>
                <span class="linkdescr">quick access to all modules</span></p>
            <p class="biglink"><a class="biglink" href="genindex.html">General Index</a><br/>
                <span class="linkdescr">all functions, classes, terms</span></p>
            <p class="biglink"><a class="biglink" href="glossary.html">Glossary</a><br/>
                <span class="linkdescr">the most important terms explained</span></p>
            </td><td width="50%">
            <p class="biglink"><a class="biglink" href="search.html">Search page</a><br/>
                <span class="linkdescr">search this documentation</span></p>
            <p class="biglink"><a class="biglink" href="contents.html">Complete Table of Contents</a><br/>
                <span class="linkdescr">lists all sections and subsections</span></p>
            </td></tr>
        </table>
        rg   rb   s    r   python_docsTestReadHtml.python_docs  s    -r    c                 f    UR                  US9  U" UR                  SS9n[        U5      S:  d   eg )Nr   Pythonr>   r   )r   rO   r*   )rb   re  r   r[   r   s        r   test_multiple_matches"TestReadHtml.test_multiple_matches(  s5     	   5z~~X>3x!||r    c                     UR                  US9  U" UR                  SS9nU Vs/ s H  oUR                  S   SS PM     nn[        U5      SS/:X  d   eg s  snf )	Nr   rh  r>   r   r   rq   PythWhat)r   rO   r   sorted)rb   re  r   r[   r   r   zzs          r   test_python_docs_table#TestReadHtml.test_python_docs_table/  sb     	   5z~~X>+./3RggdmAa 3/bzff---- 0s   Ac                 L    SnU" [        U5      5      n[        U5      S:X  d   eg)z0
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   N)r   r*   )rb   r[   r@   r   s       r   test_empty_tablesTestReadHtml.test_empty_tables7  s+    ( "(4.16{ar    c                 |    U" [        S5      5      S   n[        SS/SS//SS/S	9n[        R                  " X#5        g )
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   rp   rr   rq   ABr   rw   r   r   r.   r/   rb   r[   r   r   s       r   test_multiple_tbody TestReadHtml.test_multiple_tbodyR  sR     "
. /2 Aq6Aq6"2S#JG
f/r    c                 r    U" [        S5      5      S   n[        SS0S/S9n[        R                  " X#5        g)z\
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   Nry  rz  s       r   test_header_and_one_column'TestReadHtml.test_header_and_one_columnr  sH    
 "
 " 8W"5aSA
f/r    c                 v    U" [        S5      5      S   n[        / SQ// SQS9n[        R                  " X#5        g)z;
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Yearrx  Nry  rz  s       r   test_thead_without_tr"TestReadHtml.test_thead_without_tr  sJ     "
& '* -.7

 	f/r    c                 .   Sn[        SS//SS/S9n[        SS/SS//SS/S9nUR                  S	S
9nUR                  SS
9nU" [        U5      5      S   nU" [        U5      5      S   n[        R                  " Xs5        [        R                  " X5        g)zP
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bodyBrv  rw  rx  footAfootB )footerz%<tr><td>footA</td><th>footB</th></tr>r   N)r   r   r   r.   r/   )	rb   r[   data_template	expected1	expected2r   r!  result1result2s	            r   test_tfoot_readTestReadHtml.test_tfoot_read  s    
$ Wg$6#7#sL	G$w&89C:
	 $$B$/$$,S$T"8E?3A6"8E?3A6
g1
g1r    c                 p    U" [        S5      SS9S   n[        SS//SS9n[        R                  " X#5        g )Na
  
            <table>
                <tr>
                    <td>S</td>
                    <td>I</td>
                </tr>
                <tr>
                    <td>text</td>
                    <td>1944</td>
                </tr>
            </table>
        r   r   textr  )SIrv   ry  rz  s       r   &test_parse_header_of_non_string_column3TestReadHtml.test_parse_header_of_non_string_column  sM     " 
  !$ vtn-zB
f/r    c                   ^ SSK Jm  U4S jnU" USSS0S9S   n[        U" SS	S
S5      [        [        S.S9nUR                  UR                  :X  d   e/ SQn/ SQnUR                  U5      R                  Xx5      n	UR                  U5      n
U	nSS/nX   R                  [        5      X'   [        R                  " X5        g )Nr   )_remove_whitespacec                 :   >  T" U 5      $ ! [          a    U s $ f = fr#   )AttributeError)r&   r  s    r   try_remove_ws8TestReadHtml.test_banklist_header.<locals>.try_remove_ws  s'    )!,,! s    rC  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 Bankr  r  )pandas.io.htmlr  r   r   shaper,   replaceapplyr   r.   r/   )rb   rm   r   r[   r  r   ground_trutholdnewdfnewgtnew	converted	date_colsr  s                @r   test_banklist_header!TestReadHtml.test_banklist_header  s    5	 m9T7OTUVWT65.9(19M
 xx<-----

 }%--c7  /	#^4	(399+F	
i/r    c                     Sn[        USS9 nUR                  5       nS S S 5        UW;   d   eU" USSS0S9S   nX6R                  5       ;   d   eg ! , (       d  f       N9= f)NzGold Canyonr   r   r   r   r   r   )r   r   	to_string)rb   rm   r[   gcr   raw_textr   s          r   test_gold_canyonTestReadHtml.test_gold_canyon  sk    -'2avvxH 3 X~~tWo

 \\^### 32s   A
Ac                 |    U" [        S5      SS9S   nU" [        S5      SS9S   n[        R                  " X25        g )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   rT   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/   )rb   r[   r   r   s       r   test_different_number_of_cols*TestReadHtml.test_different_number_of_cols'  sf    # @ C"
D E"H ": =
> ?B 	f/r    c                 v    U" [        S5      5      S   n[        / SQ// SQS9n[        R                  " X#5        g )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   )rv  rw  Crv   ry  rz  s       r   test_colspan_rowspan_1#TestReadHtml.test_colspan_rowspan_1o  sB    !
" #& o.H
f/r    c                 t    U" [        S5      SS9S   n[        / SQ// SQS9n[        R                  " X#5        g )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  )rv  rw  rw  Zr  )XzX.1Yr  Wrx  ry  rz  s       r    test_colspan_rowspan_copy_values-TestReadHtml.test_colspan_rowspan_copy_values  sO     "" %
& '* +,6Q
 	f/r    c                 t    U" [        S5      SS9S   n[        / SQ// SQS9n[        R                  " X#5        g )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  )rv  rw  rw  rw  D)rv  rw  zB.1zB.2r  rx  ry  rz  s       r   test_colspan_rowspan_both_not_1,TestReadHtml.test_colspan_rowspan_both_not_1  sO     " 
  !$ +,6S
 	f/r    c                 t    U" [        S5      SS9S   n[        SS//SS/S9n[        R                  " X#5        g )Nz
            <table>
                <tr>
                    <td>A</td>
                    <td rowspan="2">B</td>
                </tr>
                <tr>
                    <td>C</td>
                </tr>
            </table>
        r   r  r  rw  rv  rx  ry  rz  s       r   test_rowspan_at_end_of_row'TestReadHtml.test_rowspan_at_end_of_row  sP     "
 
 " C:,c
C
f/r    c                 z    U" [        S5      SS9S   n[        SS/SS//SS/S9n[        R                  " X#5        g )Nz
            <table>
                <tr>
                    <td rowspan="3">A</td>
                    <td rowspan="3">B</td>
                </tr>
            </table>
        r   r  rv  rw  rx  ry  rz  s       r   test_rowspan_only_rows#TestReadHtml.test_rowspan_only_rows  sW     "	 
  C:Sz":S#JO
f/r    c                     U" [        S5      5      S   n[        SS/SS//SS/SS//S9n[        SS	//US
9n[        R                  " X$5        g )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   rv  rw  r   r   r   levelscodesrp   rx  r   r   r   r.   r/   rb   r[   r   rw   r   s        r   +test_header_inferred_from_rows_with_only_th8TestReadHtml.test_header_inferred_from_rows_with_only_th  sl    !
& '* c3Z#s$<aVaQRVDTUAq6(G<
f/r    c                     [        S[        SSS905      nUR                  5       nU" [        U5      S/SS9n[        R
                  " X$S   5        U" [        U5      S/SS9n[        R
                  " X$S   5        g )Ndate1/1/2001
   periodsr   r   parse_datesrT   )r   r   r   r   r.   r/   )rb   r[   r   r   r   s        r   test_parse_dates_list"TestReadHtml.test_parse_dates_list  sr    
:r BCD::<x1saP
ba&)x1xSTU
ba&)r    c                    [        [        SSS95      n[        UR                  S 5      UR                  S 5      S.5      nU" [	        UR                  5       5      SSS	/0SS
9n[        SU05      n[        R                  " XTS   5        g )Nr  r  r  c                 4    [        U R                  5       5      $ r#   )strr  r&   s    r   r(   7TestReadHtml.test_parse_dates_combine.<locals>.<lambda>%      AFFHr    c                 4    [        U R                  5       5      $ r#   )r  timer  s    r   r(   r  &  r  r    )r  r  datetimer   rp   r  r   )r   r   r   r,   r   r   r.   r/   )rb   r[   	raw_datesr   r   newdfs         r   test_parse_dates_combine%TestReadHtml.test_parse_dates_combine!  s    :j"=>	!&=>!&=>
 RZZ\"aV0DPQ
 :y12
eV,r    c                    U" SSSS5      n[         R                  R                  U5      (       d   [        U5       S35       e[         R                  R	                  U5      (       d   [        U5       S35       eU" USSS	9S
   nUR
                  S:X  d   eSUR                  S   ;   d   eUS   R                  [        R                  " S5      :X  d   e[        R                  " UR                  S   S5      (       d   eg )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)r6  r7  isfilereprgetsizer  rw   ru   r{   allcloselocrb   r   r[   r   r   s        r   test_wikipedia_states_table(TestReadHtml.test_wikipedia_states_table/  s    ff.EFww~~d##BT
|>%BB#wwt$$Fd4E&FF$!$iB1E||x'''FNN2....g$$(;;;;{{6::j19====r    c                    U" SSSS5      nU" USSS9S   nUR                   S:X  d   eS	UR                  S
   S   ;   d   eUR                  R                  S:X  d   e[        R                  " UR
                  S   S5      (       d   eg )Nr   r   r@   r  r  r   r  )r     r  r  r   rp   )Alaska)zTotal area[2]r  r   )r  rw   nlevelsr{   r  r  r  s        r    test_wikipedia_states_multiindex-TestReadHtml.test_wikipedia_states_multiindex9  s    ff.EF!$i1EaH||x'''FNN2.q1111~~%%***{{6::&JKYWWWWr    c                     U" [        S5      SS/S9n[        SS//[        R                  " SS/5      S	9n[        R
                  " US   U5        g )
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_0rv  )zUnnamed: 1_level_0rw  rv   )r   r   r   from_tuplesr.   r/   rz  s       r   %test_parser_error_on_empty_header_row2TestReadHtml.test_parser_error_on_empty_header_rowA  sd    !
 q6
  3ZL**,.IJ
 	fQi2r    c                     U" [        S5      SS9S   n[        SS0S/S9nUS   R                  [        R                  " S5      :X  d   e[        R
                  " X#5        g )	Na  <html>
            <body>
             <table>
                <thead>
                    <tr>
                        <th>Header</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1100#101</td>
                    </tr>
                </tbody>
            </table>
            </body>
        </html>#)decimalr   r~  gClg0@r  r  )r   r   ru   r{   r.   r/   rz  s       r   test_decimal_rowsTestReadHtml.test_decimal_rowsZ  sm    !$ '
( ), 8X"6qcBh%%))<<<<
f/r    argTFc                     [         R                  " S5      n[        R                  " [        US9   U" XS9  S S S 5        g ! , (       d  f       g = f)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  )r[  escaperD   rG   r  )rb   ri   r  r[   r5   s        r   test_bool_header_arg!TestReadHtml.test_bool_header_argw  s;     ii

 ]]9C0Y3 100s   A  
Ac                     U" [        S5      S[        0S9S   n[        SSS/05      n[        R                  " X#5        g )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   r  r   z0.763z0.244)r   r  r   r.   r/   rz  s       r   test_convertersTestReadHtml.test_converters  sP    !" Sz%
& '* cGW#567
f/r    c                     U" [        S5      S/S9S   n[        SS[        R                  /05      n[        R
                  " X#5        g )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   r{   r   r.   r/   rz  s       r   test_na_valuesTestReadHtml.test_na_values  sQ    !" g%
& '* cE266?34
f/r    c                     Sn[        SSS/05      nU" [        U5      SS9S   n[        R                  " X45        [        S[        R
                  [        R
                  /05      nU" [        U5      SS9S   n[        R                  " X45        g )	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/   r{   r   )rb   r[   	html_dataexpected_dfhtml_dfs        r   test_keep_default_na!TestReadHtml.test_keep_default_na  s     	   udm 45"8I#6NqQ
k3rvvrvv&6 78"8I#6MaP
k3r    c                     U" [        S5      5      S   n[        SS/[        R                  [        R                  //SS/S9n[        R
                  " X#5        g )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   rv  rw  rx  r#  rz  s       r   test_preserve_empty_rows%TestReadHtml.test_preserve_empty_rows  sZ    !
& '* C:/?"@3PS*U
f/r    c                     U" [        S5      5      S   n[        SS/SS//SS/SS//S9n[        SS	//US
9n[        R                  " X$5        g )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   rv  rw  r   r   r   r  rp   rx  r  r  s        r   ,test_ignore_empty_rows_when_inferring_header9TestReadHtml.test_ignore_empty_rows_when_inferring_header  sl    !
 " c3Z#s$<aVaQRVDTUAq6(G<
f/r    c                     [        / SQS9n/ SQ/ SQ/Ul        UR                  SS9nU" [        U5      5      S   n[        R
                  " X$5        g )N))HillaryD   r  )BernieJ   r  )DonaldE   R)r   )r  AgeParty)NamezUnnamed: 1_level_1zUnnamed: 2_level_1Fr   r   )r   rw   r   r   r.   r/   )rb   r[   r)  r@   r*  s        r   test_multiple_header_rows&TestReadHtml.test_multiple_header_rows  sW    Q
 3@
 """/"8D>215
k3r    c                     U" SSSS5      nU" USS9n[        U[        5      (       d   e[        US   [        5      (       d   eg )Nr   r   r@   rS   r   r  )r%   r   r   )rb   r   r[   rU   r   s        r   test_works_on_valid_markup'TestReadHtml.test_works_on_valid_markup  sI    D&&2EFx15#t$$$$#a&),,,,r    c                 .    U" SSSS5      nU" USSS/S9  g )	Nr   r   r@   rl   r   rR   r<   rM   rg   )rb   r   r[   rm   s       r   test_fallback_success"TestReadHtml.test_fallback_success  s#     vvGk6:BVWr    c                     [        SSS9n[        [        R                  R	                  S5      R                  S5      US9nUR                  5       nSU;   d   eg )Nz
2000-01-01r  r  rp   )r  rq   r   )r   r   r{   r|   r}   standard_normalr   )rb   rngr   r   s       r   test_to_html_timestamp#TestReadHtml.test_to_html_timestamp  sN    r2ryy,,Q/??HPSTv%%%r    c                 P   [        SSS./5      nUR                  5       nUR                  SS9nUR                  SS9nUR                  SS9nUR                  SS9nUR                  SS9nSU;   d   eX2:X  d   eX$:X  d   eX%:w  d   eS	U;   d   eS
U;  d   eSU;  d   eXg:X  d   eg )Nr   rp   rv  rw  T)borderr   Fz border="1"z border="2"z border="0"z border)r   r   )rb   r   out_border_defaultout_border_trueout_border_explicit_defaultout_border_nondefaultout_border_zeroout_border_falses           r   test_to_html_borderless$TestReadHtml.test_to_html_borderless"  s    aa()*ZZ\**D*1&(jjj&:# "

!
 4**A*.::U:3 2222444!@@@!::: 5555O333 0000222r    zdisplayed_only,exp0,exp1fooNzfoo  bar  baz  quxc                     SnU" [        U5      US9n[        R                  " US   U5        Ub  [        R                  " US   U5        g [        U5      S:X  d   eg )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*   )rb   rY  exp0exp1r[   r   r   s          r   test_displayed_only TestReadHtml.test_displayed_only5  sY    ( x~nM
c!fd+!!#a&$/s8q= =r    rY  c                 ~    SnU" [        U5      US9S   n[        SS/SS/S.5      n[        R                  " XE5        g )	NaW  
        <table>
            <tr>
                <th>A</th>
                <th>B</th>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
            </tr>
            <tr>
                <td><span style="display:none"></span>4</td>
                <td>5</td>
            </tr>
        </table>
        rX  r   r   rq   rp   r  rL  ry  )rb   rY  r[   
html_tabler   r   s         r   &test_displayed_only_with_many_elements3TestReadHtml.test_displayed_only_with_many_elementsZ  sK    
  "(:"6~V
 Aq6A78
f/r    z\ignore:You provided Unicode markup but also provided a value for from_encoding.*:UserWarningc                    [         R                  R                  U5      n[         R                  R                  U5      S   nUR	                  S5      u  pV [        US5       nU" UR                  5       USS9R                  5       nS S S 5        [        US5       nU" [        UR                  5       5      USS9R                  5       n	S S S 5        U" XSS9R                  5       n
[        R                  " WW	5        [        R                  " X5        g ! , (       d  f       N= f! , (       d  f       Nb= f! [         a2    [        5       (       a!  SU;   d  SU;   a  [        R                  " 5         e f = f)Nr   _rb)r   rT   1632)r6  r7  basenamesplitextsplitr   r   popr   r.   r/   	Exceptionr	   rD   skip)rb   r   r[   	base_pathrootrc  r   fobjfrom_stringfrom_file_likefrom_filenames              r   test_encodeTestReadHtml.test_encoder  s4   
 GG$$%78	ww	*1-jjo	($/4.IIK(a#%  0
 ($/4!1DIIK(8q"#%  0
 -"ce  !!+~>!!+= 0/
 0/  	"$$8#tx'7KKM	s=   D6 "%DD6 .D%	A
D6 
D"D6 %
D3/D6 6<E2c                 0   UR                   R                  S5      S:X  a  [        R                  " S5         " S S[        5      nU" S5      nU" U5      (       d   e[        R
                  " [        SS9   U" U5        S S S 5        g ! , (       d  f       g = f)	NrC   rR   zNot applicable for lxmlc                       \ rS rSrS rSrg)FTestReadHtml.test_parse_failure_unseekable.<locals>.UnseekableStringIOi  c                     gNFrg   rd  s    r   seekableOTestReadHtml.test_parse_failure_unseekable.<locals>.UnseekableStringIO.seekable  s    r    rg   N)__name__
__module____qualname____firstlineno__rz  __static_attributes__rg   r    r   UnseekableStringIOrw    s    r    r  z?
            <table><tr><td>spam<foobr />eggs</td></tr></table>z#passed a non-rewindable file objectr>   )keywordsgetrD   rl  r   rG   rN   )rb   r[   r  bads       r   test_parse_failure_unseekable*TestReadHtml.test_parse_failure_unseekable  s     $$((2f<KK12	 	 !B

  $$$$]]:-RSS! TSSs   5	B
Bc                 t     " S S5      nU" S5      nU" S5      nU" U5      (       d   eU" U5      (       d   eg )Nc                   H    \ rS rSrSS jrSS jrS rS rS rS\	4S	 jr
S
rg)9TestReadHtml.test_parse_failure_rewinds.<locals>.MockFilei  returnNc                     Xl         SU l        g ry  )r   at_end)rb   r   s     r   __init__BTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__init__  s     	#r    c                 R    U R                   (       a  SOU R                  nSU l         U$ )Nr  Tr  r   )rb   sizer   s      r   r   >TestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.read  s    ![[rdii"r    c                     SU l         g ry  )r  )rb   offsets     r   seek>TestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.seek  s	    #r    c                     g)NTrg   rd  s    r   rz  BTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.seekable  s    r    c                     g r#   rg   rd  s    r   __next__BTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__next__  s    r    c                     U $ r#   rg   rd  s    r   __iter__BTestReadHtml.test_parse_failure_rewinds.<locals>.MockFile.__iter__  s	     r    r  )r  Nr#   )r|  r}  r~  r  r  r   r  rz  r  r   r  r  rg   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>rg   )rb   r[   r  goodr  s        r   test_parse_failure_rewinds'TestReadHtml.test_parse_failure_rewinds  sF    	 	2 IJKL%%%%$$$$r    c                     " S S[         R                  5      nU" SSSS5      nU" X$4S9nU" X$4S9nUR                  5         UR                  5         UR                  5       (       d  UR                  5       (       a/   UR                  5       (       a  M  UR                  5       (       a  M/  S UR                  s=L a  UR                  L d   e   eg )Nc                   (   ^  \ rS rSrU 4S jrSrU =r$ )@TestReadHtml.test_importcheck_thread_safety.<locals>.ErrorThreadi  c                 l   >  [         TU ]  5         S U l        g ! [         a  nXl         S nAg S nAff = fr#   )superrunerrrk  )rb   r  	__class__s     r   r  DTestReadHtml.test_importcheck_thread_safety.<locals>.ErrorThread.run  s3    $GKM  $DH ! #"HH#s    
3.3)r  )r|  r}  r~  r  r  r  __classcell__)r  s   @r   ErrorThreadr    s    $ $r    r  r   r   r@   rS   )targetr3   )	threadingThreadstartis_aliver  )rb   r   r[   r  rU   helper_thread1helper_thread2s          r   test_importcheck_thread_safety+TestReadHtml.test_importcheck_thread_safety  s    
	$)** 	$ D&&2EF$,<;O$,<;O%%''>+B+B+D+D %%''>+B+B+D+D~))?^-?-??????r    c                     U" SSSS5      n[        U5      nU" U5      S   nU" U5      S   n[        R                  " XV5        g )Nr   r   r@   rA   r   )r   r.   r/   )rb   r   r[   file_path_string	file_pathr   r   s          r   test_parse_path_object#TestReadHtml.test_parse_path_object  sK    #D&&+F)*	/03y)!,
c'r    c                 r    U" [        S5      5      S   n[        S//S/S9n[        R                  " X#5        g )Nz
            <table>
                <tr>
                    <th>A</th>
                </tr>
                <tr>
                    <td>word1<br>word2</td>
                </tr>
            </table>
        r   zword1 word2rv  rx  ry  rz  s       r   test_parse_br_as_space#TestReadHtml.test_parse_br_as_space  sF    !	
  M?"3cUC
f/r    )r+   bodyr   r  c                 h   Sn/ SQ/ SQ/ SQ/ SQ/ SQ/ SQS.nUS	   nUS
   nUS   nUS:X  a  US   nUS   nUS   nO#US:X  a  US   nOUS:X  a  US   nOUS:X  a  US   nU" [        U5      US9S   n[        XV/US9n	U	R                  [        R                  5      n	[
        R                  " X5        g )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))r  z)https://en.wikipedia.org/wiki/Page_footer)r  1N)head_ignorehead_extractbody_ignorebody_extractfooter_ignorefooter_extractr  r  r  r+   r  r  r  r  r  r   extract_linksr   rv   )r   r   fillnar{   r   r.   r/   )
rb   r  r[   gh_13141_datagh_13141_expecteddata_expfoot_exphead_expr   r   s
             r   test_extract_linksTestReadHtml.test_extract_links  s    0 7
 P

%
2 %]3$_5$]3%<(8H()9:H(8HF](8HH_()9:HH_(8H!(="9MaPh18D??266*
f/r    c                     Sn[         R                  " [        US9   [        USS9  S S S 5        g ! , (       d  f       g = f)NzY`extract_links` must be one of {None, "header", "footer", "body", "all"}, got "incorrect"r>   	incorrectr  rD   rG   rN   r   )rb   ri   r5   s      r   test_extract_links_bad#TestReadHtml.test_extract_links_badC  s3    I 	 ]]:S1i{; 211rA  c                 t    SnU" [        U5      SS9S   n[        S//5      n[        R                  " X45        g )Nz
        <table>
          <tr>
            <td>
              <a href='https://google.com'>Google.com</a>
            </td>
          </tr>
        </table>
        r+   r  r   )z
Google.comzhttps://google.comry  rb   r[   r   r   r   s        r    test_extract_links_all_no_header-TestReadHtml.test_extract_links_all_no_headerK  s?     "(4.FqICDEF
f/r    c                     Sn[         R                  " [        US9   [        SSS9  S S S 5        g ! , (       d  f       g = f)NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r>   testnumpyr   r  )rb   r5   s     r   test_invalid_dtype_backend'TestReadHtml.test_invalid_dtype_backendZ  s2    % 	 ]]:S1fG4 211rA  c                     SnU" [        U5      5      S   n[        SS/SS//SS/S	9n[        R                  " X45        g )
Na  
        <table>
            <tr>
                <th>
                    <style>.style</style>
                    A
                    </th>
                <th>B</th>
            </tr>
            <tr>
                <td>A1</td>
                <td>B1</td>
            </tr>
            <tr>
                <td>A2</td>
                <td>B2</td>
            </tr>
        </table>
        r   A1B1A2B2rv  rw  rx  ry  r  s        r   test_style_tagTestReadHtml.test_style_tagb  sI    & "(4.1!4D$<$">c
S
f/r    rg   )fr|  r}  r~  r  rc   rD   fixtureri   rm   r   r   marknetwork
single_cpur   r   slowr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r"  r%  r(  r/  r2  r:  r?  rF  rI  rL  rP  rT  rW  r]  ra  re  ri  rp  rs  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  parametrizer  r  r$  r+  r.  r1  r>  rA  rD  rI  rT  r   r\  r`  filterwarningsrs  r  r  r  r  r  r  r  r  r  r  r  rg   r    r   r]   r]   p   sp   @ ^^; ; ^^? ?':0x [[[[)  )  [[[[)  ) [[) )/-
-

))))))))L)
)
)
)	))) [[[[D  D
 [[[[[[@   @
 [[- - [[  [[2 2 [[0 0 [[	0 	0 [[2 2 [[2 2 [[
2 
2 [[	- 	-D
 ^^. .` [[[[  
 [[[[.  . 60@040@$2L02 [[-0 -0^ [[	$ 	$F0P02!0F0@0:0*08*->X320: [[UT5M24 34060642040.4- [[X X
&3& [["9eW%t,I345y%7IJ	
!!< [[-e}=0 >0. [[	&	8"( %D [[[[@  @.(0* [[U$GHB0 IB0H<050r    r]   )4collections.abcr   	functoolsr   r   r   r   r6  pathlibr   r[  r  urllib.errorr   r  r{   rD   pandas.compatr	   pandas.util._test_decoratorsutil_test_decoratorstdpandasr~   r
   r   r   r   r   r   r   r   r   pandas._testing_testingr.   pandas.core.arraysr   r   pandas.io.commonr   r  r   r9   rJ   rP   rX   r   
skip_if_nor[   r]   rg   r    r   <module>r     s    $  
  	  !   - ) ) 
 
 
 
 . BB
:(M@. U2==#7z9R"STV2==#8944I0 I0r    