
    i7                    ,   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
c 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j0                  d        Zej0                  d        Zej0                  d	        Zd
 Z ej0                  ddg      d        Z ej0                   ej<                  d ej>                  d            dg      d        Z d Z!d Z"d Z#d Z$d Z%d Z&ejN                  jQ                  de)e*g      d        Z+dZ,d Z-d Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:d* Z;d+ Z<d, Z=d- Z>d. Z?d/ Z@d0ZAd1 ZBd2 ZCejN                  jQ                  d3g d4      d5        ZDd6 ZEd7 ZFd8 ZGd9 ZH ej                  d      d:        ZJd; ZKd<ZLd= ZMd> ZNd? ZOd@ ZPejN                  jQ                  dA edB       edC      g      dD        ZQdE ZRdF ZSdG ZTdH ZUdI ZVdJ ZWdK ZXdZYdL ZZdM Z[dN Z\dO Z]ejN                  j                  dP        Z_y)Q    )annotations)BytesIOStringION)NA	DataFrameIndex)
get_handle)read_xmlc                 J    t        g dg ddt        j                  dgd      S )N)squarecircletriangle)h  r            shapedegreessides)r   npnan     \/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/io/xml/test_to_xml.pygeom_dfr   ;   s'    5&^	
 r   c                 2    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@gl?gh|@g	@gd]FU@g	hY@)planettypelocationmass)r   r   r   r   	planet_dfr/   F   s(    				?)	
+ +r   c                      y)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   from_file_expectedr1   v   s    r   c                .    | | j                  dd      } | S )Nz%<?xml version="1.0" encoding="utf-8"?z%<?xml version='1.0' encoding='utf-8'?)replace)docs    r   equalize_declr5      s"    
kk33
 Jr   rbr)paramsc                    | j                   S Nparamrequests    r   moder?          ==r   lxml)marksetreec                    | j                   S r:   r;   r=   s    r   parserrE      r@   r   c                    t        | |      }|j                  ||       |j                  d      j                         }t	        |      }||k(  sJ y NrE   utf-8encodingr
   to_xml	read_textstripr5   	xml_booksrE   r1   	temp_filedf_fileoutputs         r   test_file_output_str_readrU      S    y0GNN9VN,  ' 288:F6"F''''r   c                    t        | |      }|j                  ||       |j                  d      j                         }t	        |      }||k(  sJ y rG   rL   rP   s         r   test_file_output_bytes_readrX      rV   r   c                f    t        | |      }|j                  |      }t        |      }||k(  sJ y NrH   )r
   rM   r5   )rQ   rE   r1   rS   rT   s        r   test_str_outputr[      s7    y0G^^6^*F6"F''''r   c                    d}t        j                  t        d      5  |j                  ||        d d d        y # 1 sw Y   y xY w)Nz/my/fake/path/output.xmlz6Cannot save file into a non-existent directory: .*pathmatchrH   )pytestraisesOSErrorrM   )rE   r   paths      r   test_wrong_file_pathrc      s@    %D	H
 , 	tF+	, , ,s	   ;Ac                    d}t        | |      }|j                  |d|       |j                  d      j                         }t	        |      }||k(  sJ y )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>rH   FindexrE   rI   rJ   rL   rQ   rE   rR   expectedrS   rT   s         r   test_index_falseri      s]    H4 y0GNN9E&N9  ' 288:F6"FXr   c                    d}t        | |      }|j                  |ddd|       |j                  d      j                         }t	        |      }||k(  sJ y )	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>rH   Fbooksbook)rf   	root_namerow_namerE   rI   rJ   rL   rg   s         r    test_index_false_rename_row_rootro      si    H4 y0GNN'F6     ' 288:F6"FXr   typc                    d}t        dd      D cg c]
  } ||       }}|j                         }t        |      |_        |j	                  d|       }t        |      }||k(  sJ yc c}w )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>
      Fre   N)rangecopyr   rf   rM   r5   )rE   rp   r   rh   ioffset_indexoffset_geom_dfrT   s           r   (test_index_false_with_offset_input_indexry   %  sr    H& %*"bM2qCF2L2\\^N .N""v">F6"FX 3s   A(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                T    |j                  |       }t        |      }|t        k(  sJ y rZ   rM   r5   na_expectedrE   r   rT   s      r   test_na_elem_outputr~   d  s*    ^^6^*F6"F[   r   c                V    |j                  d|       }t        |      }|t        k(  sJ y )N na_reprE   r{   r}   s      r   test_na_empty_str_elem_optionr   k  s,    ^^2f^5F6"F[   r   c                R    d}|j                  d|       }t        |      }||k(  sJ y )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   rM   r5   rE   r   rh   rT   s       r   test_na_empty_elem_optionr   r  s5    H. ^^5^8F6"FXr   c                V    d}|j                  g d|       }t        |      }||k(  sJ y )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_colsrE   r   r   s       r   test_attrs_cols_nan_outputr     s6    H ^^&CF^SF6"FXr   c                ^    d}|j                  g dddid|       }t        |      }||k(  sJ y )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>)rf   r   r   r   r4   zhttp://example.xom)r   
namespacesprefixrE   r   r   s       r   test_attrs_cols_prefixr     sJ    	H ^^8/0	  F 6"FXr   c                    t        j                  t        d      5  |j                  g d|        d d d        y # 1 sw Y   y xY w)Nno valid columnr]   r   degreer   r   r_   r`   KeyErrorrM   rE   r   s     r   test_attrs_unknown_columnr     ;    	x(9	; N!=fMN N N	   ;Ac                    t        j                  t        d      5  |j                  d|        d d d        y # 1 sw Y   y xY w)Nz!is not a valid type for attr_colsr]   "shape", "degree", "sides"r   r_   r`   	TypeErrorrM   r   s     r   test_attrs_wrong_typer     ;    	y)L	N N!=fMN N N	   9Ac                X    d}|j                  dg d|       }t        |      }||k(  sJ y )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   )rf   	elem_colsrE   r   rE   r   elems_cols_expectedrT   s       r   test_elems_cols_nan_outputr     sB    ( ^^<V  F 6"F((((r   c                    t        j                  t        d      5  |j                  g d|        d d d        y # 1 sw Y   y xY w)Nr   r]   r   r   rE   r   r   s     r   test_elems_unknown_columnr     r   r   c                    t        j                  t        d      5  |j                  d|        d d d        y # 1 sw Y   y xY w)Nz!is not a valid type for elem_colsr]   r   r   r   r   s     r   test_elems_wrong_typer     r   r   c                \    d}|j                  dddgdg|       }t        |      }||k(  sJ y )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   )rf   r   r   rE   r   r   s       r   test_elems_and_attrs_colsr     sM    " ^^g&)	  F 6"F((((r   c                    d}|j                  ddgdg dd      j                  d      }|j                  | 	      }t        |      }||k(  sJ y )
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rf   valuesaggfuncmargins   rH   )pivot_tableroundrM   r5   rE   r/   rh   pvtrT   s        r   test_hierarchical_columnsr     sj    HB 

6"(	   
 eAh  ZZvZ&F6"FXr   c                    d}|j                  ddgdg dd      j                  d      }|j                  t        |j	                         j
                  j                        | 	      }t        |      }||k(  sJ y )
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   rM   listreset_indexcolumnsr   r5   r   s        r   test_hierarchical_attrs_columnsr   <  s    H 

6"(	   
 eAh  ZZ$s'8'@'@'G'G"HQWZXF6"FXr   c                    d}|j                  ddg      d   j                  g d      j                  d      }|j                  |       }t	        |      }||k(  sJ y )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   rH   )groupbyaggr   rM   r5   rE   r/   rh   r   rT   s        r   test_multi_indexr   Z  sf    H6 	:v./7	%	&	q  ZZvZ&F6"FXr   c                   d}|j                  ddg      d   j                  g d      j                  d      }|j                  t	        |j                         j                  j                        |       }t        |      }||k(  sJ y )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   rM   r   r   r   r   r5   r   s        r   test_multi_index_attrs_colsr     s    	H 	:v./7	%	&	q 
 ZZ$s'8'@'@'G'G"HQWZXF6"FXr   c                V    d}|j                  ddi|       }t        |      }||k(  sJ y )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>r   http://example.comr   rE   r   r   s       r   test_default_namespacer     s;    H. ^^,@'A&^QF6"FXr   c                X    d}|j                  ddd|       }t        |      }||k(  sJ y )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   r   r   s       r   test_unused_namespacesr     sD    H. ^^-5IJ  F 6"FXr   c                X    d}|j                  ddid|       }t        |      }||k(  sJ y )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>r4   r   r   r   rE   r   r   s       r   test_namespace_prefixr     sE    H. ^^/0v  F 6"FXr   c                    t        j                  t        d      5  |j                  ddid|        d d d        y # 1 sw Y   y xY w)Nz!doc is not included in namespacesr]   r   r   r4   r   r   r   s     r   test_missing_prefix_in_nmspr     sD    	x(K	M 
01% 	 	

 
 
	   <Ac                Z    d}|j                  dddd|       }t        |      }||k(  sJ y )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   )r   r4   r4   r   r   r   s       r   !test_namespace_prefix_and_defaultr     sG    H. ^^,5GH  F
 6"FX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                    t        | |d      j                  d      }|j                  d|      }||j                  dd      }|t        k(  sJ y )N
ISO-8859-1)rE   rK      rK   rE   z*<?xml version="1.0" encoding="ISO-8859-1"?z*<?xml version='1.0' encoding='ISO-8859-1'?)r
   headrM   r3   encoding_expected)xml_baby_namesrE   rS   rT   s       r   test_encoding_option_strr   L  sY    ~f|LQQRSTG^^\&^AF88

 &&&&r   c                t    t        j                  d       t        | dd      }|j                  |ddd       y NrA   r   r   F)rf   rK   rE   r_   importorskipr
   rM   )r   rR   rS   s      r   test_correct_encoding_filer   [  s2    
~VLGNN9ELNPr   rK   )zUTF-8zUTF-16r   c                t    t        j                  d       t        | dd      }|j                  |d||       y r   r   )r   rE   rK   rR   rS   s        r   test_wrong_encoding_option_lxmlr   b  s2    
~VLGNN9EHVNLr   c                    t        j                  t        d      5  |j                  d|        d d d        y # 1 sw Y   y xY w)Nzunknown encodingr]   zuft-8r   )r_   r`   LookupErrorrM   r   s     r   test_misspelled_encodingr   j  s6    	{+=	? 878 8 8r   c                d    t        j                  d       d}| j                  d      }||k(  sJ y )NrA   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)r_   r   rM   )r   rh   rT   s      r   !test_xml_declaration_pretty_printr   r  s7    
H, ^^E^2FXr   c                z    d}|j                  d|       }t        |      }||j                  dd      }||k(  sJ y )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_printrE    />/>)rM   r5   r3   r   s       r   test_no_pretty_print_with_declr     sP    	  ^^v^>F6"F t,Xr   c                f    d}|j                  dd|       }||j                  dd      }||k(  sJ y )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   rE   r   r   )rM   r3   r   s       r   test_no_pretty_print_no_declr     sH    	  ^^Ef^UF t,Xr   c                    t        j                  t        d      5  | j                          d d d        y # 1 sw Y   y xY w)Nz7lxml not found, please install or use the etree parser.r]   )r_   r`   ImportErrorrM   r   s    r   test_default_parser_no_lxmlr     s5    	U
  	  s   6?c                    t        j                  t        d      5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz,Values for parser can only be lxml or etree.r]   bs4rH   r_   r`   
ValueErrorrM   r   s    r   test_unknown_parserr     s9    	I
 % 	e$% % %s	   8A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                    t        j                  d       t        | ||dk(  rdnd       5 }|j                  |      t        k(  sJ 	 d d d        y # 1 sw Y   y xY wNrA   r7   rI   rJ   
stylesheetr_   r   openrM   xsl_expected)xsl_row_field_outputr?   r   fs       r   test_stylesheet_file_liker    sX    
	dW
 <	
~~~+|;;;< < <s   AAc                ,   t        j                  d       t        | ||dk(  rdnd       5 }|dk(  rt        |j	                               }nt        |j	                               }d d d        |j                        }|t        k(  sJ y # 1 sw Y   'xY w)NrA   r7   rI   rJ   r6   r   )r_   r   r  r   readr   rM   r  )r  r?   r   r  xsl_objrT   s         r   test_stylesheet_ior    s      
dW
 )	
4<affh'Gqvvx(G) ^^w^/F\!!!) )s   9B

Bc                    t        j                  d       t        | ||dk(  rdnd       5 }|j                  |      }d d d        t        k(  sJ y # 1 sw Y   xY wr   r  )r  r?   r   r  rT   s        r   test_stylesheet_buffered_readerr    s_    
	dW
 .	
1-.
 \!!!. .s   AAc                    t        j                  d       t        j                  j	                  dddd      }t        j
                  t        d      5  | j                  |       d d d        y # 1 sw Y   y xY w)	N
lxml.etreedoesnotexistzrow_field_output.xsltz$\[Errno 2\] No such file or directorr]   r   )r_   r   osrb   joinr`   FileNotFoundErrorrM   r   xsls     r   test_stylesheet_wrong_pathr    s`    
%
'',,vug/F
GC	!H
 ' 	#&' ' 's   A//A8valr   r   c                    t        j                  d      }dj                  g d      }t        j                  |j                  |      5  |j                  |        d d d        y # 1 sw Y   y xY w)Nr  |)zDocument is emptyz!Start tag expected, '<' not foundzNone \(line 0\)r]   r   )r_   r   r  r`   XMLSyntaxErrorrM   )r  r   
lxml_etreemsgs       r   test_empty_string_stylesheetr    s^    $$\2J
((	
C 
z00	< '#&' ' 's   
A&&A/c                    t        j                  d      }d}t        j                  |j                  d      5  | j	                  t        |             d d d        y # 1 sw Y   y xY w)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 mismatchr]   r   )r_   r   r`   r  rM   r   r   r  r  s      r   test_incorrect_xsl_syntaxr"  $  s\    $$\2JC* 
!!)J
 1 	(3-01 1 1   AA'c                    t        j                  d      }d}t        j                  |j                  d      5  | j	                  t        |             d d d        y # 1 sw Y   y xY w)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 compiler]   r   )r_   r   r`   XSLTParseErrorrM   r   r!  s      r   test_incorrect_xsl_evalr&  B  sW    $$\2JC* 
z008K	L 1(3-01 1 1r#  c                    t        j                  d      }d}t        j                  |j                  d      5  | j	                  |t        |             d d d        y # 1 sw Y   y xY w)Nr  ag  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:copy-of select="document('non_existent.xml')/*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>zCannot resolve URIr]   r   )r_   r   r`   XSLTApplyErrorrM   r   )r   rR   r  r  s       r   test_incorrect_xsl_applyr)  ^  sY    $$\2J
C 
z008L	M <yXc];< < <s   AA(c                    d}t        j                  t        d      5  | j                  dt	        |             d d d        y # 1 sw Y   y xY w)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 installedr]   rC   )rE   r  )r_   r`   r   rM   r   r  s     r   test_stylesheet_with_etreer+  q  sG    	C 
z)U	V Ag(3-@A A As   AAc                    t        j                  d       d}| j                  d      }||j                         }| j	                  t        |            }||k(  sJ y )NrA   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   )r_   r   to_csvrO   rM   r   )r   r  out_csvout_xmls       r   test_style_to_csvr2    s\    
C$ nnDn1G--/nnn6Ggr   c                    t        j                  d       d}| j                         }| j                  dt	        |            }||k(  sJ y )NrA   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)r   r  )r_   r   	to_stringrM   r   )r   r  out_strr1  s       r   test_style_to_stringr7    sK    
C4 !GnnEhsmnDGgr   c                    t        j                  d       d}| j                         }| j                  t	        |            }||k(  sJ y )NrA   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   )r_   r   to_jsonrM   r   )r   r  out_jsonr1  s       r   test_style_to_jsonr;    sH    
#CJ  Hnnn6Gwr   c                    |}|j                  || |       t        |d|      5 }|j                  j                         }d d d        t	              }t
        |j                         k(  sJ y # 1 sw Y   .xY w)NrE   compressionr7   r>  rM   r	   handler	  r5   geom_xmlrO   )rE   compression_onlyr   rR   rb   
handle_objrT   s          r   test_compression_outputrE    sy    DNN44DNE	$
 * 
""'')* 6"Fv||~%%%* *s   A--A6c                   d||   z   }||z  }|j                  || |       t        |d|      5 }|j                  j                         }d d d        t	              }t
        |j                         k(  sJ y # 1 sw Y   .xY w)Nzxml.r=  r7   r?  r@  )	rE   rC  r   compression_to_extensiontmp_pathcompfilerb   rD  rT   s	            r   test_filename_and_suffix_comprJ    s     01ABBHhDNN44DNE	$
 * 
""'')* 6"Fv||~%%%* *s   A88Bc                    d}t        dt        gi      j                  |       }|j                  |      }t	        |      j                         |k(  sJ y )Nzd<?xml version='1.0' encoding='utf-8'?>
<data>
  <row>
    <index>0</index>
    <a/>
  </row>
</data>arH   )r   r   astyperM   r5   rO   )any_numeric_ea_dtyperE   rh   dfresults        r   test_ea_dtypesrQ  +  sS    H 
C";		&	&';	<BYYfY%F &&(H444r   c                    t        j                  t        d      5  |}|j                  || d       d d d        y # 1 sw Y   y xY w)NzUnrecognized compression typer]   7zr=  r   )rE   r   rR   rb   s       r   test_unsupported_compressionrT  9  s=    	z)H	I >tF=> > >r   c                ^   t        j                  d      }t        j                  d       t        j                  t        t
        f      5  |j                  d      }|j                  |j                         |j                  d|j                   dd|        d d d        y # 1 sw Y   y xY w)	Ns3fsrA   T)anonzs3://z	/geom.xmlzip)r>  rE   )
r_   r   tmexternal_error_raisedPermissionErrorr  S3FileSystemlsnamerM   )rE   s3_bucket_publicr   rV  fss        r   test_s3_permission_outputra  B  s    v&D
		!	!?4E"F	G 
D)
##$$))*)4%PV 	 	
	
 
 
s   
AB##B,)`
__future__r   ior   r   r  numpyr   r_   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   r   r   pandas._testing_testingrY  pandas.io.commonr	   pandas.io.xmlr
   fixturer   r/   r1   r5   r?   r<   
skip_if_norE   rU   rX   r[   rc   ri   ro   markparametrizeintstrry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   skip_if_installedr   r   r  r  r  r  r  r  r"  r&  r)  r+  r2  r7  r;  rB  rE  rJ  rQ  rT  
single_cpura  r   r   r   <module>rv     s   " 
   ) ) 
  ' "J   , ,^  > c{# $ V=2==3HI7ST U(((,"J$N c
+! ,!L0!!B.N
N):N
N
)@,^<$N4<H@
H! H'Q %FGM HM8:*, f %0<"&"' "ws| <=' >' 1<18<&A :D*`0& &&5> 

 

r   