o
    �¨Êh‹  ã                   @  s  d dl mZ d dlmZmZ d dlZd dlZd dlZd dl	m
  mZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ ejdd„ ƒZejd	d
„ ƒZejdd„ ƒZ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 dd„ Z!dd„ Z"dd„ Z#dd „ Z$d!d"„ Z%d#d$„ Z&ej' (d%e)e*d&d'ƒƒd(d)„ e*d&d'ƒD ƒg¡d*d+„ ƒZ+d,Z,d-d.„ Z-d/d0„ Z.d1d2„ Z/d3d4„ Z0d5d6„ Z1d7d8„ Z2d9d:„ Z3d;d<„ Z4d=d>„ Z5d?d@„ Z6dAdB„ Z7dCdD„ Z8dEdF„ Z9dGdH„ Z:dIdJ„ Z;dKdL„ Z<dMdN„ Z=dOdP„ Z>dQdR„ Z?dSdT„ Z@dUZAdVdW„ ZBdXdY„ ZCej' (dZg d[¢¡d\d]„ ƒZDd^d_„ ZEd`da„ ZFdbdc„ ZGddde„ ZHe Id¡dfdg„ ƒZJdhdi„ ZKdjZLdkdl„ ZMdmdn„ ZNdodp„ ZOdqdr„ ZPej' (dsdtdug¡dvdw„ ƒZQdxdy„ ZRdzd{„ ZSd|d}„ ZTd~d„ ZUd€d�„ ZVd‚dƒ„ ZWd„d…„ ZXd,ZYd†d‡„ ZZdˆd‰„ Z[dŠd‹„ Z\dŒd�„ Z]ej'j^dŽd�„ ƒZ_dS )�é    )Úannotations)ÚBytesIOÚStringION)ÚNAÚ	DataFrameÚIndex)Ú
get_handle)Úread_xmlc                   C  s    t g d¢g d¢dtjdgdœƒS )N)ÚsquareÚcircleÚtriangle)éh  r   é´   é   é   ©ÚshapeÚdegreesÚsides)r   ÚnpÚnan© r   r   úQ/var/www/html/env/lib/python3.10/site-packages/pandas/tests/io/xml/test_to_xml.pyÚgeom_df;   s   
ýÿr   c                   C  s"   t g d¢g d¢g d¢g d¢dœƒS )N)ÚMercuryÚVenusÚEarthÚMarsÚJupiterÚSaturnÚUranusÚNeptune)Úterrestrialr"   r"   r"   ú	gas giantr#   ú	ice giantr$   )Úinnerr%   r%   r%   Úouterr&   r&   r&   )g`é|x– Õ?gcAJx@g2rö´ã@g�l®šçˆä?gh‘í|¿¨�@gÞ	ŠÂ�@gd]ÜF´U@g•Ô	hšY@)ÚplanetÚtypeÚlocationÚmass)r   r   r   r   r   Ú	planet_dfF   s   


áÿr+   c                   C  s   dS )Nac  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <category>cooking</category>
    <title>Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.0</price>
  </row>
  <row>
    <index>1</index>
    <category>children</category>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </row>
  <row>
    <index>2</index>
    <category>web</category>
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </row>
</data>r   r   r   r   r   Úfrom_file_expectedv   s   r,   c                 C  s   | d ur
|   dd¡} | S )Nz%<?xml version="1.0" encoding="utf-8"?z%<?xml version='1.0' encoding='utf-8'?)Úreplace)Údocr   r   r   Úequalize_decl–   s   þr/   ÚrbÚr)Úparamsc                 C  ó   | j S ©N©Úparam©Úrequestr   r   r   Úmode    ó   r9   Úlxml)ÚmarksÚetreec                 C  r3   r4   r5   r7   r   r   r   Úparser¥   r:   r>   c              	   C  óš   t | |d�}t d¡�8}|j||d� t|dƒ�}| ¡  d¡ ¡ }W d   ƒ n1 s,w   Y  t|ƒ}||ks;J ‚W d   ƒ d S 1 sFw   Y  d S ©N©r>   útest.xmlr0   úutf-8©	r	   ÚtmÚensure_cleanÚto_xmlÚopenÚreadÚdecodeÚstripr/   ©Ú	xml_booksr>   r,   Údf_fileÚpathÚfÚoutputr   r   r   Útest_file_output_str_read­   ó   ÿ"ùrR   c              	   C  r?   r@   rD   rL   r   r   r   Útest_file_output_bytes_readº   rS   rT   c                 C  s0   t | |d�}|j|d�}t|ƒ}||ksJ ‚d S ©NrA   )r	   rG   r/   )rM   r>   r,   rN   rQ   r   r   r   Útest_str_outputÇ   s   rV   c                 C  sF   d}t jtdd�� |j|| d� W d   ƒ d S 1 sw   Y  d S )Nz/my/fake/path/output.xmlz6Cannot save file into a non-existent directory: .*path©ÚmatchrA   )ÚpytestÚraisesÚOSErrorrG   ©r>   r   rO   r   r   r   Útest_wrong_file_pathÐ   s   þ"ür]   c              	   C  s    d}t | |d�}t d¡�9}|j|d|d� t|dƒ�}| ¡  d¡ ¡ }W d   ƒ n1 s/w   Y  t|ƒ}||ks>J ‚W d   ƒ d S 1 sIw   Y  d S )Na$  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <category>cooking</category>
    <title>Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.0</price>
  </row>
  <row>
    <category>children</category>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </row>
  <row>
    <category>web</category>
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </row>
</data>rA   rB   F©Úindexr>   r0   rC   rD   ©rM   r>   ÚexpectedrN   rO   rP   rQ   r   r   r   Útest_index_falseÝ   s   ÿ"ùrb   c              	   C  s¤   d}t | |d�}t d¡�;}|j|ddd|d� t|dƒ�}| ¡  d	¡ ¡ }W d   ƒ n1 s1w   Y  t|ƒ}||ks@J ‚W d   ƒ d S 1 sKw   Y  d S )
Na,  <?xml version='1.0' encoding='utf-8'?>
<books>
  <book>
    <category>cooking</category>
    <title>Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.0</price>
  </book>
  <book>
    <category>children</category>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book>
    <category>web</category>
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</books>rA   rB   FÚbooksÚbook)r_   Ú	root_nameÚrow_namer>   r0   rC   rD   r`   r   r   r   Ú test_index_false_rename_row_root  s   
ÿÿ"÷rg   Úoffset_indexé
   é   c                 C  s   g | ]}t |ƒ‘qS r   )Ústr)Ú.0Úir   r   r   Ú
<listcomp>.  s    rn   c                 C  s<   d}|  ¡ }t|ƒ|_|jd| d�}t|ƒ}||ksJ ‚dS )z®
    Tests that the output does not contain the `<index>` field when the index of the
    input Dataframe has an offset.

    This is a regression test for issue #42458.
    aD  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>Fr^   N)Úcopyr   r_   rG   r/   )r>   rh   r   ra   Úoffset_geom_dfrQ   r   r   r   Ú(test_index_false_with_offset_input_index-  s   
rq   aƒ  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>c                 C  s$   |j | d�}t|ƒ}|tksJ ‚d S rU   ©rG   r/   Úna_expected©r>   r   rQ   r   r   r   Útest_na_elem_outputn  s   ru   c                 C  s&   |j d| d�}t|ƒ}|tksJ ‚d S )NÚ ©Úna_repr>   rr   rt   r   r   r   Útest_na_empty_str_elem_optionu  s   ry   c                 C  s*   d}|j d| d�}t|ƒ}||ksJ ‚d S )Na�  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides>0.0</sides>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>z0.0rw   ©rG   r/   ©r>   r   ra   rQ   r   r   r   Útest_na_empty_elem_option|  s   r|   c                 C  s.   d}|j g d¢| d�}t|ƒ}||ksJ ‚d S )Nzß<?xml version='1.0' encoding='utf-8'?>
<data>
  <row index="0" shape="square" degrees="360" sides="4.0"/>
  <row index="1" shape="circle" degrees="360"/>
  <row index="2" shape="triangle" degrees="180" sides="3.0"/>
</data>r   ©Ú	attr_colsr>   rz   r{   r   r   r   Útest_attrs_cols_nan_output�  s   r   c                 C  s6   d}|j g d¢ddid| d�}t|ƒ}||ksJ ‚d S )Na>  <?xml version='1.0' encoding='utf-8'?>
<doc:data xmlns:doc="http://example.xom">
  <doc:row doc:index="0" doc:shape="square" doc:degrees="360" doc:sides="4.0"/>
  <doc:row doc:index="1" doc:shape="circle" doc:degrees="360"/>
  <doc:row doc:index="2" doc:shape="triangle" doc:degrees="180" doc:sides="3.0"/>
</doc:data>)r_   r   r   r   r.   zhttp://example.xom)r~   Ú
namespacesÚprefixr>   rz   r{   r   r   r   Útest_attrs_cols_prefix¬  s   ür‚   c                 C  óF   t jtdd�� |jg d¢| d� W d   ƒ d S 1 sw   Y  d S )Núno valid columnrW   ©r   Údegreer   r}   ©rY   rZ   ÚKeyErrorrG   ©r>   r   r   r   r   Útest_attrs_unknown_columnÃ  ó   "ÿrŠ   c                 C  óB   t jtdd�� |jd| d� W d   ƒ d S 1 sw   Y  d S )Nz!is not a valid type for attr_colsrW   ú"shape", "degree", "sides"r}   ©rY   rZ   Ú	TypeErrorrG   r‰   r   r   r   Útest_attrs_wrong_typeÈ  ó   "ÿr�   c                 C  s0   d}|j dg d¢| d�}t|ƒ}||ksJ ‚d S )NaD  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <degrees>360</degrees>
    <sides>4.0</sides>
    <shape>square</shape>
  </row>
  <row>
    <degrees>360</degrees>
    <sides/>
    <shape>circle</shape>
  </row>
  <row>
    <degrees>180</degrees>
    <sides>3.0</sides>
    <shape>triangle</shape>
  </row>
</data>F)r   r   r   )r_   Ú	elem_colsr>   rz   ©r>   r   Úelems_cols_expectedrQ   r   r   r   Útest_elems_cols_nan_outputÐ  s   
ÿr•   c                 C  rƒ   )Nr„   rW   r…   ©r’   r>   r‡   r‰   r   r   r   Útest_elems_unknown_columní  r‹   r—   c                 C  rŒ   )Nz!is not a valid type for elem_colsrW   r�   r–   rŽ   r‰   r   r   r   Útest_elems_wrong_typeò  r‘   r˜   c                 C  s4   d}|j dddgdg| d�}t|ƒ}||ksJ ‚d S )Na#  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row shape="square">
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row shape="circle">
    <degrees>360</degrees>
    <sides/>
  </row>
  <row shape="triangle">
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>Fr   r   r   )r_   r’   r~   r>   rz   r“   r   r   r   Útest_elems_and_attrs_cols÷  s   ür™   c                 C  sH   d}|j ddgdg d¢dd� d¡}|j| d	�}t|ƒ}||ks"J ‚d S )
NaÔ  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <location>inner</location>
    <type>terrestrial</type>
    <count_mass>4</count_mass>
    <sum_mass>11.81</sum_mass>
    <mean_mass>2.95</mean_mass>
  </row>
  <row>
    <location>outer</location>
    <type>gas giant</type>
    <count_mass>2</count_mass>
    <sum_mass>2466.5</sum_mass>
    <mean_mass>1233.25</mean_mass>
  </row>
  <row>
    <location>outer</location>
    <type>ice giant</type>
    <count_mass>2</count_mass>
    <sum_mass>189.23</sum_mass>
    <mean_mass>94.61</mean_mass>
  </row>
  <row>
    <location>All</location>
    <type/>
    <count_mass>8</count_mass>
    <sum_mass>2667.54</sum_mass>
    <mean_mass>333.44</mean_mass>
  </row>
</data>r)   r(   r*   ©ÚcountÚsumÚmeanT©r_   ÚvaluesÚaggfuncÚmarginsé   rA   )Úpivot_tableÚroundrG   r/   ©r>   r+   ra   ÚpvtrQ   r   r   r   Útest_hierarchical_columns  s   !üûr§   c                 C  sV   d}|j ddgdg d¢dd� d¡}|jt| ¡ jjƒ| d	�}t|ƒ}||ks)J ‚d S )
Na¦  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row location="inner" type="terrestrial" count_mass="4" sum_mass="11.81" mean_mass="2.95"/>
  <row location="outer" type="gas giant" count_mass="2" sum_mass="2466.5" mean_mass="1233.25"/>
  <row location="outer" type="ice giant" count_mass="2" sum_mass="189.23" mean_mass="94.61"/>
  <row location="All" type="" count_mass="8" sum_mass="2667.54" mean_mass="333.44"/>
</data>r)   r(   r*   rš   Trž   r¢   r}   )r£   r¤   rG   ÚlistÚreset_indexÚcolumnsrŸ   r/   r¥   r   r   r   Útest_hierarchical_attrs_columnsF  s   üûr«   c                 C  sJ   d}|  ddg¡d  g d¢¡ d¡}|j| d�}t|ƒ}||ks#J ‚d S )NaÞ  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <location>inner</location>
    <type>terrestrial</type>
    <count>4</count>
    <sum>11.81</sum>
    <mean>2.95</mean>
  </row>
  <row>
    <location>outer</location>
    <type>gas giant</type>
    <count>2</count>
    <sum>2466.5</sum>
    <mean>1233.25</mean>
  </row>
  <row>
    <location>outer</location>
    <type>ice giant</type>
    <count>2</count>
    <sum>189.23</sum>
    <mean>94.61</mean>
  </row>
</data>r)   r(   r*   rš   r¢   rA   )ÚgroupbyÚaggr¤   rG   r/   ©r>   r+   ra   r­   rQ   r   r   r   Útest_multi_indexd  s   
ýr¯   c                 C  sX   d}|  ddg¡d  g d¢¡ d¡}|jt| ¡ jjƒ| d�}t|ƒ}||ks*J ‚d S )Na$  <?xml version='1.0' encoding='utf-8'?>
<data>
  <row location="inner" type="terrestrial" count="4" sum="11.81" mean="2.95"/>
  <row location="outer" type="gas giant" count="2" sum="2466.5" mean="1233.25"/>
  <row location="outer" type="ice giant" count="2" sum="189.23" mean="94.61"/>
</data>r)   r(   r*   rš   r¢   r}   )	r¬   r­   r¤   rG   r¨   r©   rª   rŸ   r/   r®   r   r   r   Útest_multi_index_attrs_cols‹  s   
ýr°   c                 C  s.   d}|j ddi| d�}t|ƒ}||ksJ ‚d S )Naž  <?xml version='1.0' encoding='utf-8'?>
<data xmlns="http://example.com">
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>rv   úhttp://example.com©r€   r>   rz   r{   r   r   r   Útest_default_namespace¥  s   r³   c                 C  s0   d}|j dddœ| d�}t|ƒ}||ksJ ‚d S )Na¾  <?xml version='1.0' encoding='utf-8'?>
<data xmlns:oth="http://other.org" xmlns:ex="http://example.com">
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>úhttp://other.orgr±   )ÚothÚexr²   rz   r{   r   r   r   Útest_unused_namespacesÃ  s   þr·   c                 C  s0   d}|j ddid| d�}t|ƒ}||ksJ ‚d S )Na  <?xml version='1.0' encoding='utf-8'?>
<doc:data xmlns:doc="http://example.com">
  <doc:row>
    <doc:index>0</doc:index>
    <doc:shape>square</doc:shape>
    <doc:degrees>360</doc:degrees>
    <doc:sides>4.0</doc:sides>
  </doc:row>
  <doc:row>
    <doc:index>1</doc:index>
    <doc:shape>circle</doc:shape>
    <doc:degrees>360</doc:degrees>
    <doc:sides/>
  </doc:row>
  <doc:row>
    <doc:index>2</doc:index>
    <doc:shape>triangle</doc:shape>
    <doc:degrees>180</doc:degrees>
    <doc:sides>3.0</doc:sides>
  </doc:row>
</doc:data>r.   r±   ©r€   r�   r>   rz   r{   r   r   r   Útest_namespace_prefixç  s   
ÿr¹   c                 C  sH   t jtdd�� |jddid| d� W d   ƒ d S 1 sw   Y  d S )Nz!doc is not included in namespacesrW   rv   r±   r.   r¸   r‡   r‰   r   r   r   Útest_missing_prefix_in_nmsp  s
   
ÿ"ÿrº   c                 C  s2   d}|j dddœd| d�}t|ƒ}||ksJ ‚d S )Na7  <?xml version='1.0' encoding='utf-8'?>
<doc:data xmlns:doc="http://other.org" xmlns="http://example.com">
  <doc:row>
    <doc:index>0</doc:index>
    <doc:shape>square</doc:shape>
    <doc:degrees>360</doc:degrees>
    <doc:sides>4.0</doc:sides>
  </doc:row>
  <doc:row>
    <doc:index>1</doc:index>
    <doc:shape>circle</doc:shape>
    <doc:degrees>360</doc:degrees>
    <doc:sides/>
  </doc:row>
  <doc:row>
    <doc:index>2</doc:index>
    <doc:shape>triangle</doc:shape>
    <doc:degrees>180</doc:degrees>
    <doc:sides>3.0</doc:sides>
  </doc:row>
</doc:data>r±   r´   )rv   r.   r.   r¸   rz   r{   r   r   r   Ú!test_namespace_prefix_and_default  s   ýr»   u«  <?xml version='1.0' encoding='ISO-8859-1'?>
<data>
  <row>
    <index>0</index>
    <rank>1</rank>
    <malename>JosÃ©</malename>
    <femalename>SofÃ­a</femalename>
  </row>
  <row>
    <index>1</index>
    <rank>2</rank>
    <malename>Luis</malename>
    <femalename>Valentina</femalename>
  </row>
  <row>
    <index>2</index>
    <rank>3</rank>
    <malename>Carlos</malename>
    <femalename>Isabella</femalename>
  </row>
  <row>
    <index>3</index>
    <rank>4</rank>
    <malename>Juan</malename>
    <femalename>Camila</femalename>
  </row>
  <row>
    <index>4</index>
    <rank>5</rank>
    <malename>Jorge</malename>
    <femalename>Valeria</femalename>
  </row>
</data>c                 C  sF   t | |dd� d¡}|jd|d�}|d ur| dd¡}|tks!J ‚d S )Nú
ISO-8859-1)r>   Úencodingé   ©r½   r>   z*<?xml version="1.0" encoding="ISO-8859-1"?z*<?xml version='1.0' encoding='ISO-8859-1'?)r	   ÚheadrG   r-   Úencoding_expected)Úxml_baby_namesr>   rN   rQ   r   r   r   Útest_encoding_option_strV  s   þrÃ   c                 C  sZ   t  d¡ t| ddd�}t d¡�}|j|dddd� W d   ƒ d S 1 s&w   Y  d S ©Nr;   r¼   r¿   rB   F)r_   r½   r>   ©rY   Úimportorskipr	   rE   rF   rG   )rÂ   rN   rO   r   r   r   Útest_correct_encoding_filee  s
   
"ÿrÇ   r½   )zUTF-8zUTF-16r¼   c                 C  sZ   t  d¡ t| ddd�}t d¡�}|j|d||d� W d   ƒ d S 1 s&w   Y  d S rÄ   rÅ   )rÂ   r>   r½   rN   rO   r   r   r   Útest_wrong_encoding_option_lxmlm  s
   
"ÿrÈ   c                 C  rŒ   )Nzunknown encodingrW   zuft-8r¿   )rY   rZ   ÚLookupErrorrG   r‰   r   r   r   Útest_misspelled_encodingv  r‘   rÊ   c                 C  s*   t  d¡ d}| jdd�}||ksJ ‚d S )Nr;   a\  <data>
  <row>
    <index>0</index>
    <shape>square</shape>
    <degrees>360</degrees>
    <sides>4.0</sides>
  </row>
  <row>
    <index>1</index>
    <shape>circle</shape>
    <degrees>360</degrees>
    <sides/>
  </row>
  <row>
    <index>2</index>
    <shape>triangle</shape>
    <degrees>180</degrees>
    <sides>3.0</sides>
  </row>
</data>F)Úxml_declaration)rY   rÆ   rG   )r   ra   rQ   r   r   r   Ú!test_xml_declaration_pretty_print~  s   
rÌ   c                 C  s>   d}|j d| d�}t|ƒ}|d ur| dd¡}||ksJ ‚d S )Na4  <?xml version='1.0' encoding='utf-8'?>
<data><row><index>0</index><shape>square</shape><degrees>360</degrees><sides>4.0</sides></row><row><index>1</index><shape>circle</shape><degrees>360</degrees><sides/></row><row><index>2</index><shape>triangle</shape><degrees>180</degrees><sides>3.0</sides></row></data>F)Úpretty_printr>   ú />ú/>)rG   r/   r-   r{   r   r   r   Útest_no_pretty_print_with_decl›  s   ÿ
rÐ   c                 C  s8   d}|j dd| d�}|d ur| dd¡}||ksJ ‚d S )Na  <data><row><index>0</index><shape>square</shape><degrees>360</degrees><sides>4.0</sides></row><row><index>1</index><shape>circle</shape><degrees>360</degrees><sides/></row><row><index>2</index><shape>triangle</shape><degrees>180</degrees><sides>3.0</sides></row></data>F)rË   rÍ   r>   rÎ   rÏ   )rG   r-   r{   r   r   r   Útest_no_pretty_print_no_decl°  s   ÿ	rÑ   c                 C  s<   t jtdd�� |  ¡  W d   ƒ d S 1 sw   Y  d S )Nz7lxml not found, please install or use the etree parser.rW   )rY   rZ   ÚImportErrorrG   ©r   r   r   r   Útest_default_parser_no_lxmlÆ  s
   ÿ
"ýrÔ   c                 C  s@   t jtdd�� | jdd� W d   ƒ d S 1 sw   Y  d S )Nz,Values for parser can only be lxml or etree.rW   Úbs4rA   ©rY   rZ   Ú
ValueErrorrG   rÓ   r   r   r   Útest_unknown_parserÎ  s
   ÿ"ýrØ   a%  <?xml version="1.0" encoding="utf-8"?>
<data>
  <row>
    <field field="index">0</field>
    <field field="shape">square</field>
    <field field="degrees">360</field>
    <field field="sides">4.0</field>
  </row>
  <row>
    <field field="index">1</field>
    <field field="shape">circle</field>
    <field field="degrees">360</field>
    <field field="sides"/>
  </row>
  <row>
    <field field="index">2</field>
    <field field="shape">triangle</field>
    <field field="degrees">180</field>
    <field field="sides">3.0</field>
  </row>
</data>c                 C  s^   t  d¡ t| ||dkrdnd d��}|j|d�tksJ ‚W d   ƒ d S 1 s(w   Y  d S ©Nr;   r1   rC   ©r½   ©Ú
stylesheet)rY   rÆ   rH   rG   Úxsl_expected)Úxsl_row_field_outputr9   r   rP   r   r   r   Útest_stylesheet_file_likeï  s   
ÿ"ýrß   c                 C  s‚   t  d¡ t| ||dkrdnd d��}|dkrt| ¡ ƒ}nt| ¡ ƒ}W d   ƒ n1 s.w   Y  |j|d�}|tks?J ‚d S )Nr;   r1   rC   rÚ   r0   rÛ   )rY   rÆ   rH   r   rI   r   rG   rÝ   ©rÞ   r9   r   rP   Úxsl_objrQ   r   r   r   Útest_stylesheet_io÷  s   
ÿ€úrâ   c                 C  sh   t  d¡ t| ||dkrdnd d��}| ¡ }W d   ƒ n1 s!w   Y  |j|d�}|tks2J ‚d S rÙ   )rY   rÆ   rH   rI   rG   rÝ   rà   r   r   r   Útest_stylesheet_buffered_reader
  s   
ÿ
ýrã   c                 C  s\   t  d¡}tj ddd¡}t j|jdd�� | j|d� W d   ƒ d S 1 s'w   Y  d S )Nú
lxml.etreeÚdataÚxmlzrow_field_output.xsltú!Start tag expected, '<' not foundrW   rÛ   )rY   rÆ   ÚosrO   ÚjoinrZ   ÚXMLSyntaxErrorrG   ©r   Ú
lxml_etreeÚxslr   r   r   Útest_stylesheet_wrong_path  s   
þ"ürî   Úvalrv   ó    c                 C  sZ   t  d¡}d g d¢¡}t j|j|d�� |j| d� W d   ƒ d S 1 s&w   Y  d S )Nrä   ú|)zDocument is emptyrç   zNone \(line 0\)rW   rÛ   )rY   rÆ   ré   rZ   rê   rG   )rï   r   rì   Úmsgr   r   r   Útest_empty_string_stylesheet"  s   
ÿ	"ÿró   c                 C  óP   t  d¡}d}t j|jdd�� | j|d� W d   ƒ d S 1 s!w   Y  d S )Nrä   aR  <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:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="row/*">
        <field>
            <xsl:attribute name="field">
                <xsl:value-of select="name()"/>
            </xsl:attribute>
            <xsl:value-of select="text()"/>
        </field>
    </xsl:template>
</xsl:stylesheet>zOpening and ending tag mismatchrW   rÛ   )rY   rÆ   rZ   rê   rG   rë   r   r   r   Útest_incorrect_xsl_syntax3  s   
ÿ"ýrõ   c                 C  rô   )Nrä   aT  <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:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="row/*">
        <field>
            <xsl:attribute name="field">
                <xsl:value-of select="name()"/>
            </xsl:attribute>
            <xsl:value-of select="text()"/>
        </field>
    </xsl:template>
</xsl:stylesheet>zfailed to compilerW   rÛ   )rY   rÆ   rZ   ÚXSLTParseErrorrG   rë   r   r   r   Útest_incorrect_xsl_evalQ  s
   
"ÿr÷   c              	   C  sŒ   t  d¡}d}t j|jdd��- t d¡�}| j||d� W d   ƒ n1 s'w   Y  W d   ƒ d S W d   ƒ d S 1 s?w   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 URIrW   rB   rÛ   )rY   rÆ   rZ   ÚXSLTApplyErrorrE   rF   rG   )r   rì   rí   rO   r   r   r   Útest_incorrect_xsl_applym  s   
ÿÿ"ÿrù   c                 C  sF   d}t jtdd�� | jd|d� W d   ƒ d S 1 sw   Y  d S )NaI  <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:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>z*To use stylesheet, you need lxml installedrW   r=   )r>   rÜ   rÖ   )r   rí   r   r   r   Útest_stylesheet_with_etree�  s   ÿ"ýrú   c                 C  sF   t  d¡ d}| jdd�}|d ur| ¡ }| j|d�}||ks!J ‚d S )Nr;   aQ  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:param name="delim">,</xsl:param>
    <xsl:template match="/data">
        <xsl:text>,shape,degrees,sides&#xa;</xsl:text>
        <xsl:apply-templates select="row"/>
    </xsl:template>

    <xsl:template match="row">
        <xsl:value-of select="concat(index, $delim, shape, $delim,
                                     degrees, $delim, sides)"/>
         <xsl:text>&#xa;</xsl:text>
    </xsl:template>
</xsl:stylesheet>Ú
)ÚlineterminatorrÛ   )rY   rÆ   Úto_csvrK   rG   )r   rí   Úout_csvÚout_xmlr   r   r   Útest_style_to_csv“  s   
r   c                 C  s4   t  d¡ d}|  ¡ }| jd|d�}||ksJ ‚d S )Nr;   a˜  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:param name="delim"><xsl:text>               </xsl:text></xsl:param>
    <xsl:template match="/data">
        <xsl:text>      shape  degrees  sides&#xa;</xsl:text>
        <xsl:apply-templates select="row"/>
    </xsl:template>

    <xsl:template match="row">
        <xsl:value-of select="concat(index, ' ',
                                     substring($delim, 1, string-length('triangle')
                                               - string-length(shape) + 1),
                                     shape,
                                     substring($delim, 1, string-length(name(degrees))
                                               - string-length(degrees) + 2),
                                     degrees,
                                     substring($delim, 1, string-length(name(sides))
                                               - string-length(sides) + 2),
                                     sides)"/>
         <xsl:text>&#xa;</xsl:text>
    </xsl:template>
</xsl:stylesheet>ÚNaN)rx   rÜ   )rY   rÆ   Ú	to_stringrG   )r   rí   Úout_strrÿ   r   r   r   Útest_style_to_string°  s
   
r  c                 C  s2   t  d¡ d}|  ¡ }| j|d�}||ksJ ‚d S )Nr;   a]  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:param name="quot">"</xsl:param>

    <xsl:template match="/data">
        <xsl:text>{"shape":{</xsl:text>
        <xsl:apply-templates select="descendant::row/shape"/>
        <xsl:text>},"degrees":{</xsl:text>
        <xsl:apply-templates select="descendant::row/degrees"/>
        <xsl:text>},"sides":{</xsl:text>
        <xsl:apply-templates select="descendant::row/sides"/>
        <xsl:text>}}</xsl:text>
    </xsl:template>

    <xsl:template match="shape|degrees|sides">
        <xsl:variable name="val">
            <xsl:if test = ".=''">
                <xsl:value-of select="'null'"/>
            </xsl:if>
            <xsl:if test = "number(text()) = text()">
                <xsl:value-of select="text()"/>
            </xsl:if>
            <xsl:if test = "number(text()) != text()">
                <xsl:value-of select="concat($quot, text(), $quot)"/>
            </xsl:if>
        </xsl:variable>
        <xsl:value-of select="concat($quot, preceding-sibling::index,
                                     $quot,':', $val)"/>
        <xsl:if test="preceding-sibling::index != //row[last()]/index">
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>rÛ   )rY   rÆ   Úto_jsonrG   )r   rí   Úout_jsonrÿ   r   r   r   Útest_style_to_jsonÒ  s
   
%r  c              	   C  sŒ   t  ¡ �,}|j|| |d� t|d|d��}|j ¡ }W d   ƒ n1 s$w   Y  W d   ƒ n1 s3w   Y  t|ƒ}t| ¡ ksDJ ‚d S )N©r>   Úcompressionr1   ©r	  ©	rE   rF   rG   r   ÚhandlerI   r/   Úgeom_xmlrK   )r>   Úcompression_onlyr   rO   Ú
handle_objrQ   r   r   r   Útest_compression_output  s   
ýû€ý
r  c              	   C  sœ   d||  }t j|d��,}|j|| |d� t|d|d��}|j ¡ }W d   ƒ n1 s,w   Y  W d   ƒ n1 s;w   Y  t|ƒ}t| ¡ ksLJ ‚d S )Nzxml.)Úfilenamer  r1   r
  r  )r>   r  r   Úcompression_to_extensionÚcompfilerO   r  rQ   r   r   r   Útest_filename_and_suffix_comp*  s   ýû€ý
r  c                 C  s<   d}t dtgiƒ | ¡}|j|d�}t|ƒ ¡ |ksJ ‚d S )Nzd<?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <a/>
  </row>
</data>ÚarA   )r   r   ÚastyperG   r/   rK   )Úany_numeric_ea_dtyper>   ra   ÚdfÚresultr   r   r   Útest_ea_dtypes=  s   r  c              	   C  s|   t jtdd��- t ¡ �}|j|| dd� W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s7w   Y  d S )NzUnrecognized compression typerW   Ú7zr  )rY   rZ   r×   rE   rF   rG   r\   r   r   r   Útest_unsuported_compressionK  s   
ÿÿ"ÿr  c                 C  sz   t  d¡}t  d¡ t ttf¡�" |jdd�}| |j¡ |j	d|j› d�d| d� W d   ƒ d S 1 s6w   Y  d S )	NÚs3fsr;   T)Úanonzs3://z	/geom.xmlÚzip)r	  r>   )
rY   rÆ   rE   Úexternal_error_raisedÚPermissionErrorÚFileNotFoundErrorÚS3FileSystemÚlsÚnamerG   )r>   Ús3_public_bucketr   r  Úfsr   r   r   Útest_s3_permission_outputT  s   

ÿ"ür(  )`Ú
__future__r   Úior   r   rè   Únumpyr   rY   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsÚtdÚpandasr   r   r   Úpandas._testingÚ_testingrE   Úpandas.io.commonr   Úpandas.io.xmlr	   Úfixturer   r+   r,   r/   r9   r6   Ú
skip_if_nor>   rR   rT   rV   r]   rb   rg   ÚmarkÚparametrizer¨   Úrangerq   rs   ru   ry   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Ñ   Úskip_if_installedrÔ   rØ   rÝ   rß   râ   rã   rî   ró   rõ   r÷   rù   rú   r   r  r  r  r  r  r  r  Ú
single_cpur(  r   r   r   r   Ú<module>   sª    %


/



	')"ÿ
&! /'$ $$

	
"0	