o
    i                     @  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 d dlmZ 	 eg dg d	d
ejdgdZeg dg dg dg ddZ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d0d1 Z.d2Z/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@dUdV ZAdWdX ZBdYZCdZd[ ZDe"dd\d] ZEe"dej*+d^g d_d`da ZFdbdc ZGe"dddde ZHdfdg ZIdhdi ZJeKddjdk ZLdldm ZMdnZNe"ddodp ZOe"ddqdr ZPe"ddsdt ZQe"ddudv ZRe"dej*+dwdxdygdzd{ ZSe"dd|d} ZTe"dd~d ZUe"ddd ZVdd ZWe"ddd ZXe"ddd ZYe"ddd ZZd2Z[dd Z\dd Z]dd Z^dd Z_ej*j`e"de"ddd ZadS )    )annotations)BytesIOStringION)NA	DataFrameIndex)_compression_to_extension)
get_handle)read_xml)squarecircletriangle)h  r            shapedegreessides)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@gl?gh|@g	@gd]FU@g	hY@)planettypelocationmassac  <?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>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)doc r)   Z/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/io/xml/test_to_xml.pyequalize_decl   s   r+   rbr)paramsc                 C     | j S Nparamrequestr)   r)   r*   mode      r5   lxml)marksetreec                 C  r/   r0   r1   r3   r)   r)   r*   parser   r6   r:   c              	   C     | dddd}t ||d}td8}|j||d t|d}| d }W d    n1 s3w   Y  t|}|t	ksBJ W d    d S 1 sMw   Y  d S 	Niodataxml	books.xmlr:   test.xmlr,   utf-8
r
   tmensure_cleanto_xmlopenreaddecodestripr+   from_file_expecteddatapathr:   filenamedf_filepathfoutputr)   r)   r*   test_file_output_str_read      "rT   c              	   C  r;   r<   rD   rM   r)   r)   r*   test_file_output_bytes_read   rU   rV   c                 C  s>   | dddd}t ||d}|j|d}t|}|tksJ d S )Nr=   r>   r?   r@   rA   )r
   rG   r+   rL   rN   r:   rO   rP   rS   r)   r)   r*   test_str_output   s
   rX   c                 C  sF   d}t jtdd t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OSErrorgeom_dfrG   r:   rQ   r)   r)   r*   test_wrong_file_path   s   "r`   c              	   C  s   d}| dddd}t ||d}td9}|j|d|d	 t|d
}| d }W d    n1 s6w   Y  t|}||ksEJ W d    d S 1 sPw   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>r=   r>   r?   r@   rA   rB   Findexr:   r,   rC   	r
   rE   rF   rG   rH   rI   rJ   rK   r+   rN   r:   expectedrO   rP   rQ   rR   rS   r)   r)   r*   test_index_false   s   "rf   c              	   C  s   d}| dddd}t ||d}td;}|j|dd	d
|d t|d}| d }W d    n1 s8w   Y  t|}||ksGJ W d    d S 1 sRw   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>r=   r>   r?   r@   rA   rB   Fbooksbook)rb   	root_namerow_namer:   r,   rC   rc   rd   r)   r)   r*    test_index_false_rename_row_root  s   
"rk   offset_index
      c                 C  s   g | ]}t |qS r)   )str).0ir)   r)   r*   
<listcomp>.  s    rr   c                 C  s<   d}t  }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>Fra   N)r^   copyr   rb   rG   r+   )r:   rl   re   offset_geom_dfrS   r)   r)   r*   (test_index_false_with_offset_input_index-  s   
ru   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$   t j| d}t|}|tksJ d S )NrA   r^   rG   r+   na_expectedr:   rS   r)   r)   r*   test_na_elem_outputn  s   ry   c                 C  s&   t jd| d}t|}|tksJ d S )N na_repr:   rv   rx   r)   r)   r*   test_na_empty_str_elem_optionu  s   r}   c                 C  s*   d}t 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.0r{   r^   rG   r+   r:   re   rS   r)   r)   r*   test_na_empty_elem_option|  s   r   c                 C  s.   d}t 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:   r~   r   r)   r)   r*   test_attrs_cols_nan_output  s   r   c                 C  s6   d}t 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>)rb   r   r   r   r(   zhttp://example.xom)r   
namespacesprefixr:   r~   r   r)   r)   r*   test_attrs_cols_prefix  s   r   c                 C  F   t jtdd tjg d| d W d    d S 1 sw   Y  d S )Nno valid columnrY   r   degreer   r   r[   r\   KeyErrorr^   rG   rA   r)   r)   r*   test_attrs_unknown_column     "r   c                 C  B   t jtdd tjd| d W d    d S 1 sw   Y  d S )Nz!is not a valid type for attr_colsrY   "shape", "degree", "sides"r   r[   r\   	TypeErrorr^   rG   rA   r)   r)   r*   test_attrs_wrong_type     "r   c                 C  s0   d}t 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   )rb   	elem_colsr:   r~   r:   elems_cols_expectedrS   r)   r)   r*   test_elems_cols_nan_output  s   
r   c                 C  r   )Nr   rY   r   r   r:   r   rA   r)   r)   r*   test_elems_unknown_column  r   r   c                 C  r   )Nz!is not a valid type for elem_colsrY   r   r   r   rA   r)   r)   r*   test_elems_wrong_type  r   r   c                 C  s4   d}t 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   )rb   r   r   r:   r~   r   r)   r)   r*   test_elems_and_attrs_cols  s   r   c                 C  sH   d}t 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rb   valuesaggfuncmargins   rA   )	planet_dfpivot_tableroundrG   r+   r:   re   pvtrS   r)   r)   r*   test_hierarchical_columns  s   !r   c                 C  sV   d}t 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   r   rG   listreset_indexcolumnsr   r+   r   r)   r)   r*   test_hierarchical_attrs_columnsF  s   r   c                 C  sJ   d}t 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   )r   groupbyaggr   rG   r+   r:   re   r   rS   r)   r)   r*   test_multi_indexd  s   
r   c                 C  sX   d}t 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   r   rG   r   r   r   r   r+   r   r)   r)   r*   test_multi_index_attrs_cols  s   
r   c                 C  s.   d}t 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>rz   http://example.com)r   r:   r~   r   r)   r)   r*   test_default_namespace  s   r   c                 C  s0   d}t 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:   r~   r   r)   r)   r*   test_namespace_prefix  s   
r   c                 C  sH   t jtdd tjddid| d W d    d S 1 sw   Y  d S )Nz!doc is not included in namespacesrY   rz   r   r(   r   r   rA   r)   r)   r*   test_missing_prefix_in_nmsp  s
   
"r   c                 C  sF   d}t jdddd| d}t|}|d ur|dd}||ks!J d S )	Na7  <?xml version='1.0' encoding='utf-8'?>
<doc:data xmlns="http://example.com" xmlns:doc="http://other.org">
  <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   zhttp://other.org)rz   r(   r(   r   z7xmlns:doc="http://other.org" xmlns="http://example.com"z7xmlns="http://example.com" xmlns:doc="http://other.org"r^   rG   r+   r'   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  sT   | dddd}t ||ddd}|jd|d}|d ur"|d	d
}|tks(J d S )Nr=   r>   r?   baby_names.xml
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_expectedrW   r)   r)   r*   test_encoding_option_str=  s   r   c                 C  s^   | ddd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?   r   r   r7   r   rB   F)rb   r   r:   r
   rE   rF   rG   )rN   rO   rP   rQ   r)   r)   r*   test_correct_encoding_fileM  s
   "r   r   )zUTF-8zUTF-16r   c                 C  s^   | dddd}t |ddd}td}|j|d	||d
 W d    d S 1 s(w   Y  d S r   r   )rN   r:   r   rO   rP   rQ   r)   r)   r*   test_wrong_encoding_option_lxmlV  s
   "r   c                 C  r   )Nzunknown encodingrY   zuft-8r   )r[   r\   LookupErrorr^   rG   rA   r)   r)   r*   test_misspelled_encoding`  r   r   c                  C  s    d} t j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)xml_declaration)r^   rG   )re   rS   r)   r)   r*   !test_xml_declaration_pretty_printh  s   r   c                 C  s>   d}t 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:    />/>r   r   r)   r)   r*   test_no_pretty_print_with_decl  s   
r   c                 C  s8   d}t 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   )r^   rG   r'   r   r)   r)   r*   test_no_pretty_print_no_decl  s   	r   c                   C  s<   t jtdd t  W d    d S 1 sw   Y  d S )Nz7lxml not found, please install or use the etree parser.rY   )r[   r\   ImportErrorr^   rG   r)   r)   r)   r*   test_default_parser_no_lxml  s
   
"r   c                   C  s@   t jtdd tjdd W d    d S 1 sw   Y  d S )Nz,Values for parser can only be lxml or etree.rY   bs4rA   r[   r\   
ValueErrorr^   rG   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  sR   | dddd}t ||}tj|dtksJ W d    d S 1 s"w   Y  d S Nr=   r>   r?   row_field_output.xsl
stylesheet)rH   r^   rG   xsl_expected)rN   r5   xslrR   r)   r)   r*   test_stylesheet_file_like  s   "r   c                 C  sv   | dddd}t ||}|dkrt| }nt| }W d    n1 s(w   Y  tj|d}|tks9J d S )Nr=   r>   r?   r   r,   r   )rH   r   rI   r   r^   rG   r   )rN   r5   xsl_pathrR   xsl_objrS   r)   r)   r*   test_stylesheet_io  s   r   c                 C  s\   | dddd}t ||}| }W d    n1 sw   Y  tj|d}|tks,J d S r   )rH   rI   r^   rG   r   )rN   r5   r   rR   r   rS   r)   r)   r*   test_stylesheet_buffered_reader  s   
r   c                  C  s\   ddl m}  tjddd}tj| dd tj|d W d    d S 1 s'w   Y  d S )	Nr   XMLSyntaxErrorr>   r?   zrow_field_output.xslt!Start tag expected, '<' not foundrY   r   )	
lxml.etreer   osrQ   joinr[   r\   r^   rG   r   r   r)   r)   r*   test_stylesheet_wrong_path  s   "r   valrz       c                 C  sZ   ddl m} dg d}tj||d tj| d W d    d S 1 s&w   Y  d S )Nr   r   |)zDocument is emptyr   zNone \(line 0\)rY   r   )r   r   r   r[   r\   r^   rG   )r   r   msgr)   r)   r*   test_empty_string_stylesheet  s   	"r   c                  C  P   ddl m}  d}tj| dd tj|d W d    d S 1 s!w   Y  d S )Nr   r   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 mismatchrY   r   )r   r   r[   r\   r^   rG   r   r)   r)   r*   test_incorrect_xsl_syntax  
   "r   c                  C  r   )Nr   )XSLTParseErroraT  <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 compilerY   r   )r   r   r[   r\   r^   rG   )r   r   r)   r)   r*   test_incorrect_xsl_eval:  r   r   c               	   C  s   ddl m}  d}tj| dd- td}tj||d W d    n1 s'w   Y  W d    d S W d    d S 1 s?w   Y  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>zCannot resolve URIrY   rB   r   )r   r   r[   r\   rE   rF   r^   rG   )r   r   rQ   r)   r)   r*   test_incorrect_xsl_applyW  s   "r   c                  C  sF   d} t jtdd t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 installedrY   r9   )r:   r   r   )r   r)   r)   r*   test_stylesheet_with_etreel  s   "r   c                  C  s<   d} t jdd}|d ur| }t j| d}||ksJ d S )NaQ  <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   )r^   to_csvrK   rG   )r   out_csvout_xmlr)   r)   r*   test_style_to_csv~  s   r   c                  C  s*   d} t  }t jd| d}||ksJ d S )Na  <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)r|   r   )r^   	to_stringrG   )r   out_strr   r)   r)   r*   test_style_to_string  s   r   c                  C  s(   d} t  }t j| d}||ksJ d S )Na]  <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   )r^   to_jsonrG   )r   out_jsonr   r)   r)   r*   test_style_to_json  s   %r  c              	   C  s   t  ,}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:   compressionr-   r  )
rE   rF   r^   rG   r	   handlerI   r+   geom_xmlrK   )r:   compression_onlyrQ   
handle_objrS   r)   r)   r*   test_compression_output  s   

r  c              	   C  s   dt |  }tj|d,}t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.)rO   r  r-   r  )r   rE   rF   r^   rG   r	   r  rI   r+   r  rK   )r:   r	  compfilerQ   r
  rS   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:   re   dfresultr)   r)   r*   test_ea_dtypes&  s   r  c              	   C  s|   t jtdd- t }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 typerY   7zr  )r[   r\   r   rE   rF   r^   rG   r_   r)   r)   r*   test_unsuported_compression4  s   
"r  s3fsc                 C  sb   dd l }tjtdd |jdd}|d tjdd| d	 W d    d S 1 s*w   Y  d S )
Nr   zAccess DeniedrY   T)anonzpandas-testzs3://pandas-test/geom.xmlzip)r  r:   )r  r[   r\   PermissionErrorS3FileSystemlsr^   rG   )r:   s3_resourcer  fsr)   r)   r*   test_s3_permission_output=  s   
"r  )b
__future__r   r=   r   r   r   numpynpr[   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   r   r   pandas._testing_testingrE    pandas.tests.io.test_compressionr   pandas.io.commonr	   pandas.io.xmlr
   nanr^   r   rL   r+   fixturer5   r2   
skip_if_nor:   rT   rV   rX   r`   rf   rk   markparametrizer   rangeru   rw   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    $



-


(*"
&! /'! +$


	








!
/	