a
    Pf                     @  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 ZUdd ZVdd ZWdd ZXd,ZYdd ZZdd Z[dd Z\dd Z]ej'j^dd 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)Zsquarecircletriangle)h  r            shapedegreessides)r   npnan r   r   X/var/www/ai-form-bot/venv/lib/python3.9/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)ZMercuryZVenusZEarthZMarsZJupiterZSaturnZUranusZ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@)Z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  s   | j S Nparamrequestr   r   r   mode   s    r.   lxml)Zmarksetreec                 C  s   | j S r)   r*   r,   r   r   r   parser   s    r1   c              	   C  s   t | |d}tdn}|j||d t|d"}| d }W d    n1 sX0    Y  t|}||ksvJ W d    n1 s0    Y  d S Nr1   test.xmlr&   utf-8	r	   tmensure_cleanto_xmlopenreaddecodestripr%   	xml_booksr1   r"   df_filepathfoutputr   r   r   test_file_output_str_read   s    0rD   c              	   C  s   t | |d}tdn}|j||d t|d"}| d }W d    n1 sX0    Y  t|}||ksvJ W d    n1 s0    Y  d S r2   r6   r>   r   r   r   test_file_output_bytes_read   s    0rE   c                 C  s0   t | |d}|j|d}t|}||ks,J d S Nr3   )r	   r9   r%   )r?   r1   r"   r@   rC   r   r   r   test_str_output   s    rG   c                 C  sD   d}t jtdd |j|| d W d    n1 s60    Y  d S )Nz/my/fake/path/output.xmlz6Cannot save file into a non-existent directory: .*pathmatchr3   )pytestraisesOSErrorr9   r1   r   rA   r   r   r   test_wrong_file_path   s    rN   c              	   C  s   d}t | |d}tdp}|j|d|d t|d"}| d }W d    n1 s^0    Y  t|}||ks|J W d    n1 s0    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>r3   r4   Findexr1   r&   r5   r6   r?   r1   expectedr@   rA   rB   rC   r   r   r   test_index_false   s    0rS   c              	   C  s   d}t | |d}tdt}|j|ddd|d t|d"}| d	 }W d    n1 sb0    Y  t|}||ksJ W d    n1 s0    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>r3   r4   Fbooksbook)rP   Z	root_nameZrow_namer1   r&   r5   r6   rQ   r   r   r    test_index_false_rename_row_root  s    
0rV   offset_index
      c                 C  s   g | ]}t |qS r   )str).0ir   r   r   
<listcomp>.      r]   c                 C  s<   d}|  }t||_|jd| d}t|}||ks8J 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>FrO   N)copyr   rP   r9   r%   )r1   rW   r   rR   Zoffset_geom_dfrC   r   r   r   (test_index_false_with_offset_input_index-  s    
r`   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 rF   r9   r%   na_expectedr1   r   rC   r   r   r   test_na_elem_outputn  s    rd   c                 C  s&   |j d| d}t|}|tks"J d S )N na_repr1   ra   rc   r   r   r   test_na_empty_str_elem_optionu  s    rh   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.0rf   r9   r%   r1   r   rR   rC   r   r   r   test_na_empty_elem_option|  s    rk   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_colsr1   ri   rj   r   r   r   test_attrs_cols_nan_output  s    rn   c                 C  s6   d}|j g dddid| d}t|}||ks2J 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>)rP   r   r   r   r$   zhttp://example.xom)rm   
namespacesprefixr1   ri   rj   r   r   r   test_attrs_cols_prefix  s    rq   c                 C  sD   t jtdd" |jg d| d W d    n1 s60    Y  d S )Nno valid columnrH   r   Zdegreer   rl   rJ   rK   KeyErrorr9   r1   r   r   r   r   test_attrs_unknown_column  s    rw   c                 C  s@   t jtdd |jd| d W d    n1 s20    Y  d S )Nz!is not a valid type for attr_colsrH   "shape", "degree", "sides"rl   rJ   rK   	TypeErrorr9   rv   r   r   r   test_attrs_wrong_type  s    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   )rP   	elem_colsr1   ri   r1   r   Zelems_cols_expectedrC   r   r   r   test_elems_cols_nan_output  s    
r~   c                 C  sD   t jtdd" |jg d| d W d    n1 s60    Y  d S )Nrr   rH   rs   r|   r1   rt   rv   r   r   r   test_elems_unknown_column  s    r   c                 C  s@   t jtdd |jd| d W d    n1 s20    Y  d S )Nz!is not a valid type for elem_colsrH   rx   r   ry   rv   r   r   r   test_elems_wrong_type  s    r   c                 C  s4   d}|j dddgdg| d}t|}||ks0J 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   )rP   r|   rm   r1   ri   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sDJ 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rP   valuesZaggfuncZmargins   r3   )pivot_tableroundr9   r%   r1   r!   rR   ZpvtrC   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sRJ 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   rl   )r   r   r9   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sFJ 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   r3   )groupbyaggr   r9   r%   r1   r!   rR   r   rC   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sTJ 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   rl   )	r   r   r   r9   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>re   http://example.comro   r1   ri   rj   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   )Zothexr   ri   rj   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   ro   rp   r1   ri   rj   r   r   r   test_namespace_prefix  s    
r   c                 C  sF   t jtdd$ |jddid| d W d    n1 s80    Y  d S )Nz!doc is not included in namespacesrH   re   r   r$   r   rt   rv   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   )re   r$   r$   r   ri   rj   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r6|dd}|tksBJ d S )N
ISO-8859-1)r1   encoding   r   r1   z*<?xml version="1.0" encoding="ISO-8859-1"?z*<?xml version='1.0' encoding='ISO-8859-1'?)r	   headr9   r#   encoding_expected)xml_baby_namesr1   r@   rC   r   r   r   test_encoding_option_strV  s    r   c                 C  sX   t d t| ddd}td"}|j|dddd W d    n1 sJ0    Y  d S Nr/   r   r   r4   F)rP   r   r1   rJ   importorskipr	   r7   r8   r9   )r   r@   rA   r   r   r   test_correct_encoding_filee  s    
r   r   )zUTF-8zUTF-16r   c                 C  sX   t d t| ddd}td"}|j|d||d W d    n1 sJ0    Y  d S r   r   )r   r1   r   r@   rA   r   r   r   test_wrong_encoding_option_lxmlm  s    
r   c                 C  s@   t jtdd |jd| d W d    n1 s20    Y  d S )Nzunknown encodingrH   zuft-8r   )rJ   rK   LookupErrorr9   rv   r   r   r   test_misspelled_encodingv  s    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)rJ   r   r9   )r   rR   rC   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_printr1    />/>)r9   r%   r#   rj   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s4J 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   r1   r   r   )r9   r#   rj   r   r   r   test_no_pretty_print_no_decl  s    	r   c                 C  s:   t jtdd |   W d    n1 s,0    Y  d S )Nz7lxml not found, please install or use the etree parser.rH   )rJ   rK   ImportErrorr9   r   r   r   r   test_default_parser_no_lxml  s    r   c                 C  s>   t jtdd | jdd W d    n1 s00    Y  d S )Nz,Values for parser can only be lxml or etree.rH   Zbs4r3   rJ   rK   
ValueErrorr9   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    n1 sN0    Y  d S Nr/   r'   r5   r   
stylesheet)rJ   r   r:   r9   xsl_expected)xsl_row_field_outputr.   r   rB   r   r   r   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  |j|d}|tks~J d S )Nr/   r'   r5   r   r&   r   )rJ   r   r:   r   r;   r   r9   r   r   r.   r   rB   Zxsl_objrC   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 sB0    Y  |j|d}|tksdJ d S r   )rJ   r   r:   r;   r9   r   r   r   r   r   test_stylesheet_buffered_reader
  s    
&r   c                 C  sZ   t d}tjddd}t j|jdd | j|d W d    n1 sL0    Y  d S )N
lxml.etreedataxmlzrow_field_output.xslt!Start tag expected, '<' not foundrH   r   )rJ   r   osrA   joinrK   XMLSyntaxErrorr9   r   
lxml_etreexslr   r   r   test_stylesheet_wrong_path  s    
r   valre   r^   c                 C  sX   t d}dg d}t j|j|d |j| d W d    n1 sJ0    Y  d S )Nr   |)zDocument is emptyr   zNone \(line 0\)rH   r   )rJ   r   r   rK   r   r9   )r   r   r   msgr   r   r   test_empty_string_stylesheet"  s    
	r   c                 C  sN   t d}d}t j|jdd | j|d W d    n1 s@0    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 mismatchrH   r   )rJ   r   rK   r   r9   r   r   r   r   test_incorrect_xsl_syntax3  s    
r   c                 C  sN   t d}d}t j|jdd | j|d W d    n1 s@0    Y  d S )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 compilerH   r   )rJ   r   rK   ZXSLTParseErrorr9   r   r   r   r   test_incorrect_xsl_evalQ  s    
r   c              	   C  sz   t d}d}t j|jddH td}| j||d W d    n1 sN0    Y  W d    n1 sl0    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 URIrH   r4   r   )rJ   r   rK   ZXSLTApplyErrorr7   r8   r9   )r   r   r   rA   r   r   r   test_incorrect_xsl_applym  s
    
r   c                 C  sD   d}t jtdd | jd|d W d    n1 s60    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 installedrH   r0   )r1   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sBJ 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   )rJ   r   Zto_csvr=   r9   )r   r   Zout_csvout_xmlr   r   r   test_style_to_csv  s    
r   c                 C  s4   t d d}|  }| jd|d}||ks0J 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)rg   r   )rJ   r   Z	to_stringr9   )r   r   Z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   )rJ   r   to_jsonr9   )r   r   Zout_jsonr   r   r   r   test_style_to_json  s
    
%r   c              	   C  s   t  X}|j|| |d t|d|d}|j }W d    n1 sH0    Y  W d    n1 sf0    Y  t|}t| ksJ d S )Nr1   compressionr'   r   	r7   r8   r9   r   handler;   r%   geom_xmlr=   )r1   compression_onlyr   rA   
handle_objrC   r   r   r   test_compression_output  s    
Fr   c              	   C  s   d||  }t j|dX}|j|| |d t|d|d}|j }W d    n1 sX0    Y  W d    n1 sv0    Y  t|}t| ksJ d S )Nzxml.)filenamer   r'   r   r   )r1   r   r   Zcompression_to_extensionZcompfilerA   r   rC   r   r   r   test_filename_and_suffix_comp*  s    Fr   c                 C  s<   d}t dtgi| }|j|d}t| |ks8J d S )Nzd<?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <a/>
  </row>
</data>ar3   )r   r   Zastyper9   r%   r=   )Zany_numeric_ea_dtyper1   rR   Zdfresultr   r   r   test_ea_dtypes=  s    r   c              	   C  sj   t jtddH t  }|j|| dd W d    n1 s>0    Y  W d    n1 s\0    Y  d S )NzUnrecognized compression typerH   Z7zr   )rJ   rK   r   r7   r8   r9   rM   r   r   r   test_unsuported_compressionK  s    
r   c                 C  sx   t d}t d tttfB |jdd}||j |j	d|j dd| d W d    n1 sj0    Y  d S )	Ns3fsr/   T)Zanonzs3://z	/geom.xmlzip)r   r1   )
rJ   r   r7   Zexternal_error_raisedPermissionErrorFileNotFoundErrorZS3FileSystemZlsnamer9   )r1   Zs3_public_bucketr   r   fsr   r   r   test_s3_permission_outputT  s    

r   )`
__future__r   ior   r   r   numpyr   rJ   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   Zpandas._testingZ_testingr7   Zpandas.io.commonr   Zpandas.io.xmlr	   Zfixturer   r!   r"   r%   r.   r+   Z
skip_if_nor1   rD   rE   rG   rN   rS   rV   markZparametrizer   ranger`   rb   rd   rh   rk   rn   rq   rw   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zskip_if_installedr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z
single_cpur   r   r   r   r   <module>   s   %

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