U
    +if+                     @  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Zd dlZd dlmZ d dlmZ d dlm  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'd-d. Z'e&d*d/d0 Z(ej)j*ej)j+e&d*ej*d1d2d3d4d5 Z,d6d7 Z-d8d9 Z.d:d; Z/d<d= Z0d>d? Z1e&d*ej)2d@dAdBgdCdD Z3ej)2d@dAdBgdEdF Z4e&d*dGdH Z5dIdJ Z6ej)j*ej*dKd2d3e&d*dLdM Z7ej)j*ej*dNd2d3dOdP Z8e&d*dQdR Z9dSdT Z:e&d*dUdV Z;dWdX Z<dYdZ Z=e&d*d[d\ Z>e&d*d]d^ Z?d_d` Z@dadb ZAe&d*dcdd ZBe&d*ej)2dedAdgdfdg ZCdhdi ZDdjdk ZEdldm ZFdndo ZGe&d*dpdq ZHdrds ZIdtdu ZJdvdw ZKdxdy ZLdzd{ ZMd|d} ZNd~d ZOe&d*dd ZPe&d*dd ZQdd ZReSd*dd ZTdd ZUe&d*dd ZVdd ZWe&d*dd ZXe&d*dd ZYe&d*dd ZZe&d*dd Z[e&d*dd Z\e&d*dd Z]e&d*dd Z^e&d*dd Z_e&d*dd Z`e&d*dd Zae&d*ej)2d@dAdBgdd Zbej)j*e&d*ej*dd2d3dd Zcdd Zddd Zedd Zfej)j*e&de&d*ej)jge ddej*dd ZhdS )    )annotations)BytesIOStringIO)	LZMAErrorN)	HTTPError)
BadZipFile)is_ci_environment)import_optional_dependency)	DataFrame)read_xmlsquarecircletriangleh           shapedegreesZ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nameZstyleUrlZextrudeZaltitudeModeZcoordinatesrbr)paramsc                 C  s   | j S Nparamrequest r#   O/home/mars/bis/venv/lib/python3.8/site-packages/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    r(   c                 C  s6   | dddd}t |dd}t |dd}t|| d S )Niodataxml	books.xmlr&   r(   r'   r   tmassert_frame_equal)datapathfilenameZdf_file_lxmlZdf_file_etreer#   r#   r$   test_parser_consistency_file   s    r3   Ohttps://data.cityofchicago.org/api/views/8pix-ypme/rows.xml?accessType=DOWNLOADT)urlZcheck_before_testc                  C  s0   d} t | ddd}t | ddd}t|| d S )Nr4   z
.//row/rowr&   xpathr(   r'   r.   )r5   Zdf_url_lxmlZdf_url_etreer#   r#   r$   test_parser_consistency_url  s
    r8   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 Nr)   r*   r+   r,   r-   cookingchildrenwebEveryday ItalianHarry PotterLearning XMLGiada De LaurentiisJ K. RowlingErik T. Ray          >@=
ףp=@皙C@)categorytitleauthoryearprice)openr   r
   r/   r0   )r1   r(   r%   r2   fdf_filedf_expectedr#   r#   r$   test_file_like  s    
rQ   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 r9   )
rM   readr   
isinstancebytesr   r   r
   r/   r0   )r1   r(   r%   r2   rN   xml_objZdf_iorP   r#   r#   r$   test_file_io)  s     
rV   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 r9   )rM   rR   r   r
   r/   r0   r1   r(   r%   r2   rN   rU   Zdf_strrP   r#   r#   r$    test_file_buffered_reader_string@  s    
rX   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 r9   )rM   nextrR   r   r
   r/   r0   rW   r#   r#   r$   ,test_file_buffered_reader_no_xml_declarationT  s    
rZ   c              	   C  sF   | dddd}t |d$}tt| |d |jr8tW 5 Q R X d S )Nr)   r*   r+   r,   r   r-   )rM   r   r   rR   closedAssertionError)r1   r(   Zxml_filerN   r#   r#   r$   test_file_handle_closei  s    r]   val     c              	   C  s6   ddl m} tj|dd t| dd W 5 Q R X d S )Nr   XMLSyntaxErrorzDocument is emptymatchr&   r-   
lxml.etreerb   pytestraisesr   )r^   rb   r#   r#   r$   test_empty_string_lxmlr  s    ri   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 foundrc   r'   r-   )xml.etree.ElementTreerk   rg   rh   r   )r^   rk   r#   r#   r$   test_empty_string_etree{  s    rm   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   ra   r*   htmlr,   !Start tag expected, '<' not foundrc   r&   r-   rf   rb   ospathjoinrg   rh   r   )rb   r2   r#   r#   r$   test_wrong_file_path_lxml  s    rt   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   rj   r*   rn   r,   znot well-formedrc   r'   r-   )rl   rk   rq   rr   rs   rg   rh   r   )rk   r2   r#   r#   r$   test_wrong_file_path_etree  s    ru   '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 )Nrv   .//book[count(*)=4]r7   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   Z	paperback)rH   rI   rJ   rK   rL   Zcoverr   r
   r/   r0   )r5   Zdf_urlrP   r#   r#   r$   test_url  s    rz   (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 Foundrc   r{   rw   r6   )rg   rh   r   r   )r(   r5   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 )
Nr)   r*   r+   r,   xpath does not return any nodesrc   z	.//pythonr&   r6   rg   rh   
ValueErrorr   r1   r2   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 )
Nr)   r*   r+   r,   z/You have used an incorrect or unsupported XPathrc   	.//[book]r'   r6   rg   rh   SyntaxErrorr   r   r#   r#   r$   test_bad_xpath_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   XPathEvalErrorr)   r*   r+   r,   zInvalid expressionrc   r   r&   r6   rf   r   rg   rh   r   r1   r   r2   r#   r#   r$   test_bad_xpath_lxml  s    r   c                 C  sJ   t tdddi| d}tdddgddd	gd
tddgd}t|| d S )N	.//ns:rownshttp://example.comr7   
namespacesr(   r   r   r   r   r         @nan      @r   )r   xml_default_nmspr
   floatr/   r0   r(   Zdf_nmsprP   r#   r#   r$   test_default_namespace  s    r   c                 C  sJ   t tdddi| d}tdddgddd	gd
tddgd}t|| d S )N
.//doc:rowdocr   r   r   r   r   r   r   r   r   r   r   )r   xml_prefix_nmspr
   r   r/   r0   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   r'   )r   r   r/   r0   df_lxmldf_etreer#   r#   r$   "test_consistency_default_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   r   r/   r0   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 )	Nr)   r*   r+   r,   r}   rc   z.//Placemarkr6   r~   r1   r(   r2   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 )
Nr)   r*   r+   cta_rail_lines.kmlz'you used an undeclared namespace prefixrc   .//kml:Placemarkr'   r6   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   r)   r*   r+   r   zUndefined namespace prefixrc   r   r&   r6   r   r   r#   r#   r$   #test_missing_prefix_definition_lxml5  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 XPathrc   r   http://www.opengis.net/kml/2.2r&   r   )rg   rh   	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gd	d
dgdddgdddgdddgd}t|| d S r9   ry   r1   r(   r2   rO   rP   r#   r#   r$   test_file_elems_and_attrsO  s    
r   c                 C  s>   | dddd}t |d|d}tddd	d
gi}t|| d S )Nr)   r*   r+   r,   T)
attrs_onlyr(   rH   r:   r;   r<   ry   r   r#   r#   r$   test_file_only_attrs_  s    r   c                 C  sV   | dddd}t |d|d}tddd	gd
ddgdddgdddgd}t|| d S )Nr)   r*   r+   r,   T)
elems_onlyr(   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   )rI   rJ   rK   rL   ry   r   r#   r#   r$   test_file_only_elemsg  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 )	Nr)   r*   r+   r   z3Either element or attributes can be parsed not bothrc   T)r   r   r(   r~   r   r#   r#   r$   test_elem_and_attrs_onlyv  s    r   c                  C  s.   d} t | dd}t | ddd}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
.//stationrx   r'   r6   r.   )r+   r   r   r#   r#   r$   test_attribute_centric_xml  s    r   c                 C  sh   | dddd}t |ddddd	g|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 )Nr)   r*   r+   r,   Col1Col2Col3Col4Col5namesr(   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   )r   r   r   r   r   ry   r   r#   r#   r$   test_names_option_output  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 )Nr)   r*   r+   r,   znames does not match lengthrc   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 )	Nr)   r*   r+   r,   zis not a valid type for namesrc   zCol1, Col2, Col3r   )rg   rh   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 )Nr)   r*   r+   baby_names.xmlz'utf-8' codec can't decoderc   r-   rg   rh   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 )	Nr)   r*   r+   r   zIUTF-16 stream does not start with BOM|'utf-16-le' codec can't decode byterc   zUTF-16encodingr(   )rg   rh   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 )	Nr)   r*   r+   r   zunknown encoding: UFT-8rc   zUFT-8r   )rg   rh   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 )	Nr)   r*   r+   r   z'ascii' codec can't decode byterc   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 S )
Nr)   r*   r+   r   r&   z
ISO-8859-1r(   r   r'   z
iso-8859-1r.   )r1   r2   r   r   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 Nonerc   r&   r   )rg   rh   r   r   r   )r*   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   r'   r   ac)r   r   r
   r/   r0   )r*   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 )Nr)   r*   r+   r,   z7lxml not found, please install or use the etree parser.rc   )rg   rh   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 )	Nr)   r*   r+   r,   z,Values for parser can only be lxml or etree.rc   Zbs4r-   r~   r   r#   r#   r$   test_wrong_parser  s     r   c                 C  s@   | dddd}| dddd}t |dddi|d	}tt| d S 
Nr)   r*   r+   r   flatten_doc.xsl.//k:Placemarkkr   r7   r   
stylesheet)r   r/   r0   df_kml)r1   kmlxsldf_styler#   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 )Nr)   r*   r+   r   zkeyword-onlyrc   r   r   r   )r   r(   )r/   Zassert_produces_warningFutureWarningr   )r1   r(   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 r   )rM   r   r/   r0   r   )r1   r%   r   r   rN   r   r#   r#   r$   test_stylesheet_file_like8  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 )Nr)   r*   r+   r   r   r   r   r   r   r   )rM   r   rR   r   r   r/   r0   r   r1   r%   r   r   rN   xsl_objr   r#   r#   r$   test_stylesheet_ioH  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   )rM   rR   r   r/   r0   r   r   r#   r#   r$   test_stylesheet_buffered_reader_  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   XSLTParseErrorr)   r*   r+   r   r,   zdocument is not a stylesheetrc   r   rf   r   rg   rh   r   )r1   r   r   r   r#   r#   r$   test_not_stylesheetq  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   ra   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>r)   r*   r+   r   z(Extra content at the end of the documentrc   r   re   )r1   rb   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>r)   r*   r+   r   zfailed to compilerc   r   r   )r1   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>r)   r*   r+   r   zCannot resolve URIrc   r   )rf   r   rg   rh   r   )r1   r   r   r   r#   r#   r$   test_incorrect_xsl_apply  s
    r   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   ra   r*   r+   r   zflatten.xslro   rc   r   rp   )rb   r   r   r#   r#   r$   test_wrong_stylesheet  s    r   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 )Nr)   r*   r+   r   r   r   r   )rM   r   rR   r   r   r[   r\   )r1   r%   r   r   rN   r   r#   r#   r$   test_stylesheet_file_close  s    r   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 )	Nr*   r+   r   r   z*To use stylesheet, you need lxml installedrc   r'   )r(   r   )rq   rr   rs   rg   rh   r   r   )r1   r   r   r#   r#   r$   test_stylesheet_with_etree  s     r   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   ra   r*   r+   r   z3Document is empty|Start tag expected, '<' not foundrc   r   rp   )r^   rb   r   r#   r#   r$   test_empty_stylesheet  s     r   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 )Nr   z+https://www.w3schools.com/xml/cdcatalog.xslz.//tr[td and position() <= 6]rI   artist)r7   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)rI   r   ry   )r+   r   Zdf_xslrP   r#   r#   r$   test_online_stylesheet  s0    r   c              	   C  sD   t  &}tj|d| |d t|| |d}W 5 Q R X t |t d S )NF)indexr(   compressionr(   r   )r/   ensure_cleangeom_dfto_xmlr   r0   )r(   compression_onlyrr   Zxml_dfr#   r#   r$   test_compression_read1  s    
r   c              
   C  s   |}|}||krd S t dft dftdfd}tddd}|d k	rN|jdf|d	< td
dd}|d k	rnt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 file)bz2gzipzipZ	zstandardignore)errorszUnknown frame descriptorzstdlzmaz%Input format not supported by decoderxzr   rc   )OSErrorr   r	   Z	ZstdErrorr   r/   r   r   r   rg   rh   r   )r(   r   r   Zactual_compressionZattempted_compressionr  r  r  Z	error_clsZ	error_strrr   r#   r#   r$   test_wrong_compression:  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 typerc   Z7zr   )rg   rh   r   r/   r   r   )r1   r(   rr   r#   r#   r$   test_unsuported_compressionU  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)r7   r   r(   Zstorage_optionsr'   r.   )Zs3r   r   r#   r#   r$   test_s3_parser_consistency^  s     
r
  )i
__future__r   r)   r   r   r  r   rq   urllib.errorr   zipfiler   numpynprg   Zpandas.compatr   Zpandas.compat._optionalr	   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr
   Zpandas._testingZ_testingr/   Zpandas.io.xmlr   r   r   r   r   r   Zfixturer%   r    Z
skip_if_nor(   r3   marknetworkZslowr8   rQ   rV   rX   rZ   r]   Zparametrizeri   rm   rt   ru   rz   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   r   r   r   r   r   r   r  r  Zskipifr
  r#   r#   r#   r$   <module>   s`  8
	m


	

	




	




	





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

 $		