a
    PfF                     @  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mZ d dlZd dlZd d	lmZ d d
lmZmZ d dlm  mZ d dlZd dlmZmZm Z  d dl!m"Z# d dl$m%Z%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, eg dg ddej-dgdZ.dZ/dZ0e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&Z1d'd( Z2ej3d)d*gd+d,d- Z4ej3ej5d.e6d.d/d0gd+d1d2 Z7d3d4 Z8d5d6 Z9d7d8 Z:ej;j<ej;j=d9d: Z>d;d< Z?d=d> Z@d?d@ ZAdAdB ZBdCdD ZCdEdF ZDdGdH ZEej;FdIdJdKgdLdM ZGej;FdIdJdKgdNdO ZHdPdQ ZIej;j<ej;j=dRdS ZJej;j<ej;j=dTdU ZKdVdW ZLdXdY ZMdZd[ ZNd\d] ZOd^d_ ZPd`da ZQdbdc ZRddde ZSdfdg ZTdhdi ZUdjdk ZVej;FdldJdgdmdn ZWdodp ZXdqdr ZYdsdt ZZdudv Z[dwdx Z\dydz Z]d{d| Z^d}d~ Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkeld.dd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzej;FdIdJdKgdd Z{dd Z|dd Z}ej;j<ej;j=dd Z~dd Zdd Zdd Zdd ZddĄ ZddƄ ZddȄ Zddʄ Zdd̄ Zdd΄ ZddЄ Zdd҄ ZddԄ Zej;j<ej;j=ddք Zdd؄ Zddڄ ZdS )    )annotations)BytesIOStringIO)	LZMAErrorN)	ReadError)	HTTPError)
ParseError)
BadZipFile)import_optional_dependency)EmptyDataErrorParserError)NA	DataFrameSeries)ArrowStringArrayStringArray)ArrowStringArrayNumpySemantics)
get_handle)read_xmlsquarecircletriangleh  r            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nameZstyleUrlZextrudeZaltitudeModeZcoordinatesc                  C  sH   t d d} tjt| d tt W d    n1 s:0    Y  d S )NlxmlPassing literal xml to 'read_xml' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.match)pytestimportorskiptmZassert_produces_warningFutureWarningr   xml_default_nmspmsg r3   U/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/io/xml/test_xml.pytest_literal_xml_deprecation   s
    
r5   rbr)paramsc                 C  s   | j S Nparamrequestr3   r3   r4   mode  s    r>   r(   )Zmarksetreec                 C  s   | j S r9   r:   r<   r3   r3   r4   parser  s    r@   c              	   K  st   t  X}t|ddd}||  W d    n1 s80    Y  t|fi |W  d    S 1 sf0    Y  d S )Nwutf-8encoding)r.   ensure_cleanopenwriter   )datakwargspathfr3   r3   r4   read_xml_iterparse  s    
(rL   c              
   K  s   t | d|d}t l}t|ddd }||j  W d    n1 sN0    Y  t|fi |W  d    W  d    S 1 s0    Y  W d    n1 s0    Y  d S )Nr7   )compressionrA   rB   rC   )r   r.   rE   rF   rG   handlereadr   )	comp_pathcompression_onlyrI   ZhandlesrJ   rK   r3   r3   r4   read_xml_iterparse_comp  s
    
.rR   c                 C  sv   t d t| dd}t| dd}t| ddg did}t| ddg did}t|| t|| t|| d S )Nr(   r@   r?   bookcategorytitleyearauthorpricer@   	iterparser,   r-   r   r.   assert_frame_equal)	xml_booksZdf_file_lxmlZdf_file_etreedf_iter_lxmldf_iter_etreer3   r3   r4   test_parser_consistency_file#  s     


rb   c                 C  sJ   |j td ttt| d}ttt | dg did}t|| d S )NcontentrS   rowr   r[   )serve_contentr0   r   r   r   encoder.   r^   )r@   
httpserverdf_xpathdf_iterr3   r3   r4   test_parser_consistency_url8  s    

rk   c                 C  s~   t | ||dkrdnd d}t||d}W d    n1 s<0    Y  tg dg dg dg dg d	d
}t|| d S Nr7   rB   rC   rS   cookingchildrenZwebzEveryday ItalianzHarry PotterzLearning XMLzGiada De LaurentiiszJ K. RowlingzErik T. Ray  rs   i  g      >@g=
ףp=@gC@rV   rW   rY   rX   rZ   )rF   r   r   r.   r^   )r_   r@   r>   rK   df_filedf_expectedr3   r3   r4   test_file_likeG  s    *
rx   c                 C  s   t | ||dkrdnd d}| }W d    n1 s80    Y  tt|trVt|nt||d}tg dg dg dg dg d	d
}t	|| d S rl   )
rF   rO   r   
isinstancebytesr   r   r   r.   r^   )r_   r@   r>   rK   xml_objZdf_iorw   r3   r3   r4   test_file_ioX  s    &
r|   c                 C  s   t | ||dkrdnd d}| }W d    n1 s80    Y  |dkrXt| }n|dkrht|}t||d}tg dg dg dg d	g d
d}t|| d S Nr7   rB   rC   r6   rS   rm   rp   rq   rr   rt   ru   )rF   rO   r   decoder   r   r.   r^   r_   r@   r>   rK   r{   df_strrw   r3   r3   r4    test_file_buffered_reader_stringn  s     &
r   c                 C  s   t | ||dkrdnd d }t| | }W d    n1 s@0    Y  |dkr`t| }n|dkrpt|}t||d}tg dg dg dg d	g d
d}t|| d S r}   )	rF   nextrO   r   r~   r   r   r.   r^   r   r3   r3   r4   ,test_file_buffered_reader_no_xml_declaration  s"    &
r   c                 C  s8   d}t t|| d}tddddgd}t|| d S )N<   <中文標籤><row><c1>1</c1><c2>2</c2></row></中文標籤>rS   r#   r$   )c1c2r   )indexr   r   r   r.   r^   )r@   txtr   rw   r3   r3   r4   test_string_charset  s    r   c                 C  sD   t | |d}tg ddddgd dgg dd}t|| d S )	NrS   )uP   問  若箇是邪而言破邪 何者是正而道(Sorry, this is Big5 only)申正u;   問 既破有得申無得 亦應但破性執申假名以不uO   問 既破性申假 亦應但破有申無 若有無兩洗 亦應性假雙破耶 u<   答  邪既無量 正亦多途  大略為言不出二種 謂u;   有得與無得 有得是邪須破 無得是正須申
		故uL   答  不例  有無皆是性 所以須雙破 既分性假異 故有破不破)NuV   答 性執是有得 假名是無得  今破有得申無得 即是破性執申假名也N)u   問u   答a)r   r   joinr.   r^   )Zxml_doc_ch_utfr@   rv   rw   r3   r3   r4   test_file_charset  s    
r   c                 C  sL   t | d.}tt| |d |jr*J W d    n1 s>0    Y  d S )Nr6   rS   )rF   r   r   rO   closed)r_   r@   rK   r3   r3   r4   test_file_handle_close  s    r   valr       c                 C  sx   t d}dddg}t j|j|d< t| trFtt| dd ntt	| dd W d    n1 sj0    Y  d S )N
lxml.etree|zDocument is emptyzNone \(line 0\)r*   r(   rS   )
r,   r-   r   raisesXMLSyntaxErrorry   strr   r   r   )r   
lxml_etreer2   r3   r3   r4   test_empty_string_lxml  s    

r   c                 C  s^   t jtdd< t| tr,tt| dd ntt| dd W d    n1 sP0    Y  d S )Nzno element foundr*   r?   rS   )r,   r   r   ry   r   r   r   r   )r   r3   r3   r4   test_empty_string_etree  s    
r   c                 C  sR   d}t jddd}tjt|d t|| d W d    n1 sD0    Y  d S )Nr)   rH   htmlz	books.xmlr*   rS   )osrJ   r   r,   r   r/   r   )r@   r2   filenamer3   r3   r4   test_wrong_file_path  s    r   c                 C  s   t d t|dd.}| j| d t| jdd}W d    n1 sJ0    Y  tg dg dg d	g d
g dd}t	|| d S )Nr(   rB   rC   rc   .//book[count(*)=4]xpathrm   rp   rq   rr   rt   ru   )
r,   r-   rF   rf   rO   r   urlr   r.   r^   )rh   xml_filerK   Zdf_urlrw   r3   r3   r4   test_url  s    
,
r   c                 C  sP   |j ddd tjtdd  t|jd| d W d    n1 sB0    Y  d S )Nz	NOT FOUNDi  )codezHTTP Error 404: NOT FOUNDr*   r   r   r@   )rf   r,   r   r   r   r   )r@   rh   r3   r3   r4   test_wrong_url  s    r   c                 C  sj   d}t t|| dd}t|| dg didd}tg dg dg d	ddd
}t|| t|| d S )Na  
      <data>
        <row sides=" 4 ">
          <shape>
              square
          </shape>
          <degrees>&#009;360&#009;</degrees>
        </row>
        <row sides=" 0 ">
          <shape>
              circle
          </shape>
          <degrees>&#009;360&#009;</degrees>
        </row>
        <row sides=" 3 ">
          <shape>
              triangle
          </shape>
          <degrees>&#009;180&#009;</degrees>
        </row>
      </data>string)r@   dtypere   )r!   r   r    )r@   r\   r   )z 4 z 0 z 3 )z 
              square
          z 
              circle
          z"
              triangle
          )	360	r   z	180	r   r   r   rL   r   r.   r^   r@   xmlri   rj   rw   r3   r3   r4   test_whitespace  s"    
	r   c                 C  sJ   t d t jtdd t| ddd W d    n1 s<0    Y  d S )Nr(   xpath does not return any nodesr*   z	.//pythonr   r,   r-   r   
ValueErrorr   r_   r3   r3   r4   test_empty_xpath_lxmlM  s    
r   c                 C  s@   t jtdd t| ddd W d    n1 s20    Y  d S )Nz/You have used an incorrect or unsupported XPathr*   	.//[book]r?   r   r,   r   SyntaxErrorr   r   r3   r3   r4   test_bad_xpath_etreeS  s    r   c                 C  sL   t d}t j|jdd t| ddd W d    n1 s>0    Y  d S )Nr   zInvalid expressionr*   r   r(   r   r,   r-   r   ZXPathEvalErrorr   )r_   r   r3   r3   r4   test_bad_xpath_lxmlZ  s    
r   c                 C  sl   t ttdddi| d}tt| dg did}tg dg d	d
tddgd}t|| t|| d S )N	.//ns:rownshttp://example.comr   
namespacesr@   re   r   r[   r   r         @nan      @)r   r   r0   rL   r   floatr.   r^   r@   Zdf_nmsprj   rw   r3   r3   r4   test_default_namespaced  s&    
r   c                 C  sl   t ttdddi| d}tt| dg did}tg dg d	d
tddgd}t|| t|| d S )N
.//doc:rowdocr   r   re   r   r[   r   r   r   r   r   )r   r   xml_prefix_nmsprL   r   r   r.   r^   r   r3   r3   r4   test_prefix_namespace~  s"    r   c                  C  sJ   t d tttdddidd} tttdddidd}t| | d S )	Nr(   r   r   r   r   r   r   r?   )r,   r-   r   r   r0   r.   r^   df_lxmldf_etreer3   r3   r4   "test_consistency_default_namespace  s    
r   c                  C  sJ   t d tttdddidd} tttdddidd}t| | d S )Nr(   r   r   r   r   r?   )r,   r-   r   r   r   r.   r^   r   r3   r3   r4   !test_consistency_prefix_namespace  s    
r   c                 C  s@   t jtdd t| d|d W d    n1 s20    Y  d S )Nr   r*   z.//Placemarkr   r,   r   r   r   r_   r@   r3   r3   r4   *test_missing_prefix_with_default_namespace  s    r   c                 C  s@   t jtdd t| ddd W d    n1 s20    Y  d S )Nz'you used an undeclared namespace prefixr*   .//kml:Placemarkr?   r   r   )kml_cta_rail_linesr3   r3   r4   $test_missing_prefix_definition_etree  s    r   c                 C  sL   t d}t j|jdd t| ddd W d    n1 s>0    Y  d S )Nr   zUndefined namespace prefixr*   r   r(   r   r   )r   r   r3   r3   r4   #test_missing_prefix_definition_lxml  s    
r   keyc                 C  sT   t d t jtdd( tttd| didd W d    n1 sF0    Y  d S )Nr(   z0empty namespace prefix is not supported in XPathr*   r   http://www.opengis.net/kml/2.2r   )r,   r-   r   	TypeErrorr   r   r0   )r   r3   r3   r4   test_none_namespace_prefix  s    
r   c                 C  sf   t | |d}t | |dg did}tg dg dg dg dg d	d}t|| t|| d S )
NrS   rT   ru   r[   rm   rp   rq   rr   rt   r   r   r.   r^   r_   r@   rv   rj   rw   r3   r3   r4   test_file_elems_and_attrs  s     

r   c                 C  sN   t | d|d}t | |ddgid}tdg di}t|| t|| d S )NT)
attrs_onlyr@   rT   rV   r[   rm   r   r   r3   r3   r4   test_file_only_attrs  s
    r   c                 C  sb   t | d|d}t | |dg did}tg dg dg dg d	d}t|| t|| d S )
NT)
elems_onlyr@   rT   )rW   rY   rX   rZ   r[   rp   rq   rr   rt   r   r   r3   r3   r4   test_file_only_elems  s    
	r   c                 C  sB   t jtdd  t| dd|d W d    n1 s40    Y  d S )Nz3Either element or attributes can be parsed not bothr*   T)r   r   r@   r   )r   r@   r3   r3   r4   test_elem_and_attrs_only  s
    r   c                 C  sJ   d}t jtdd$ tt|dd| d W d    n1 s<0    Y  d S )NaU  
      <data>
        <row>
          <shape sides="4">square</shape>
          <degrees>360</degrees>
        </row>
        <row>
          <shape sides="0">circle</shape>
          <degrees>360</degrees>
        </row>
        <row>
          <shape sides="3">triangle</shape>
          <degrees>180</degrees>
        </row>
      </data>-xpath does not return any nodes or attributesr*   ./rowT)r   r   r@   r,   r   r   r   r   r@   r   r3   r3   r4   test_empty_attrs_only  s    r   c                 C  sJ   d}t jtdd$ tt|dd| d W d    n1 s<0    Y  d S )Nz
      <data>
        <row sides="4" shape="square" degrees="360"/>
        <row sides="0" shape="circle" degrees="360"/>
        <row sides="3" shape="triangle" degrees="180"/>
      </data>r   r*   r   T)r   r   r@   r   r   r3   r3   r4   test_empty_elems_only2  s    r   c                  C  sv   t d d} tt| dd}tt| ddd}t| ddd	gid
}t| dddd	gid}t|| t|| d S )Nr(   a  <?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   r?   r   stationNameZcoordsr\   r[   )r,   r-   r   r   rL   r.   r^   )r   r   r   Z
df_iter_lxZ
df_iter_etr3   r3   r4   test_attribute_centric_xmlA  s    
r   c                 C  sr   t | g d|d}t | |g ddg did}tg dg dg dg d	g d
d}t|| t|| d S )N)Col1Col2Col3ZCol4ZCol5namesr@   rT   ru   )r@   r   r\   rm   rp   rq   rr   rt   r   r   r3   r3   r4   test_names_option_outputf  s&    


r   c                 C  sp   d}t t|d| g dd}t|| dg dig d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)Ztype_dimr   Z	type_edger   r@   r   r   )typer'   r   r@   r\   r   2D3Dr   sphereZcurvedr   r   r3   r3   r4   test_repeat_names  s*    
r   c                 C  sj   d}t t|d| ddgd}t|| dddgiddgd}tg d	g d
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   )	rectangler   ellipser   )r   r   r   r   )r'   r   r   r   r3   r3   r4   test_repeat_values_new_names  s"    
r   c                 C  sv   d}t t|d| g dd}t|| dg dig dd}tg dg d	g d
g dd}t|| t|| d S )Na  <shapes>
  <shape>
    <value item="name">circle</value>
    <value item="family">ellipse</value>
    <value item="degrees">360</value>
    <value item="sides">0</value>
  </shape>
  <shape>
    <value item="name">triangle</value>
    <value item="family">polygon</value>
    <value item="degrees">180</value>
    <value item="sides">3</value>
  </shape>
  <shape>
    <value item="name">square</value>
    <value item="family">polygon</value>
    <value item="degrees">360</value>
    <value item="sides">4</value>
  </shape>
</shapes>r   )r'   r   r    r!   r   r   )valuer   r   r   r   )r   r   r   )r   polygonr   )r   r   r   )r   r   r   r   r   r3   r3   r4   test_repeat_elements  s,    
	r  c                 C  sD   t jtdd" t| g d|d W d    n1 s60    Y  d S )Nznames does not match lengthr*   )r   r   r   r   r   r   r3   r3   r4   test_names_option_wrong_length   s    r  c                 C  s@   t jtdd t| d|d W d    n1 s20    Y  d S )Nzis not a valid type for namesr*   zCol1, Col2, Col3r   r,   r   r   r   r   r3   r3   r4   test_names_option_wrong_type  s    r  c                 C  s>   t jtdd t| |d W d    n1 s00    Y  d S )Nz'utf-8' codec can't decoder*   rS   r,   r   UnicodeDecodeErrorr   xml_baby_namesr@   r3   r3   r4   test_wrong_encoding  s    r	  c                 C  s@   t jtdd t| d|d W d    n1 s20    Y  d S )NzIUTF-16 stream does not start with BOM|'utf-16-le' codec can't decode byter*   zUTF-16rD   r@   )r,   r   UnicodeErrorr   r  r3   r3   r4   test_utf16_encoding  s
    r  c                 C  s@   t jtdd t| d|d W d    n1 s20    Y  d S )Nzunknown encoding: UFT-8r*   zUFT-8r
  )r,   r   LookupErrorr   r  r3   r3   r4   test_unknown_encoding  s    r  c                 C  s@   t jtdd t| d|d W d    n1 s20    Y  d S )Nz'ascii' codec can't decode byter*   asciir
  r  r  r3   r3   r4   test_ascii_encoding"  s    r  c                 C  s~   t d t| ddd}t| ddd}t| dddg did}t| dddg did}t|| t|| t|| d S )	Nr(   z
ISO-8859-1r@   rD   r?   z
iso-8859-1re   )ZrankZmalenameZ
femalename)r@   rD   r\   r]   )r  Zdf_xpath_lxmlZdf_xpath_etreer`   ra   r3   r3   r4   %test_parser_consistency_with_encoding'  s$    


r  c                  C  sR   t d d} t jtdd" tt| dd d W d    n1 sD0    Y  d S )Nr(   -<data>
  <row>
    <a>c</a>
  </row>
</data>
zencoding Noner*   r  )r,   r-   r   r   r   r   )rH   r3   r3   r4   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  r   cr   )rH   resultexpectedr3   r3   r4   test_none_encoding_etreeK  s    r  c                 C  s:   t jtdd t|  W d    n1 s,0    Y  d S )Nz7lxml not found, please install or use the etree parser.r*   )r,   r   ImportErrorr   r   r3   r3   r4   test_default_parser_no_lxml[  s    r  c                 C  s>   t jtdd t| dd W d    n1 s00    Y  d S )Nz,Values for parser can only be lxml or etree.r*   Zbs4rS   r   r   r3   r3   r4   test_wrong_parserc  s    r  c                 C  sN   t d t| dddi|d}t| dg did}tt| tt| d S )	Nr(   .//k:Placemarkkr   r   r   
stylesheetZ	Placemarkr%   r   )r,   r-   r   r.   r^   df_kml)r   xsl_flatten_docdf_stylerj   r3   r3   r4   test_stylesheet_filem  s    
r#  c                 C  sh   t d t|||dkrdnd d$}t| dddi|d}W d    n1 sN0    Y  tt| d S 	Nr(   r7   rB   rC   r  r  r   r  )r,   r-   rF   r   r.   r^   r   )r   r!  r>   rK   r"  r3   r3   r4   test_stylesheet_file_like  s    
$r%  c                 C  s   t d t|||dkrdnd d2}|dkr<t| }nt| }W d    n1 s\0    Y  t| dddi|d	}tt	| d S )
Nr(   r7   rB   rC   r6   r  r  r   r  )
r,   r-   rF   r   rO   r   r   r.   r^   r   r   r!  r>   rK   xsl_objr"  r3   r3   r4   test_stylesheet_io  s    
*r(  c                 C  sp   t d t|||dkrdnd d}| }W d    n1 sB0    Y  t| dddi|d}tt| d S r$  )r,   r-   rF   rO   r   r.   r^   r   r&  r3   r3   r4   test_stylesheet_buffered_reader  s    
&r)  c                  C  s>   t d d} d}tt| }tt| |d}t|| d S )Nr(   r   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  )r,   r-   r   r   r.   r^   )r   xslZdf_origr"  r3   r3   r4   test_style_charset  s    
r,  c                 C  sJ   t d}t j|jdd t| |d W d    n1 s<0    Y  d S )Nr   zdocument is not a stylesheetr*   r*  r,   r-   r   ZXSLTParseErrorr   )r   r_   r   r3   r3   r4   test_not_stylesheet  s
    
r.  c                 C  sN   t d}d}t j|jdd t| |d W d    n1 s@0    Y  d S )Nr   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>z(Extra content at the end of the documentr*   r*  r,   r-   r   r   r   r   r   r+  r3   r3   r4   test_incorrect_xsl_syntax  s    
r1  c                 C  sN   t d}d}t j|jdd t| |d W d    n1 s@0    Y  d S )Nr   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>zfailed to compiler*   r*  r-  r0  r3   r3   r4   test_incorrect_xsl_eval  s    
r2  c                 C  sN   t d}d}t j|jdd t| |d W d    n1 s@0    Y  d S )Nr   ag  <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>zCannot resolve URIr*   r*  )r,   r-   r   ZXSLTApplyErrorr   r0  r3   r3   r4   test_incorrect_xsl_apply  s    
r3  c                 C  sR   t d}|d }t j|jdd t| |d W d    n1 sD0    Y  d S )Nr   zflatten.xslz!Start tag expected, '<' not foundr*   r*  r/  )r   Zxml_data_pathZ	xml_etreer+  r3   r3   r4   test_wrong_stylesheet+  s    
r4  c                 C  s   t d t|||dkrdnd dH}|dkr<t| }nt| }t| |d |jr^J W d    n1 sr0    Y  d S )Nr(   r7   rB   rC   r6   r*  )r,   r-   rF   r   rO   r   r   r   )r   r!  r>   rK   r'  r3   r3   r4   test_stylesheet_file_close7  s    
r5  c                 C  sJ   t d t jtdd t| d|d W d    n1 s<0    Y  d S )Nr(   z*To use stylesheet, you need lxml installedr*   r?   )r@   r  r   )r   r!  r3   r3   r4   test_stylesheet_with_etreeH  s
    
r6  c                 C  s\   t d d}tjddd}t jt|d t|| d W d    n1 sN0    Y  d S )Nr(   r)   rH   r   zcta_rail_lines.kmlr*   r*  )r,   r-   r   rJ   r   r   r/   r   )r   r2   Zkmlr3   r3   r4   test_empty_stylesheetP  s    
r7  c              	   C  s   t | ||dkrdnd d}|dkr|dkrtjtdd& t||dg did	 W d    n1 sf0    Y  W d    d S t||dg did	}W d    n1 s0    Y  tg d
g dg dg dg dd}t|| d S Nr7   rB   rC   r(   z.reading file objects must return bytes objectsr*   rT   rU   r[   rm   rp   rq   rr   rt   ru   )rF   r,   r   r   r   r   r.   r^   )r_   r@   r>   rK   Zdf_filelikerw   r3   r3   r4   test_file_like_iterparse_  s4    $
$
r9  c              
   C  s4  |dkrt nt}t| ||dkr"dnd d}|| }|dkr|dkrtjtdd& t||dg did	 W d    n1 s0    Y  W d    W d    d S t||dg did	}W d    n1 s0    Y  W d    n1 s0    Y  tg d
g dg dg dg dd}t	
|| d S r8  )r   r   rF   rO   r,   r   r   r   r   r.   r^   )r_   r@   r>   ZfuncIOrK   bZ	df_fileiorw   r3   r3   r4   test_file_io_iterparse  sD    $B
r;  c              	   C  s   t |ddf}|j| d tjtdd( t|j| dg did W d    n1 sZ0    Y  W d    n1 sx0    Y  d S )	NrB   rC   rc   )iterparse is designed for large XML filesr*   re   r   r    r!   dater[   )rF   rf   rO   r,   r   r   r   r   )r@   rh   r   rK   r3   r3   r4   test_url_path_error  s    
r?  c              	   C  s   t jddf}tj|| |d tjtdd( t|| dg di|d W d    n1 sZ0    Y  W d    n1 sx0    Y  d S )	Nzgeom_xml.zipr   r@   rM   r<  r*   re   r=  r@   r\   rM   )r.   rE   geom_dfto_xmlr,   r   r   r   )r@   rQ   rJ   r3   r3   r4   test_compression_error  s    
rE  c                 C  sD   t jtdd" t| |g dd W d    n1 s60    Y  d S )Nz&list is not a valid type for iterparser*   rU   r[   r  r   r3   r3   r4   test_wrong_dict_type  s    rF  c                 C  sD   t jtdd" t| |ddid W d    n1 s60    Y  d S )Nz8<class 'str'> is not a valid type for value in iterparser*   rT   rV   r[   r  r   r3   r3   r4   test_wrong_dict_value  s    rG  c              	   C  s   d}t jdd}t|ddd}|| W d    n1 s@0    Y  tjtdd* t|| d	gd
g did W d    n1 s0    Y  W d    n1 s0    Y  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.xmlr@  rA   rB   rC   zDExtra content at the end of the document|junk after document elementr*   r>  re   r=  )r@   Zparse_datesr\   )r.   rE   rF   rG   r,   r   r   r   )r@   Zbad_xmlrJ   rK   r3   r3   r4   test_bad_xml  s    (
rH  c                 C  s^   d}t 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   r   r   r'   r   r[   r   r   r   r   r'   r   r   r   r3   r3   r4   test_comment  s    rJ  c                 C  s^   d}t 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   r   r   r'   r   r[   r   r   r   r   rI  r   r   r3   r3   r4   test_dtd%  s    rK  c                 C  s^   d}t 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   r   r   r'   r   r[   r   r   r   r   rI  r   r   r3   r3   r4   test_processing_instructionI  s    rL  c                 C  sH   t jtdd& t| |dg did W d    n1 s:0    Y  d S )Nz+No result from selected items in iterparse.r*   nodeZattr1Zelem1Zelem2Zelem3r[   )r,   r   r   r   r   r3   r3   r4   test_no_resultm  s    
rO  c                 C  sH   t jtdd& t| |dg did W d    n1 s:0    Y  d S )NzNo columns to parse from filer*   rT   rN  r[   )r,   r   r   r   r   r3   r3   r4   test_empty_datax  s    
rP  c                  C  s`   t d d} d}tt| dddg|d}tdd	d
dddddddddd}t|| d S )Nr(   a  <?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
  <cd>
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <country>USA</country>
    <company>RCA</company>
    <price>9.90</price>
    <year>1982</year>
  </cd>
  <cd>
    <title>Still got the blues</title>
    <artist>Gary Moore</artist>
    <country>UK</country>
    <company>Virgin records</company>
    <price>10.20</price>
    <year>1990</year>
  </cd>
  <cd>
    <title>Eros</title>
    <artist>Eros Ramazzotti</artist>
    <country>EU</country>
    <company>BMG</company>
    <price>9.90</price>
    <year>1997</year>
  </cd>
  <cd>
    <title>One night only</title>
    <artist>Bee Gees</artist>
    <country>UK</country>
    <company>Polydor</company>
    <price>10.90</price>
    <year>1998</year>
  </cd>
  <cd>
    <title>Sylvias Mother</title>
    <artist>Dr.Hook</artist>
    <country>UK</country>
    <company>CBS</company>
    <price>8.10</price>
    <year>1973</year>
  </cd>
  <cd>
    <title>Maggie May</title>
    <artist>Rod Stewart</artist>
    <country>UK</country>
    <company>Pickwick</company>
    <price>8.50</price>
    <year>1990</year>
  </cd>
  <cd>
    <title>Romanza</title>
    <artist>Andrea Bocelli</artist>
    <country>EU</country>
    <company>Polydor</company>
    <price>10.80</price>
    <year>1996</year>
  </cd>
  <cd>
    <title>When a man loves a woman</title>
    <artist>Percy Sledge</artist>
    <country>USA</country>
    <company>Atlantic</company>
    <price>8.70</price>
    <year>1987</year>
  </cd>
  <cd>
    <title>Black angel</title>
    <artist>Savage Rose</artist>
    <country>EU</country>
    <company>Mega</company>
    <price>10.90</price>
    <year>1995</year>
  </cd>
  <cd>
    <title>1999 Grammy Nominees</title>
    <artist>Many</artist>
    <country>USA</country>
    <company>Grammy</company>
    <price>10.20</price>
    <year>1999</year>
  </cd>
  <cd>
    <title>For the good times</title>
    <artist>Kenny Rogers</artist>
    <country>UK</country>
    <company>Mucik Master</company>
    <price>8.70</price>
    <year>1995</year>
  </cd>
  <cd>
    <title>Big Willie style</title>
    <artist>Will Smith</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>9.90</price>
    <year>1997</year>
  </cd>
  <cd>
    <title>Tupelo Honey</title>
    <artist>Van Morrison</artist>
    <country>UK</country>
    <company>Polydor</company>
    <price>8.20</price>
    <year>1971</year>
  </cd>
  <cd>
    <title>Soulsville</title>
    <artist>Jorn Hoel</artist>
    <country>Norway</country>
    <company>WEA</company>
    <price>7.90</price>
    <year>1996</year>
  </cd>
  <cd>
    <title>The very best of</title>
    <artist>Cat Stevens</artist>
    <country>UK</country>
    <company>Island</company>
    <price>8.90</price>
    <year>1990</year>
  </cd>
  <cd>
    <title>Stop</title>
    <artist>Sam Brown</artist>
    <country>UK</country>
    <company>A and M</company>
    <price>8.90</price>
    <year>1988</year>
  </cd>
  <cd>
    <title>Bridge of Spies</title>
    <artist>T`Pau</artist>
    <country>UK</country>
    <company>Siren</company>
    <price>7.90</price>
    <year>1987</year>
  </cd>
  <cd>
    <title>Private Dancer</title>
    <artist>Tina Turner</artist>
    <country>UK</country>
    <company>Capitol</company>
    <price>8.90</price>
    <year>1983</year>
  </cd>
  <cd>
    <title>Midt om natten</title>
    <artist>Kim Larsen</artist>
    <country>EU</country>
    <company>Medley</company>
    <price>7.80</price>
    <year>1983</year>
  </cd>
  <cd>
    <title>Pavarotti Gala Concert</title>
    <artist>Luciano Pavarotti</artist>
    <country>UK</country>
    <company>DECCA</company>
    <price>9.90</price>
    <year>1991</year>
  </cd>
  <cd>
    <title>The dock of the bay</title>
    <artist>Otis Redding</artist>
    <country>USA</country>
    <COMPANY>Stax Records</COMPANY>
    <PRICE>7.90</PRICE>
    <YEAR>1968</YEAR>
  </cd>
  <cd>
    <title>Picture book</title>
    <artist>Simply Red</artist>
    <country>EU</country>
    <company>Elektra</company>
    <price>7.20</price>
    <year>1985</year>
  </cd>
  <cd>
    <title>Red</title>
    <artist>The Communards</artist>
    <country>UK</country>
    <company>London</company>
    <price>7.80</price>
    <year>1987</year>
  </cd>
  <cd>
    <title>Unchain my heart</title>
    <artist>Joe Cocker</artist>
    <country>USA</country>
    <company>EMI</company>
    <price>8.20</price>
    <year>1987</year>
  </cd>
</catalog>
a7  <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Title</th>
      <th style="text-align:left">Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
z.//tr[td and position() <= 6]rW   artist)r   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)rW   rQ  )r,   r-   r   r   r   r.   r^   )r   r+  Zdf_xslrw   r3   r3   r4   test_online_stylesheet  s4    
 VrR  c                 C  s~   t  J}tj|d| |d t|| |d}t||| dg di|d}W d    n1 sX0    Y  t |t t |t d S )NF)r   r@   rM   rA  re   r   rB  )r.   rE   rC  rD  r   rR   r^   )r@   rQ   rP   ri   rj   r3   r3   r4   test_compression_read  s    

$rS  c              	   C  s  |}|}||kr$t | d|  tdftdftdftdfd}tddd	}|d urd|jd
f|d< tddd	}|d urtdf|d< || \}}	t	 \}
t
j|
| |d t j||	d t|
| |d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nz == z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xzrA  r*   )r,   skipOSErrorr	   r   r
   Z	ZstdErrorr   r.   rE   rC  rD  r   r   )r@   rM   rQ   Zactual_compressionZattempted_compressionrY  rZ  r[  	error_clsZ	error_strrJ   r3   r3   r4   test_wrong_compression  s(    
r`  c              	   C  sh   t jtddF t }t|| dd W d    n1 s<0    Y  W d    n1 sZ0    Y  d S )NzUnrecognized compression typer*   Z7zrA  )r,   r   r   r.   rE   r   )r@   rJ   r3   r3   r4   test_unsuported_compression  s    
ra  c                 C  sN   t d t d d| j d}t|d|d}t|d|d}t|| d S )NZs3fsr(   zs3://z
/books.xml)r@   Zstorage_optionsr?   )r,   r-   r'   r   r.   r^   )Zs3_public_bucket_with_dataZs3soZs3r   r   r3   r3   r4   test_s3_parser_consistency  s    

rb  c                   s  d}|r8t dtddg}tdd g}n|dkrrttjddgtjd}ttjdtgtjd}nr|dkrt dddlm	   ddg} dd g}n.t dt
ddg}t
dd g}td	|" tt|| |d
}W d    n1 s0    Y  t|tddgddtddgdd|tdtgddtdtgddtttgddtddgddtdtgddd	|dkrt dddlm	  t fddjD  d d gd< t| d S )Na;  <?xml version='1.0' encoding='utf-8'?>
<data xmlns="http://example.com">
<row>
  <a>x</a>
  <b>1</b>
  <c>4.0</c>
  <d>x</d>
  <e>2</e>
  <f>4.0</f>
  <g></g>
  <h>True</h>
  <i>False</i>
</row>
<row>
  <a>y</a>
  <b>2</b>
  <c>5.0</c>
  <d></d>
  <e></e>
  <f></f>
  <g></g>
  <h>False</h>
  <i></i>
</row>
</data>Zpyarrowxypythonr   r   )ArrowExtensionArrayzmode.string_storage)r@   dtype_backendr#   r$   ZInt64r   g      @ZFloat64TFboolean)	r   r:  r  derK   ghic                   s$   i | ]}| j | d dqS )T)Zfrom_pandas)array).0colrf  r  par3   r4   
<dictcomp>!  s   z1test_read_xml_nullable_dtypes.<locals>.<dictcomp>rk  )r,   r-   r   rn  r   npZobject_r   Zpandas.arraysrf  r   pdZoption_contextr   r   r   r   columnsr.   r^   )r@   Zstring_storagerg  Zusing_infer_stringrH   Zstring_arrayZstring_array_nar  r3   rq  r4   test_read_xml_nullable_dtypes  sP    


2

rw  c                  C  sB   d} t jt| d tddd W d    n1 s40    Y  d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r*   testnumpy)rg  r   r1   r3   r3   r4   test_invalid_dtype_backend+  s    rz  )
__future__r   ior   r   r[  r   r   tarfiler   urllib.errorr   Zxml.etree.ElementTreer   zipfiler	   ry  rt  r,   Zpandas.compat._optionalr
   Zpandas.errorsr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasru  r   r   r   Zpandas._testingZ_testingr.   Zpandas.core.arraysr   r   Zpandas.core.arrays.string_arrowr   Zpandas.io.commonr   Zpandas.io.xmlr   r   rC  r0   r   r   r5   Zfixturer>   r;   Z
skip_if_nor@   rL   rR   rb   marknetworkZ
single_cpurk   rx   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  r  r  r  Zskip_if_installedr  r  r#  r%  r(  r)  r,  r.  r1  r2  r3  r4  r5  r6  r7  r9  r;  r?  rE  rF  rG  rH  rJ  rK  rL  rO  rP  rR  rS  r`  ra  rb  rw  rz  r3   r3   r3   r4   <module>   sJ  6
	m




	4

	%&*1

	
"*	)#$$	  	S