U
    sVc                     @  s  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	 d dl
mZ d dlmZ d dlZd dlZd dlmZ d d	lmZ d d
lmZmZ d dlm  mZ d dlmZ d dlmZ  d dl!m"Z" d dl#m$Z$ edddgdddgdej%dgdZ&dZ'dZ(eddddddddddddd d d d d dd d d d d dd!d!d!d!d!dd"d#d$d%d&dd'Z)ej*d(d)gd*d+d, Z+ej*ej,d-e-d-d.d/gd*d0d1 Z.d2d3 Z/d4d5 Z0e-d-d6d7 Z1ej2j3ej2j4e j3d8d9d:d;d< Z5d=d> Z6d?d@ Z7dAdB Z8dCdD Z9dEdF Z:dGdH Z;dIdJ Z<e-d-ej2=dKdLdMgdNdO Z>ej2=dKdLdMgdPdQ Z?e-d-dRdS Z@dTdU ZAej2j3e j3dVd9d:e-d-dWdX ZBej2j3e j3dYd9d:dZd[ ZCe-d-d\d] ZDd^d_ ZEe-d-d`da ZFdbdc ZGddde ZHe-d-dfdg ZIe-d-dhdi ZJdjdk ZKdldm ZLe-d-dndo ZMe-d-ej2=dpdLdgdqdr ZNdsdt ZOdudv ZPdwdx ZQdydz ZRe-d-d{d| ZSd}d~ ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\e-d-dd Z]e-d-dd Z^dd Z_e`d-dd Zadd Zbe-d-dd Zcdd Zde-d-dd Zee-d-dd Zfe-d-dd Zge-d-dd Zhe-d-dd Zie-d-dd Zje-d-dd Zke-d-dd Zle-d-dd Zme-d-dd Zne-d-dd Zoe-d-ej2=dKdLdMgdd Zpdd Zqdd Zrej2j3e j3dVd9d:dd Zsdd Ztdd Zudd Zvdd ZwddĄ ZxddƄ ZyddȄ Zzddʄ Z{dd̄ Z|ej2j3e-d-e j3dd9d:ddτ Z}ddф Z~ddӄ ZddՄ Zej2j3e-d֡e-d-ej2je dd؍e j3ddڄ ZdS )    )annotations)BytesIOStringIO)	LZMAErrorN)	ReadError)	HTTPError)
BadZipFile)is_ci_environment)import_optional_dependency)EmptyDataErrorParserError)	DataFrame)
get_handle)read_xmlsquarecircletriangleh           shapedegreessidesa[  <?xml version='1.0' encoding='utf-8'?>
<data xmlns="http://example.com">
  <row>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4</sides>
  </row>
  <row>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3</sides>
  </row>
</data>a  <?xml version='1.0' encoding='utf-8'?>
<doc:data xmlns:doc="http://example.com">
  <doc:row>
    <doc:shape>square</doc:shape>
    <doc:degrees>360</doc:degrees>
    <doc:sides>4.0</doc:sides>
  </doc:row>
  <doc:row>
    <doc:shape>circle</doc:shape>
    <doc:degrees>360</doc:degrees>
    <doc:sides/>
  </doc:row>
  <doc:row>
    <doc:shape>triangle</doc:shape>
    <doc:degrees>180</doc:degrees>
    <doc:sides>3.0</doc:sides>
  </doc:row>
</doc:data>ZID_00001ZID_00002ZID_00003ZID_00004ZID_00005r         r   r   zBlue Line (Forest Park)zRed, Purple Linez#LineStyle01ZclampedToGroundz-87.77678526964958,41.8708863930319,0 -87.77826234150609,41.87097820122218,0 -87.78251583439344,41.87130129991005,0 -87.78418294588424,41.87145055520308,0 -87.7872369165933,41.8717239119163,0 -87.79160214925886,41.87210797280065,0a\  -87.65758750947528,41.96427269188822,0 -87.65802133507393,41.96581929055245,0 -87.65819033925305,41.96621846093642,0 -87.6583189819129,41.96650362897086,0 -87.65835858701473,41.96669002089185,0 -87.65838428411853,41.96688150295095,0 -87.65842208882658,41.96745896091846,0 -87.65846556843937,41.9683761425439,0 -87.65849296214573,41.96913893870342,0a  -87.65492939166126,41.95377494531437,0 -87.65557043199591,41.95376544118533,0 -87.65606302030132,41.95376391658746,0 -87.65623502146268,41.95377379126367,0 -87.65634748981634,41.95380103566435,0 -87.65646537904269,41.95387703994676,0 -87.65656532461145,41.95396622645799,0 -87.65664760856414,41.95404201996044,0 -87.65671750555913,41.95416647054043,0 -87.65673983607117,41.95429949810849,0 -87.65673866475777,41.95441024240925,0 -87.6567690255541,41.95490657227902,0 -87.65683672482363,41.95692259283837,0 -87.6568900886376,41.95861070983142,0 -87.65699865558875,41.96181418669004,0 -87.65756347177603,41.96397045777844,0 -87.65758750947528,41.96427269188822,0ah  -87.65362593118043,41.94742799535678,0 -87.65363554415794,41.94819886386848,0 -87.6536456393239,41.95059994675451,0 -87.65365831235026,41.95108288489359,0 -87.6536604873874,41.9519954657554,0 -87.65362592053201,41.95245597302328,0 -87.65367158496069,41.95311153649393,0 -87.65368468595476,41.9533202828916,0 -87.65369271253692,41.95343095587119,0 -87.65373335834569,41.95351536301472,0 -87.65378605844126,41.95358212680591,0 -87.65385067928185,41.95364452823767,0 -87.6539390793817,41.95370263886964,0 -87.6540786298351,41.95373403675265,0 -87.65430648647626,41.9537535411832,0 -87.65492939166126,41.95377494531437,0a   -87.65345391792157,41.94217681262115,0 -87.65342448305786,41.94237224420864,0 -87.65339745703922,41.94268217746244,0 -87.65337753982941,41.94288140770284,0 -87.65336256753105,41.94317369618263,0 -87.65338799707138,41.94357253961736,0 -87.65340240886648,41.94389158188269,0 -87.65341837392448,41.94406444407721,0 -87.65342275247338,41.94421065714904,0 -87.65347469646018,41.94434829382345,0 -87.65351486483024,41.94447699917548,0 -87.65353483605053,41.9453896864472,0 -87.65361975532807,41.94689193720703,0 -87.65362593118043,41.94742799535678,0)idnamestyleUrlextrudealtitudeModecoordinatesrbr)paramsc                 C  s   | j S Nparamrequest r,   @/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/io/xml/test_xml.pymode   s    r.   lxml)Zmarksetreec                 C  s   | j S r'   r(   r*   r,   r,   r-   parser   s    r1   c              
   K  sL   t  :}t|d}||  W 5 Q R X t|f|W  5 Q R  S Q R X d S )Nw)tmensure_cleanopenwriter   )datakwargspathfr,   r,   r-   read_xml_iterparse   s    
r;   c                 K  sx   t | d|d`}t L}t|d}||j  W 5 Q R X t|f|W  5 Q R  W  5 Q R  S Q R X W 5 Q R X d S )Nr%   )compressionr2   )r   r3   r4   r5   r6   handlereadr   )	comp_pathcompression_onlyr8   Zhandlesr9   r:   r,   r,   r-   read_xml_iterparse_comp  s
    
rA   c              	   C  s   | dddd}t |dd}t |dd}t |ddd	d
dddgid}t |ddd	d
dddgid}t|| t|| t|| d S )Nior7   xml	books.xmlr/   r1   r0   bookcategorytitleyearauthorpricer1   	iterparser   r3   assert_frame_equal)datapathfilenameZdf_file_lxmlZdf_file_etreedf_iter_lxmldf_iter_etreer,   r,   r-   test_parser_consistency_file  s     rT   Ohttps://data.cityofchicago.org/api/views/8pix-ypme/rows.xml?accessType=DOWNLOADT)urlZcheck_before_testc                 C  s   d}t jddf}t|d| dj|dd t|| d}t|| d	d
ddddddddddddddddddddgid}W 5 Q R X t || d S ) NrU   zcta.xmlrQ   z
.//row/rowxpathr1   FindexrE   rowZ_idZ_uuid	_positionZ_addressZstop_idZdirection_idZ	stop_nameZstation_nameZstation_descriptive_nameZmap_idZadaZredZbluegZbrnpZpexpyZpnkolocationrL   )r3   r4   r   to_xmlrO   )r1   rV   r9   df_xpathdf_iterr,   r,   r-   test_parser_consistency_url$  sD    rf   c              	   C  sr   | dddd}t ||}t||d}W 5 Q R X tdddgd	d
dgdddgdddgdddgd}t|| d S NrB   r7   rC   rD   rE   cookingchildrenwebEveryday ItalianHarry PotterLearning XMLGiada De LaurentiisJ K. RowlingErik T. Ray          >@=
ףp=@皙C@rG   rH   rJ   rI   rK   )r5   r   r   r3   rO   )rP   r1   r.   rQ   r:   df_filedf_expectedr,   r,   r-   test_file_likeX  s    
ry   c              	   C  s   | dddd}t ||}| }W 5 Q R X tt|tr@t|nt||d}tdddgd	d
dgdddgdddgdddgd}t	|| d S rg   )
r5   r>   r   
isinstancebytesr   r   r   r3   rO   )rP   r1   r.   rQ   r:   xml_objZdf_iorx   r,   r,   r-   test_file_ioj  s     
r}   c              	   C  sz   | dddd}t ||}| }W 5 Q R X t||d}tdddgd	d
dgdddgdddgdddgd}t|| d S rg   )r5   r>   r   r   r3   rO   rP   r1   r.   rQ   r:   r|   df_strrx   r,   r,   r-    test_file_buffered_reader_string  s    
r   c              	   C  s   | dddd}t ||}t| | }W 5 Q R X t||d}tdddgd	d
dgdddgdddgdddgd}t|| d S rg   )r5   nextr>   r   r   r3   rO   r~   r,   r,   r-   ,test_file_buffered_reader_no_xml_declaration  s    
r   c                 C  s4   d}t || d}tddddgd}t|| d S )N<   <中文標籤><row><c1>1</c1><c2>2</c2></row></中文標籤>rE   r   r   )Zc1c2r   rZ   r   r   r3   rO   )r1   txtr   rx   r,   r,   r-   test_string_charset  s    r   c                 C  sP   | dddd}t | ||d}tdddgd	d d
gd dd gd}t|| d S )NrB   r7   rC   zdoc_ch_utf.xmlrE   uP   問  若箇是邪而言破邪 何者是正而道(Sorry, this is Big5 only)申正u;   問 既破有得申無得 亦應但破性執申假名以不uO   問 既破性申假 亦應但破有申無 若有無兩洗 亦應性假雙破耶uw   答  邪既無量 正亦多途  大略為言不出二種 謂有得與無得 有得是邪須破 無得是正須申
		故uL   答  不例  有無皆是性 所以須雙破 既分性假異 故有破不破uV   答 性執是有得 假名是無得  今破有得申無得 即是破性執申假名也)u   問u   答ar   )rP   r1   xml_filerw   rx   r,   r,   r-   test_file_charset  s    r   c              	   C  sF   | dddd}t |d$}tt| |d |jr8tW 5 Q R X d S )NrB   r7   rC   rD   r$   rE   )r5   r   r   r>   closedAssertionError)rP   r1   r   r:   r,   r,   r-   test_file_handle_close  s    r   val     c              	   C  sD   ddl m} dddg}tj||d t| dd W 5 Q R X d S )	Nr   XMLSyntaxError|zDocument is emptyzNone \(line 0\)matchr/   rE   )
lxml.etreer   joinpytestraisesr   )r   r   msgr,   r,   r-   test_empty_string_lxml  s    r   c              	   C  s6   ddl m} tj|dd t| dd W 5 Q R X d S )Nr   
ParseErrorzno element foundr   r0   rE   )xml.etree.ElementTreer   r   r   r   )r   r   r,   r,   r-   test_empty_string_etree  s    r   c               	   C  sF   ddl m}  tjddd}tj| dd t|dd	 W 5 Q R X d S )
Nr   r   r7   htmlrD   !Start tag expected, '<' not foundr   r/   rE   r   r   osr9   r   r   r   r   )r   rQ   r,   r,   r-   test_wrong_file_path_lxml  s    r   c               	   C  sF   ddl m}  tjddd}tj| dd t|dd	 W 5 Q R X d S )
Nr   r   r7   r   rD   znot well-formedr   r0   rE   )r   r   r   r9   r   r   r   r   )r   rQ   r,   r,   r-   test_wrong_file_path_etree  s    r   'https://www.w3schools.com/xml/books.xmlc               	   C  sZ   d} t | dd}tdddgddd	gd
ddgdddgdddgd d dgd}t|| d S )Nr   .//book[count(*)=4]rY   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   Z	paperback)rG   rH   rJ   rI   rK   Zcoverr   )rV   Zdf_urlrx   r,   r,   r-   test_url  s    r   (https://www.w3schools.com/xml/python.xmlc              	   C  s0   t jtdd d}t|d| d W 5 Q R X d S )NzHTTP Error 404: Not Foundr   r   r   rX   )r   r   r   r   r1   rV   r,   r,   r-   test_wrong_url  s    r   c              	   C  s:   | dddd}t jtdd t|ddd	 W 5 Q R X d S )
NrB   r7   rC   rD   xpath does not return any nodesr   z	.//pythonr/   rX   r   r   
ValueErrorr   rP   rQ   r,   r,   r-   test_empty_xpath_lxml)  s    r   c              	   C  s:   | dddd}t jtdd t|ddd	 W 5 Q R X d S )
NrB   r7   rC   rD   z/You have used an incorrect or unsupported XPathr   	.//[book]r0   rX   r   r   SyntaxErrorr   r   r,   r,   r-   test_bad_xpath_etree0  s     r   c              	   C  sF   ddl m} | dddd}tj|dd t|d	d
d W 5 Q R X d S )Nr   XPathEvalErrorrB   r7   rC   rD   zInvalid expressionr   r   r/   rX   r   r   r   r   r   rP   r   rQ   r,   r,   r-   test_bad_xpath_lxml8  s    r   c                 C  sn   t tdddi| d}tt| ddddgid	}td
ddgdddgdtddgd}t|| t|| d S )N	.//ns:rownshttp://example.comrY   
namespacesr1   r\   r   r   r   rL   r   r   r   r   r         @nan      @r   )r   xml_default_nmspr;   r   floatr3   rO   r1   Zdf_nmspre   rx   r,   r,   r-   test_default_namespaceD  s&    r   c                 C  sn   t tdddi| d}tt| ddddgid	}td
ddgdddgdtddgd}t|| t|| d S )N
.//doc:rowdocr   r   r\   r   r   r   rL   r   r   r   r   r   r   r   r   r   )r   xml_prefix_nmspr;   r   r   r3   rO   r   r,   r,   r-   test_prefix_namespace^  s&      r   c                  C  s8   t tdddidd} t tdddidd}t| | d S )	Nr   r   r   r/   r   r   r   r0   )r   r   r3   rO   df_lxmldf_etreer,   r,   r-   "test_consistency_default_namespaceu  s    r   c                  C  s8   t tdddidd} t tdddidd}t| | d S )Nr   r   r   r/   r   r0   )r   r   r3   rO   r   r,   r,   r-   !test_consistency_prefix_namespace  s    r   c              	   C  s:   | dddd}t jtdd t|d|d W 5 Q R X d S )	NrB   r7   rC   rD   r   r   z.//PlacemarkrX   r   rP   r1   rQ   r,   r,   r-   *test_missing_prefix_with_default_namespace  s    r   c              	   C  s:   | dddd}t jtdd t|ddd	 W 5 Q R X d S )
NrB   r7   rC   cta_rail_lines.kmlz'you used an undeclared namespace prefixr   .//kml:Placemarkr0   rX   r   r   r,   r,   r-   $test_missing_prefix_definition_etree  s    r   c              	   C  sF   ddl m} | dddd}tj|dd t|d	d
d W 5 Q R X d S )Nr   r   rB   r7   rC   r   zUndefined namespace prefixr   r   r/   rX   r   r   r,   r,   r-   #test_missing_prefix_definition_lxml  s    r   keyc              	   C  s2   t jtdd ttd| didd W 5 Q R X d S )Nz0empty namespace prefix is not supported in XPathr   r   http://www.opengis.net/kml/2.2r/   r   )r   r   	TypeErrorr   r   )r   r,   r,   r-   test_none_namespace_prefix  s     r   c              	   C  s   | dddd}t ||d}t ||dddd	d
dgid}tdddgdddgdddgdddgdddgd}t|| t|| d S )NrB   r7   rC   rD   rE   rF   rG   rH   rJ   rI   rK   rL   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   r   rP   r1   rQ   rw   re   rx   r,   r,   r-   test_file_elems_and_attrs  s"    
r   c                 C  s^   | dddd}t |d|d}t ||ddgid	}tdd
ddgi}t|| t|| d S )NrB   r7   rC   rD   T)
attrs_onlyr1   rF   rG   rL   rh   ri   rj   r   r   r,   r,   r-   test_file_only_attrs  s    r   c                 C  s|   | dddd}t |d|d}t ||ddd	d
dgid}tdddgdddgdddgdddgd}t|| t|| d S )NrB   r7   rC   rD   T)
elems_onlyr1   rF   rH   rJ   rI   rK   rL   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   )rH   rJ   rI   rK   r   r   r,   r,   r-   test_file_only_elems  s     	r   c              	   C  s<   | dddd}t jtdd t|dd|d W 5 Q R X d S )	NrB   r7   rC   r   z3Either element or attributes can be parsed not bothr   T)r   r   r1   r   r   r,   r,   r-   test_elem_and_attrs_only  s    r   c                  C  sd   d} t | dd}t | ddd}t| dddgid	}t| ddddgid
}t|| t|| d S )Na  <?xml version="1.0" encoding="UTF-8"?>
<TrainSchedule>
      <Stations>
         <station Name="Manhattan" coords="31,460,195,498"/>
         <station Name="Laraway Road" coords="63,409,194,455"/>
         <station Name="179th St (Orland Park)" coords="0,364,110,395"/>
         <station Name="153rd St (Orland Park)" coords="7,333,113,362"/>
         <station Name="143rd St (Orland Park)" coords="17,297,115,330"/>
         <station Name="Palos Park" coords="128,281,239,303"/>
         <station Name="Palos Heights" coords="148,257,283,279"/>
         <station Name="Worth" coords="170,230,248,255"/>
         <station Name="Chicago Ridge" coords="70,187,208,214"/>
         <station Name="Oak Lawn" coords="166,159,266,185"/>
         <station Name="Ashburn" coords="197,133,336,157"/>
         <station Name="Wrightwood" coords="219,106,340,133"/>
         <station Name="Chicago Union Sta" coords="220,0,360,43"/>
      </Stations>
</TrainSchedule>z
.//stationr   r0   rX   ZstationNameZcoordsrM   rL   )r   r;   r3   rO   )rC   r   r   Z
df_iter_lxZ
df_iter_etr,   r,   r-   test_attribute_centric_xml  s      
r   c              
   C  s   | dddd}t |ddddd	g|d
}t ||ddddd	gddddddgid}tdddgdddgdddgdddgdddgd }t|| t|| d S )!NrB   r7   rC   rD   Col1Col2Col3Col4Col5namesr1   rF   rG   rH   rJ   rI   rK   )r1   r   rM   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   )r   r   r   r   r   r   r   r,   r,   r-   test_names_option_output'  s,      
r   c                 C  sr   d}t |d| dddgd}t|| ddddgidddgd	}td
dgddgddgd}t|| t|| d S )Nz<shapes>
  <shape type="2D">
    <name>circle</name>
    <type>curved</type>
  </shape>
  <shape type="3D">
    <name>sphere</name>
    <type>curved</type>
  </shape>
</shapes>.//shapetype_dimr   	type_edgerY   r1   r   typer   r1   rM   r   2D3Dr   sphereZcurved)r   r   r   r   r;   r   r3   rO   r1   rC   rd   re   rx   r,   r,   r-   test_repeat_namesA  s*       r   c                 C  sn   d}t |d| ddgd}t|| dddgiddgd}td	d
ddgd	d	ddgd}t|| t|| d S )NaB  <shapes>
  <shape>
    <name>rectangle</name>
    <family>rectangle</family>
  </shape>
  <shape>
    <name>square</name>
    <family>rectangle</family>
  </shape>
  <shape>
    <name>ellipse</name>
    <family>ellipse</family>
  </shape>
  <shape>
    <name>circle</name>
    <family>ellipse</family>
  </shape>
</shapes>r   r   groupr   r   familyr   Z	rectangler   Zellipser   )r   r   r   r   r,   r,   r-   test_repeat_values_new_namesd  s    


r   c              	   C  s@   | dddd}t jtdd t|ddd	g|d
 W 5 Q R X d S )NrB   r7   rC   rD   znames does not match lengthr   r   r   r   r   r   r   r,   r,   r-   test_names_option_wrong_length  s    r   c              	   C  s:   | dddd}t jtdd t|d|d W 5 Q R X d S )	NrB   r7   rC   rD   zis not a valid type for namesr   zCol1, Col2, Col3r   r   r   r   r   r   r,   r,   r-   test_names_option_wrong_type  s    r   c              	   C  s8   | dddd}t jtdd t||d W 5 Q R X d S )NrB   r7   rC   baby_names.xmlz'utf-8' codec can't decoder   rE   r   r   UnicodeDecodeErrorr   r   r,   r,   r-   test_wrong_encoding  s    r  c              	   C  s:   | dddd}t jtdd t|d|d W 5 Q R X d S )	NrB   r7   rC   r   zIUTF-16 stream does not start with BOM|'utf-16-le' codec can't decode byter   zUTF-16encodingr1   )r   r   UnicodeErrorr   r   r,   r,   r-   test_utf16_encoding  s    r  c              	   C  s:   | dddd}t jtdd t|d|d W 5 Q R X d S )	NrB   r7   rC   r   zunknown encoding: UFT-8r   zUFT-8r  )r   r   LookupErrorr   r   r,   r,   r-   test_unknown_encoding  s    r  c              	   C  s:   | dddd}t jtdd t|d|d W 5 Q R X d S )	NrB   r7   rC   r   z'ascii' codec can't decode byter   asciir  r   r   r,   r,   r-   test_ascii_encoding  s    r	  c                 C  s   | dddd}t |ddd}t |dd	d}t |ddd
dddgid}t |ddd
dddgid}t|| t|| t|| d S )NrB   r7   rC   r   r/   z
ISO-8859-1r1   r  r0   z
iso-8859-1r\   ZrankZmalenameZ
femalename)r1   r  rM   rN   )rP   rQ   Zdf_xpath_lxmlZdf_xpath_etreerR   rS   r,   r,   r-   %test_parser_consistency_with_encoding  s$    r  c               	   C  s4   d} t jtdd tt| dd d W 5 Q R X d S )N-<data>
  <row>
    <a>c</a>
  </row>
</data>
zencoding Noner   r/   r
  )r   r   r   r   r   )r7   r,   r,   r-   test_wrong_encoding_for_lxml  s    r  c                  C  s4   d} t t| dd d}tddgi}t|| d S )Nr  r0   r
  r   c)r   r   r   r3   rO   )r7   resultexpectedr,   r,   r-   test_none_encoding_etree  s    r  c              	   C  s4   | dddd}t jtdd t| W 5 Q R X d S )NrB   r7   rC   rD   z7lxml not found, please install or use the etree parser.r   )r   r   ImportErrorr   r   r,   r,   r-   test_default_parser_no_lxml  s     r  c              	   C  s8   | dddd}t jtdd t|dd W 5 Q R X d S )	NrB   r7   rC   rD   z,Values for parser can only be lxml or etree.r   Zbs4rE   r   r   r,   r,   r-   test_wrong_parser  s     r  c              	   C  sh   | dddd}| dddd}t |dddi|d	}t |d
ddddddgid}tt| tt| d S )NrB   r7   rC   r   flatten_doc.xsl.//k:Placemarkkr   rY   r   
stylesheetZ	Placemarkr   r   r    r!   r"   r#   r   )r   r3   rO   df_kml)rP   kmlxsldf_stylere   r,   r,   r-   test_stylesheet_file  s,    r  c              	   C  s@   | dddd}t jtdd t|ddd	i|d
 W 5 Q R X d S )NrB   r7   rC   r   zkeyword-onlyr   r  r  r   )r   r1   )r3   Zassert_produces_warningFutureWarningr   )rP   r1   r  r,   r,   r-   .test_read_xml_passing_as_positional_deprecated$  s    r   c              	   C  sV   | dddd}| dddd}t ||}t|dddi|d	}W 5 Q R X tt| d S 
NrB   r7   rC   r   r  r  r  r   r  )r5   r   r3   rO   r  )rP   r.   r  r  r:   r  r,   r,   r-   test_stylesheet_file_like1  s    r"  c              	   C  sx   | dddd}| dddd}t ||(}|dkr>t| }nt| }W 5 Q R X t|ddd	i|d
}tt| d S )NrB   r7   rC   r   r  r$   r  r  r   r  )r5   r   r>   r   r   r3   rO   r  rP   r.   r  r  r:   xsl_objr  r,   r,   r-   test_stylesheet_ioA  s    r%  c              	   C  s^   | dddd}| dddd}t ||}| }W 5 Q R X t|dddi|d	}tt| d S r!  )r5   r>   r   r3   rO   r  r#  r,   r,   r-   test_stylesheet_buffered_readerX  s    r&  c                  C  s,   d} d}t | }t | |d}t|| d S )Nr   u  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="中文標籤">
     <根>
       <xsl:apply-templates />
     </根>
 </xsl:template>

</xsl:stylesheet>r  rN   )rC   r  Zdf_origr  r,   r,   r-   test_style_charsetj  s
    r(  c              	   C  sR   ddl m} | dddd}| dddd}tj|dd	 t||d
 W 5 Q R X d S )Nr   XSLTParseErrorrB   r7   rC   r   rD   zdocument is not a stylesheetr   r'  r   r*  r   r   r   )rP   r*  r  r  r,   r,   r-   test_not_stylesheet  s
    r,  c              	   C  sH   ddl m} d}| dddd}tj|dd	 t||d
 W 5 Q R X d S )Nr   r   a  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:k="http://www.opengis.net/kml/2.2"/>
    <xsl:output method="xml" omit-xml-declaration="yes"
                cdata-section-elements="k:description" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
    </xsl:template>

    <xsl:template match="k:MultiGeometry|k:LineString">
        <xsl:apply-templates select='*'/>
    </xsl:template>

    <xsl:template match="k:description|k:Snippet|k:Style"/>
</xsl:stylesheet>rB   r7   rC   r   z(Extra content at the end of the documentr   r'  )r   r   r   r   r   )rP   r   r  r  r,   r,   r-   test_incorrect_xsl_syntax  s     r-  c              	   C  sH   ddl m} d}| dddd}tj|dd	 t||d
 W 5 Q R X d S )Nr   r)  a  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:k="http://www.opengis.net/kml/2.2">
    <xsl:output method="xml" omit-xml-declaration="yes"
                cdata-section-elements="k:description" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node(*)|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
    </xsl:template>

    <xsl:template match="k:MultiGeometry|k:LineString">
        <xsl:apply-templates select='*'/>
    </xsl:template>

    <xsl:template match="k:description|k:Snippet|k:Style"/>
</xsl:stylesheet>rB   r7   rC   r   zfailed to compiler   r'  r+  )rP   r*  r  r  r,   r,   r-   test_incorrect_xsl_eval  s
    r.  c              	   C  sH   ddl m} d}| dddd}tj|dd	 t||d
 W 5 Q R X d S )Nr   )XSLTApplyErrorag  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:copy-of select="document('non_existent.xml')/*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>rB   r7   rC   r   zCannot resolve URIr   r'  )r   r/  r   r   r   )rP   r/  r  r  r,   r,   r-   test_incorrect_xsl_apply  s
    r0  c               	   C  sV   ddl m}  tjddd}tjddd}tj| dd t||d	 W 5 Q R X d S )
Nr   r   r7   rC   r   zflatten.xslr   r   r'  r   )r   r  r  r,   r,   r-   test_wrong_stylesheet  s    r1  c              	   C  sn   | dddd}| dddd}t ||>}|dkr>t| }nt| }t||d |jr`tW 5 Q R X d S )NrB   r7   rC   r   r  r$   r'  )r5   r   r>   r   r   r   r   )rP   r.   r  r  r:   r$  r,   r,   r-   test_stylesheet_file_close  s    r2  c               	   C  sL   t jddd} t jddd}tjtdd t| d|d W 5 Q R X d S )	Nr7   rC   r   r  z*To use stylesheet, you need lxml installedr   r0   )r1   r  )r   r9   r   r   r   r   r   )r  r  r,   r,   r-   test_stylesheet_with_etree  s     r3  c              	   C  sF   ddl m} tjddd}tj|dd t|| d W 5 Q R X d S )	Nr   r   r7   rC   r   z3Document is empty|Start tag expected, '<' not foundr   r'  r   )r   r   r  r,   r,   r-   test_empty_stylesheet  s     r4  c              	   C  s8   t jtdd  tt| dddddgid W 5 Q R X d S )	N)iterparse is designed for large XML filesr   r\   r   r   r   daterL   )r   r   r   r   r   rE   r,   r,   r-   test_string_error!  s     r7  c                 C  s\   | dddd}t jtdd6 t|"}t||ddd	d
ddgid W 5 Q R X W 5 Q R X d S )NrB   r7   rC   rD   r5  r   rF   rG   rH   rI   rJ   rK   rL   )r   r   r   r5   r   )rP   r1   r.   rQ   r:   r,   r,   r-   test_file_like_error,  s     
r8  c              	   C  s<   d}t jtdd  t|| dddddgid	 W 5 Q R X d S )
Nr   r5  r   r\   r   r   r   r6  rL   r   r   r   r   r   r,   r,   r-   test_url_path_error9  s     r:  c              
   C  sb   t jddL}tj|| |d tjtdd" t|| dddd	d
gi|d W 5 Q R X W 5 Q R X d S )Nzgeom_xml.ziprW   r1   r<   r5  r   r\   r   r   r   r6  r1   rM   r<   )r3   r4   geom_dfrc   r   r   r   r   )r1   r@   r9   r,   r,   r-   test_compression_errorG  s     r>  c              	   C  sD   | dddd}t jtdd t||ddd	d
dgd W 5 Q R X d S )NrB   r7   rC   rD   z&list is not a valid type for iterparser   rG   rH   rI   rJ   rK   rL   r   r   r,   r,   r-   test_wrong_dict_typeV  s    r?  c              	   C  s>   | dddd}t jtdd t||ddid	 W 5 Q R X d S )
NrB   r7   rC   rD   z8<class 'str'> is not a valid type for value in iterparser   rF   rG   rL   r   r   r,   r,   r-   test_wrong_dict_value`  s     r@  c                 C  sx   d}t jdd^}t|d}|| W 5 Q R X tjtdd$ t|| dgdd	d
ddgid W 5 Q R X W 5 Q R X d S )Na  <?xml version='1.0' encoding='utf-8'?>
  <row>
    <shape>square</shape>
    <degrees>00360</degrees>
    <sides>4.0</sides>
    <date>2020-01-01</date>
   </row>
  <row>
    <shape>circle</shape>
    <degrees>00360</degrees>
    <sides/>
    <date>2021-01-01</date>
  </row>
  <row>
    <shape>triangle</shape>
    <degrees>00180</degrees>
    <sides>3.0</sides>
    <date>2022-01-01</date>
  </row>
zbad.xmlrW   r2   zDExtra content at the end of the document|junk after document elementr   r6  r\   r   r   r   )r1   Zparse_datesrM   )r3   r4   r5   r6   r   r   r   r   )r1   Zbad_xmlr9   r:   r,   r,   r-   test_bad_xmlh  s    rA  c                 C  sZ   d}t |d| d}t|| dddgid}tdd	gd
dgd}t|| t|| d S )Na-  <!-- comment before root -->
<shapes>
  <!-- comment within root -->
  <shape>
    <name>circle</name>
    <type>2D</type>
  </shape>
  <shape>
    <name>sphere</name>
    <type>3D</type>
    <!-- comment within child -->
  </shape>
  <!-- comment within root -->
</shapes>
<!-- comment after root -->r   rX   r   r   r   rL   r   r   r   r   r   r   r   r   r,   r,   r-   test_comment  s      
rC  c                 C  sZ   d}t |d| d}t|| dddgid}tdd	gd
dgd}t|| t|| d S )Na8  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE non-profits [
    <!ELEMENT shapes (shape*) >
    <!ELEMENT shape ( name, type )>
    <!ELEMENT name (#PCDATA)>
]>
<shapes>
  <shape>
    <name>circle</name>
    <type>2D</type>
  </shape>
  <shape>
    <name>sphere</name>
    <type>3D</type>
  </shape>
</shapes>r   rX   r   r   r   rL   r   r   r   r   rB  r   r   r,   r,   r-   test_dtd  s      
rD  c                 C  sZ   d}t |d| d}t|| dddgid}tdd	gd
dgd}t|| t|| d S )Nam  <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<?display table-view?>
<?sort alpha-ascending?>
<?textinfo whitespace is allowed ?>
<?elementnames <shape>, <name>, <type> ?>
<shapes>
  <shape>
    <name>circle</name>
    <type>2D</type>
  </shape>
  <shape>
    <name>sphere</name>
    <type>3D</type>
  </shape>
</shapes>r   rX   r   r   r   rL   r   r   r   r   rB  r   r   r,   r,   r-   test_processing_instruction  s      
rE  c              	   C  sF   | dddd}t jtdd  t||ddd	d
dgid W 5 Q R X d S )NrB   r7   rC   rD   z+No result from selected items in iterparse.r   nodeattr1elem1elem2elem3rL   r9  r   r,   r,   r-   test_no_result  s     rK  c              	   C  sF   | dddd}t jtdd  t||ddd	d
dgid W 5 Q R X d S )NrB   r7   rC   rD   zNo columns to parse from filer   rF   rG  rH  rI  rJ  rL   )r   r   r   r   r   r,   r,   r-   test_empty_data  s    rL  4https://www.w3schools.com/xml/cdcatalog_with_xsl.xmlc                  C  sR   d} d}t | dddg|d}tddd	d
ddddddddd}t|| d S )NrM  z+https://www.w3schools.com/xml/cdcatalog.xslz.//tr[td and position() <= 6]rH   artist)rY   r   r  zEmpire BurlesquezHide your heartzGreatest HitszStill got the bluesZErosr   z	Bob DylanzBonnie TylerzDolly Partonz
Gary MoorezEros Ramazzotti)rH   rN  r   )rC   r  Zdf_xslrx   r,   r,   r-   test_online_stylesheet  s0    rO  c              	   C  sl   t  B}tj|d| |d t|| |d}t||| ddddgi|d}W 5 Q R X t |t t |t d S )	NF)r[   r1   r<   r;  r\   r   r   r   r<  )r3   r4   r=  rc   r   rA   rO   )r1   r@   r?   rd   re   r,   r,   r-   test_compression_read;  s"    
   rP  c              
   C  s   |}|}||krd S t dft dftdftdfd}tddd}|d k	rT|jd	f|d
< tddd}|d k	rttdf|d< || \}}	t >}
tj	|
| |d t
j||	d t|
| |d W 5 Q R X W 5 Q R X d S )NzInvalid data streamzNot a gzipped filezFile is not a zip filez%file could not be opened successfully)bz2gzipziptarZ	zstandardignore)errorszUnknown frame descriptorzstdlzmaz%Input format not supported by decoderxzr;  r   )OSErrorr   r   r
   Z	ZstdErrorr   r3   r4   r=  rc   r   r   r   )r1   r<   r@   Zactual_compressionZattempted_compressionrV  rW  rX  Z	error_clsZ	error_strr9   r,   r,   r-   test_wrong_compressionO  s(    
r[  c              
   C  s@   t jtdd( t }t|| dd W 5 Q R X W 5 Q R X d S )NzUnrecognized compression typer   Z7zr;  )r   r   r   r3   r4   r   )r1   r9   r,   r,   r-   test_unsuported_compressionk  s    
r\  Zs3fsz02022.1.17: Hanging on the CI min versions build.)reasonc                  C  sH   d} t | dddidddid}t | dddid	ddid}t|| d S )
Nz/s3://irs-form-990/201923199349319487_public.xmlz .//irs:Form990PartVIISectionAGrpZirszhttp://www.irs.gov/efiler/   ZanonT)rY   r   r1   Zstorage_optionsr0   rN   )Zs3r   r   r,   r,   r-   test_s3_parser_consistencyt  s     
r^  )
__future__r   rB   r   r   rX  r   r   tarfiler   urllib.errorr   zipfiler   Znumpynpr   Zpandas.compatr	   Zpandas.compat._optionalr
   Zpandas.errorsr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   Zpandas._testingZ_testingr3   Zpandas.io.commonr   Zpandas.io.xmlr   r   r=  r   r   r  Zfixturer.   r)   Z
skip_if_nor1   r;   rA   rT   marknetworkZslowrf   ry   r}   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  Zskip_if_installedr  r  r  r   r"  r%  r&  r(  r,  r-  r.  r0  r1  r2  r3  r4  r7  r8  r:  r>  r?  r@  rA  rC  rD  rE  rK  rL  rO  rP  r[  r\  Zskipifr^  r,   r,   r,   r-   <module>   s  8
	m


+
	

	





	
$#(



	














)#$$
 $	