o
    ҷh!                     @   s@  d dl mZm Z mZ d dlmZ d dlmZ d dlZd dlZd dl	Z
d dlZd dlmZ d dlm  mZ d dlZd dlmZmZmZmZ d dlmZ d dlmZmZmZmZm Z  d dl!m"Z" ej#d	d
 Z$ej#dd Z%ej&'dej(de)de)dgdej(de)de)dgdej(de)de)dgdej(de)ddgG dd dZ*ej&'dej(dde)de)dgdej(dde)de)dgdej(dde)de)dgdej(dde)ddgej&+dG dd dZ,G dd dZ-e)de)dG dd dZ.ej&'de"/ d d! Z0dS )"    )datedatetime	timedelta)partial)BytesION)PY310)	DataFrameIndex
MultiIndexoption_context)	ExcelFileExcelWriter_OpenpyxlWriter_XlsxWriterregister_writer)_writersc                 c   s8    t | }|V  W d   dS 1 sw   Y  dS )z9
    Fixture to open file for use in each test case.
    N)tmensure_clean)ext	file_path r   U/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/io/excel/test_writers.pypath$   s   "r   c                 c   sJ    d| d d}t||  dV  W d   dS 1 sw   Y  dS )aM  
    Fixture to set engine for use in each test case.

    Rather than requiring `engine=...` to be provided explicitly as an
    argument in each test, this fixture sets a global option to dictate
    which engine should be used to write Excel files. After executing
    the test it rolls back said change to the global option.
    z	io.excel..z.writerN)stripr   )enginer   option_namer   r   r   
set_engine-   s
   
"r   r   .xlsxopenpyxlxlrdmarksz.xlsm
xlsxwriterz.odsodfc                	   @   s  e Zd Zejddeejgd fdedejgd ifgdd Z	ejddedgejgd  fdeejgd fgd	d
 Z
dd Zdd Zdd Zejdddgejdddgejdddgejdddgdd Zdd Zdd ZdS )TestRoundTripzheader,expectedN   r   z
Unnamed: 0   c                 C   s   d}t g dg dg dg dg}t|}|j||ddd tj||dg|d	}W d    n1 s5w   Y  t|| d S )
N	no_header    d   r*         r*   r'   i,  r*   r&   i  Findexheaderr   
sheet_nameusecolsr4   r   r   r   to_excelpd
read_excelassert_frame_equalselfr   r4   expectedfilenamedfr   resultr   r   r   !test_read_one_empty_col_no_headerH   s    
z/TestRoundTrip.test_read_one_empty_col_no_headerc                 C   s   d}t g dg dg dg dg}t|}|j|dddd tj||d	g|d
}W d    n1 s5w   Y  t|| d S )Nwith_headerr)   r-   r0   r1   FTr2   r   r5   r8   r=   r   r   r   #test_read_one_empty_col_with_headerY   s    
z1TestRoundTrip.test_read_one_empty_col_with_headerc              	   C   s  t ddgddgddggddgd	}t|i}t|}|j|d
ddd |j|ddd W d    n1 s7w   Y  ddg|_t|}tj|d
d ddgd}tj|dd ddgd}W d    n1 sfw   Y  t	|| t	|| W d    d S 1 sw   Y  d S )Nr+   foor.   barr'   bazabcolumnsData_no_headF)r4   r3   Data_with_headr3   AB)r6   r4   names)r6   	index_colrR   )
r   r   r   r   r9   rL   r   r:   r;   r<   )r>   r   refdfpthwriterreaderxlsdf_no_headxlsdf_with_headr   r   r   "test_set_column_names_in_parameteri   s*   "


"z0TestRoundTrip.test_set_column_names_in_parameterc           
   	      s   dd  g d} fdd|D }t t||}t|C}t|}| D ]
\}}||| q'W d    n1 s<w   Y  tj||dd}|D ]}	t	||	 ||	  qKW d    d S 1 scw   Y  d S )Nc                 S   s"   g dg d}}t ||| gdS )N)      !   r+   r.   r'   rK   )r   )col_sheet_namedir   r   r   tdf   s   zDTestRoundTrip.test_creating_and_reading_multiple_sheets.<locals>.tdf)AAABBBCCCc                    s   g | ]} |qS r   r   ).0srb   r   r   
<listcomp>       zKTestRoundTrip.test_creating_and_reading_multiple_sheets.<locals>.<listcomp>r   r6   rS   )
dictzipr   r   r   itemsr9   r:   r;   r<   )
r>   r   sheetsdfsrU   ew	sheetnamerA   dfs_returnedrg   r   rh   r   )test_creating_and_reading_multiple_sheets   s   
"z7TestRoundTrip.test_creating_and_reading_multiple_sheetsc                 C   s  t |w}tddiddiddiddid}tddiddiddiddid}|| tj|ddgdd}t || tddiddiddiddid}tddiddiddiddid	}|| tj|ddgdd}t || W d    d S 1 sw   Y  d S )
Nr   r+   r'      )OnexTwoXrz   Y)Zeror*   )rv   ry   r|   )r~   zUnnamed: 4_level_1r4   rS   ))Begr*   Middlerx   Tailr{   r   r}   ))r   zUnnamed: 1_level_1r   r   r   r   r   r   r9   r:   r;   r<   )r>   r   r   rA   r?   actualr   r   r   &test_read_excel_multiindex_empty_level   sH   	
		
	"z4TestRoundTrip.test_read_excel_multiindex_empty_levelc_idx_namesTFr_idx_namesc_idx_levelsr+   r_idx_levelsc              	   C   sX  t |}|dkr|r|dkr|rtjjdd}|j| |p$|dk}	t dd||||}
|
| t	j
|tt|tt|d}t j|
||	d tj|
jdd d f< |
| t	j
|tt|tt|d}t j|
||	d tj|
jd	d d f< |
| t	j
|tt|tt|d}t j|
||	d W d    d S 1 sw   Y  d S )
Nr+   r'   z?Column index name cannot be serialized unless it's a MultiIndex)reason   )rS   r4   )check_namesr   )r   r   pytestmarkxfailnode
add_markermakeCustomDataframer9   r:   r;   listranger<   npnaniloc)r>   r   r   r   r   r   requestrU   r   r   rA   actr   r   r   test_excel_multindex_roundtrip   sF   








"z,TestRoundTrip.test_excel_multindex_roundtripc              	   C   s   t g dtjdddd}| }|d jd|d< t|e}|| tj	|dd	}t
|| tj	|dgdd
}t
|| dd }tjtdd tj	|dg|dd}W d    n1 scw   Y  t
|| tj	|dgddd}t
|| W d    d S 1 sw   Y  d S )Nr^   z
2012-01-01r'   )periods)coldate_stringsr   %m/%d/%Yr   rS   )parse_datesrS   c                 S   s   t | dS )Nr   )r   strptimerx   r   r   r   <lambda>  s    z;TestRoundTrip.test_read_excel_parse_dates.<locals>.<lambda>zuse 'date_format' insteadmatch)r   date_parserrS   )r   date_formatrS   )r   r:   
date_rangecopydtstrftimer   r   r9   r;   r<   assert_produces_warningFutureWarning)r>   r   rA   df2rU   resr   r   r   r   test_read_excel_parse_dates   s8   
	
"z)TestRoundTrip.test_read_excel_parse_datesc                 C   s   t tdtjtddddg}ttd|d}t|}|	| tj
|ddgd}W d    n1 s8w   Y  ttdt tdg d	g}t|| d S )
Nr&   z
2020-01-016M)startr   freqrO   r   r+   r   )z(2020-01-31, 2020-07-31]z(2020-07-31, 2021-01-31]z(2021-01-31, 2021-07-31]z(2021-07-31, 2022-01-31])r
   from_arraysr   r:   interval_range	Timestampr   r   r   r9   r;   r<   )r>   r   midxrA   rU   rB   r?   r   r   r   "test_multiindex_interval_datetimes   s*   
z0TestRoundTrip.test_multiindex_interval_datetimes)__name__
__module____qualname__r   r   parametrizer   r   r   rC   rE   rZ   rt   r   r   r   r   r   r   r   r   r%   <   s*    *
,
/1!r%   z
engine,extc                   @   sN  e Zd Z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jejejejgdd Ze
jdejejejgdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Z d(d) Z!d*d+ Z"d,d- Z#d.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'd6d7 Z(d8d9 Z)d:d; Z*d<d= Z+e
jd>d?d@ge
jdAg dBe
jdCg dBdDdE Z,dFdG Z-dHdI Z.dJdK Z/e
jdLdMdNgdOdP Z0dQdR Z1dSdT Z2dUdV Z3dWdX Z4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:dedf Z;dgdh Z<didj Z=dkdl Z>e
jdmdne?gdodp Z@dqdr ZAdsdt ZBdudv ZCdwdx ZDdnS )yTestExcelWriterc           	      C   s   d}d}t j|dfd}t jd|fd}t|}t|}d}tjt|d || W d    n1 s5w   Y  tjt|d || W d    d S 1 sRw   Y  d S )Ni  i@  r+   )shapezsheet is too larger   )r   zerosr   r   raises
ValueErrorr9   )	r>   r   breaking_row_countbreaking_col_countrow_arrcol_arrrow_dfcol_dfmsgr   r   r   test_excel_sheet_sizeV  s   "z%TestExcelWriter.test_excel_sheet_sizec                 C   s   t tjdd}|| t|}tj|ddd}W d    n1 s'w   Y  t	
|| d}tjt|d t|d W d    d S 1 sMw   Y  d S )Nr.   
   r.   r   rk   zWorksheet named '0' not foundr   0)r   r   randomdefault_rngstandard_normalr9   r   r:   r;   r   r<   r   r   r   )r>   r   gtxlrA   r   r   r   r   test_excel_sheet_by_name_raiseg  s   

"z.TestExcelWriter.test_excel_sheet_by_name_raisec                 C   s   t |!}||d | }|jd d d |_||d W d    n1 s(w   Y  t|%}tj|ddd}tj|ddd}t|| t|| W d    d S 1 sYw   Y  d S )NData1r   Data2r   rk   )	r   r9   r   rL   r   r:   r;   r   r<   )r>   framer   rV   frame2rW   found_df	found_df2r   r   r   !test_excel_writer_context_managert  s   

"z1TestExcelWriter.test_excel_writer_context_managerc                 C   s  |  }tj|jd d|jdf< ||d |j|dddgd |j|ddd |j|ddd ||d tj|dd	d
}t	
|| |j|ddd tj|dd d
}|j|_t	
|| |j|ddd tj|dd	dgd}t	
|| |j|ddd tj|dd	dgd}t	
|| |j|ddd tj|dd	ddgd}t	
|| ||d tj|d	d}t	
|| ||d tj|d	d}t	
|| |d }|| tj|d	d}t	
| | d S )Nr   rP   test1rQ   rK   Fr4   rO   r   rk   NA)na_rep)r6   rS   	na_values88X   g      V@Sheet1r   r   )r   r   r   r   rL   get_locr9   r:   r;   r   r<   r3   to_frame)r>   r   r   reconsrg   r   r   r   test_roundtrip  sD   
zTestExcelWriter.test_roundtripc                 C   sd   |  }d|d< ||d t|}tj|ddd}W d    n1 s%w   Y  t|| d S )NrG   rF   r   r   rk   )r   r9   r   r:   r;   r   r<   )r>   r   r   mixed_framerW   r   r   r   r   
test_mixed  s   
zTestExcelWriter.test_mixedc                 C   st   |}t jt|jd d}||_||d t|}t j|ddd}W d    n1 s-w   Y  t	|| d S )Nr   r   r   rk   )
r:   DatetimeIndexr   asarrayr3   r9   r   r;   r   r<   )r>   tsframer   rA   r3   rW   r   r   r   r   test_ts_frame  s   
zTestExcelWriter.test_ts_framec                 C   sh   |  }tj|jd d|jdf< ||d |j|dddgd |j|ddd |j|ddd d S )	Nr   rP   r   rQ   rK   Fr   rO   )r   r   r   r   rL   r   r9   )r>   r   r   r   r   r   test_basics_with_nan  s   z$TestExcelWriter.test_basics_with_nannp_typec                 C   s   t tjdjdddd|d}||d t|}tj|ddd	}W d    n1 s-w   Y  |	tj
}t|| tj|ddd	}t|| d S )
Nr.   r   r   sizedtyper   r   rk   )r   r   r   r   integersr9   r   r:   r;   astypeint64r   r<   )r>   r   r   rA   rW   r   	int_framerecons2r   r   r   test_int_types  s   
zTestExcelWriter.test_int_typesc                 C   st   t tjdd|d}||d t|}tj|ddd|}W d    n1 s-w   Y  t	
|| d S )Nr.   r   r   r   r   rk   )r   r   r   r   r9   r   r:   r;   r   r   r<   )r>   r   r   rA   rW   r   r   r   r   test_float_types  s   
z TestExcelWriter.test_float_typesc                 C   sn   t g dtjd}||d t|}tj|dddtj}W d    n1 s*w   Y  t	|| d S )N)r+   r   TFr   r   r   rk   )
r   r   bool_r9   r   r:   r;   r   r   r<   r>   r   rA   rW   r   r   r   r   test_bool_types  s   
zTestExcelWriter.test_bool_typesc                 C   sp   t dtjfddtj fg}||d t|}tj|ddd}W d    n1 s+w   Y  t|| d S )Nr+   )r.   r'   r   r   r   rk   )	r   r   infr9   r   r:   r;   r   r<   r   r   r   r   test_inf_roundtrip  s   
z"TestExcelWriter.test_inf_roundtripc                 C   sZ  t jt|jd d}||_| }tj|jd d|j	df< |
|d |j
|dddgd |j
|ddd |j
|ddd	 t|}|
|d |
|d
 W d    n1 s[w   Y  t|$}t j|ddd}t|| t j|d
dd}t|| W d    n1 sw   Y  dt|jksJ d|jd ksJ d
|jd ksJ d S )Nr   r   rP   r   rQ   rK   Fr   rO   test2r   rk   r.   r+   )r:   r   r   r   r3   r   r   r   rL   r   r9   r   r   r;   r   r<   lensheet_names)r>   r   r   r   r3   rV   rW   r   r   r   r   test_sheets  s*   

zTestExcelWriter.test_sheetsc                 C   s   |  }tj|jd d|jdf< ||d |j|dddgd |j|ddd |j|ddd tg d	}|j|d|d t|}t	j
|dd
d}W d    n1 sWw   Y  |  }||_t|| d S )Nr   rP   r   rQ   rK   Fr   rO   )AAr{   r}   Zr   rk   )r   r   r   r   rL   r   r9   r	   r   r:   r;   r   r<   )r>   r   r   col_aliasesrW   rsxpr   r   r   test_colaliases  s   
zTestExcelWriter.test_colaliasesc                 C   s  |  }tj|jd d|jdf< ||d |j|dddgd |j|ddd |j|ddd ttj	d	
d
dk}|j|ddg|d t|}tj|dddtj}W d    n1 sdw   Y  dg|j_|jj|jjksxJ ttj	d	
d
dk}|j|dg d|d t|}tj|dddtj}W d    n1 sw   Y  dg|j_|jj|jjksJ ttj	d	
d
dk}|j|dd|d t|}tj|dddtj}W d    n1 sw   Y  dg|j_t||t |j|dg dd|d |  }|ddg}t|}tj|dddgd}W d    n	1 s4w   Y  t|| d S )Nr   rP   r   rQ   rK   Fr   rO   r.   r   r   test)index_labelmerge_cellsrk   )r  dummydummy2)rP   rQ   CD)rL   r3   r  r+   )r   r   r   r   rL   r   r9   r   r   r   r   r   r:   r;   r   r   r3   rR   r   r<   bool	set_index)r>   r  r   r   rA   rW   r   r   r   r   test_roundtrip_indexlabels0  sf   






z*TestExcelWriter.test_roundtrip_indexlabelsc                 C   s   t tjdd}d|j_|j||d t|}t	j
||jd dd}W d    n1 s0w   Y  t|| |jjdksCJ d S )Nr.   )r   r&   rF   r  r   rk   )r   r   r   r   r   r3   namer9   r   r:   r;   r  r   r<   )r>   r  r   rA   xfrB   r   r   r   test_excel_roundtrip_indexnamei  s   
z.TestExcelWriter.test_excel_roundtrip_indexnamec                 C   s   t jt|jd d}||_| }dd |jD |_|j|d|d t|}t j|ddd}W d    n1 s:w   Y  t	
|| d S )Nr   c                 S   s   g | ]}|  qS r   )r   )rf   rx   r   r   r   ri   ~  rj   zATestExcelWriter.test_excel_roundtrip_datetime.<locals>.<listcomp>r   r  r   rk   )r:   r   r   r   r3   r   r9   r   r;   r   r<   )r>   r  r   r   r3   tsfrW   r   r   r   r   test_excel_roundtrip_datetimeu  s   
z-TestExcelWriter.test_excel_roundtrip_datetimec              
   C   s  t tdddtdddgtddd	d
ddtddddddggddgddgd}t tdddtdddgtddd	d
ddtddddddggddgddgd}t|w}t|}||d W d    n1 siw   Y  t|ddd}||d W d    n1 sw   Y  t|}tj	|ddd}	W d    n1 sw   Y  t|}
tj	|
ddd}W d    n1 sw   Y  W d    n1 sw   Y  t
|	| t
|| d S )Ni  r+      i  	      i  r         r]   r&   r.         DATEDATETIMEr{   r}   r3   rL   r   z
DD.MM.YYYYzDD.MM.YYYY HH-MM-SS)r   datetime_formatr   rk   )r   r   r   r   r   r   r9   r   r:   r;   r<   )r>   r   r   rA   df_expected	filename2writer1writer2reader1rs1reader2rs2r   r   r   test_excel_date_datetime_format  sH   ""	


z/TestExcelWriter.test_excel_date_datetime_formatc                 C   s   t tjdjddddtjd}| }t|d d|d< t|d d	t
|d< ||d	 t|}tj|d	dd
}W d    n1 sIw   Y  t|| d S )Nr.   r   r      r+   r   r   r   newr   rk   )r   r   r   r   r   r   r   r:   cutr   strr9   r   r;   r   r<   r>   r   rA   r?   rW   r   r   r   r    test_to_excel_interval_no_labels  s   
z0TestExcelWriter.test_to_excel_interval_no_labelsc                 C   s   t tjdjddddtjd}| }tj|d dg dd	}||d
< t	t
||d
< ||d t|}tj|ddd}W d    n1 sKw   Y  t|| d S )Nr.   r   r   r2  r   r   r   )
rP   rQ   r  r  EFGHIJ)labelsr4  r   rk   )r   r   r   r   r   r   r   r:   r5  Seriesr   r9   r   r;   r   r<   )r>   r   rA   r?   	intervalsrW   r   r   r   r   test_to_excel_interval_labels  s   
z-TestExcelWriter.test_to_excel_interval_labelsc                 C   s   t tjdjdddddgtjd}| }|d dd	 |d
< |d dd	 |d
< ||d t	|}t
j|ddd}W d    n1 sJw   Y  t|| d S )Nr.   r   r   r2  r   rP   )rL   r   c                 S   s
   t | dS )Nseconds)r   r   r   r   r   r     s   
 z9TestExcelWriter.test_to_excel_timedelta.<locals>.<lambda>r4  c                 S   s   t | d d S )NrC  iQ )r   total_secondsr   r   r   r   r     s    r   r   rk   )r   r   r   r   r   r   r   applyr9   r   r:   r;   r   r<   r7  r   r   r   test_to_excel_timedelta  s   
z'TestExcelWriter.test_to_excel_timedeltac                 C   sl   |j ddd }||d t|}tj|ddd}W d    n1 s&w   Y  t||d d S )NMperiod)kindsht1r   rk   )	resamplemeanr9   r   r:   r;   r   r<   	to_period)r>   r   r   r  rW   r  r   r   r   test_to_excel_periodindex  s   
z)TestExcelWriter.test_to_excel_periodindexc                 C   s   t jt|jd t jddd}tj|ddgd}||_|j|ddd	 |j|dd
dgd |j|d|d t	|}t
j|dddgd}W d    n1 sPw   Y  t|| d S )Nr.   r   r   firstsecondrR   r   Fr   rP   rQ   rK   r  r   r+   rk   )r   aranger  r3   r   reshaper
   r   r9   r   r:   r;   r   r<   )r>   r  r   r   arrays	new_indexrW   rA   r   r   r   test_to_excel_multiindex  s   "
z(TestExcelWriter.test_to_excel_multiindexc                 C   sd   t g dg dtjddd}|ddg}|j||d tj|d	d
gd}t	|| d S )N)Nr.   r'   )r   r3     r.   r'   rP   rQ   r  rP   rQ   r  r   r+   r   )
r   r   r   r   r  r9   r:   r;   r   r<   )r>   r  r   rA   df1r   r   r   "test_to_excel_multiindex_nan_label  s   z2TestExcelWriter.test_to_excel_multiindex_nan_labelc                 C   s   t jt|jd t jddd}tj|ddgd}||_tg d}||_	dd	g}|s/d}|j
|d
|d t|}tj|d
|dd	gd}	W d    n1 sQw   Y  |sk|j	jdddd}
dd t|
 D |_	t||	 d S )Nr.   r   r   rP  rQ  rR  ))(   r+   )r\  r.   )2   r+   )r]  r.   r   r+   r   r  r6   r4   rS   F)sparsifyadjoinrR   c                 S   s   g | ]
}d  tt|qS )r   )joinmapr6  )rf   qr   r   r   ri   '  s    zATestExcelWriter.test_to_excel_multiindex_cols.<locals>.<listcomp>)r   rS  r  r3   r   rT  r
   r   from_tuplesrL   r9   r   r:   r;   formatrm   r   r<   )r>   r  r   r   rU  rV  new_cols_indexr4   rW   rA   fmr   r   r   test_to_excel_multiindex_cols  s$   "
z-TestExcelWriter.test_to_excel_multiindex_colsc                 C   s   |j tjt|j tjdg}t||_ ddg|j _|j|d|d t	|}t
j|dddgd}W d    n1 s;w   Y  t|| |j jd	ksNJ d S )
Nr   timerF   r   r  r   r+   rk   )ri  rF   )r3   r   rS  r  r   r
   r   rR   r9   r   r:   r;   r   r<   )r>   r  r   r   rV  rW   r   r   r   r   test_to_excel_multiindex_dates*  s   
z.TestExcelWriter.test_to_excel_multiindex_datesc                 C   s   t ddgddgddgd}| }tdd	g}||_|j|d
dd t|}tj|d
d}W d    n1 s:w   Y  t	
|| d S )Nr   r3  rX  r\  r]  <   )rI   rJ   c)F   P   )Z   r,   r   FrO   r6   )r   r   r
   rd  r3   r9   r   r:   r;   r   r<   )r>   r   frame1r   multi_indexrW   frame3r   r   r   'test_to_excel_multiindex_no_write_index7  s   
z7TestExcelWriter.test_to_excel_multiindex_no_write_indexc                 C   s   t g g dd}t g tjg ddgddgd}||d t|}tj|dd	}W d    n1 s3w   Y  tj||d
d
d d S )N)r   r+   r.   rK   r   r+   rR  r.   r'  r   rp  F)check_index_typecheck_dtype)	r   r
   rd  r9   r   r:   r;   r   r<   )r>   r   r?   rA   rW   rB   r   r   r   test_to_excel_empty_multiindexL  s   

z.TestExcelWriter.test_to_excel_empty_multiindexc                 C   s   t g dg dgddgg dd}|j|ddd	 t|}tj|dd
d}W d    n1 s0w   Y  t g dg dgddgg dd}t|| d S )Ng~Ϛ?g9DܜJ?g>D)?g.4i(@33333@̤ArP   rQ   r{   r}   r	  r'  r   %.2ffloat_formatr   rk   gQ?gq=
ףp?g=
ףp=?gp=
ף(@rz  r{  )r   r9   r   r:   r;   r   r<   )r>   r   rA   rW   rB   r?   r   r   r   test_to_excel_float_formatY  s   
z*TestExcelWriter.test_to_excel_float_formatc                 C   s   t g dg dgddgg dd}td| }|j|dd	 tj|dd
d}t|| W d    d S 1 s9w   Y  d S )N)u   ƒu   Ɠu   Ɣ)u   ƕu   Ɩu   Ɨu   AƒrQ   )u   XƓr}   r	  r'  z__tmp_to_excel_float_format__.	TestSheetrp  r   rk   r8   )r>   r   rA   r@   rB   r   r   r   test_to_excel_output_encodingk  s   "z-TestExcelWriter.test_to_excel_output_encodingc              	   C   s  t d| c}zt|d W d    n1 sw   Y  W n ty-   td Y nw tg dg dgddgg dd	}|j|d
dd t|}t	j
|d
dd}W d    n1 s^w   Y  W d    n1 smw   Y  tg dg dgddgg dd	}t || d S )Nu   ƒu.wbz$No unicode file names on this systemrx  ry  rP   rQ   r|  r'  r   r}  r~  r   rk   r  r  )r   r   openUnicodeEncodeErrorr   skipr   r9   r   r:   r;   r<   )r>   r   r@   rA   rW   rB   r?   r   r   r   test_to_excel_unicode_filenamex  s4   
z.TestExcelWriter.test_to_excel_unicode_filenameuse_headersTFr_idx_nlevelsr^   c_idx_nlevelsc                    s<  d fdd	}|rdnd }|t dg||}|jdksJ |jd tjus(J d}	d}
tj|	|
||d	}|d
kr\d}tjt	|d |||dd W d    d S 1 sUw   Y  d S |||}|ro|j|	|
| fksnJ n|j|	d
 |
| fks|J t
t|jD ]}t
t|jD ]}|j||f tjusJ qqd S )NTr   c                    sT   | j | |d t}tj||jd |dW  d    S 1 s#w   Y  d S )N)r4   r  r3   r   r6   r4   )r9   r   r:   r;   r  )datar4   
parser_hdrr3   r  r  r   r   r   	roundtrip  s   
$z;TestExcelWriter.test_excel_010_hemstring.<locals>.roundtrip)r+   r.   )r   r   r   r'   )r  r  r+   z_Writing to Excel with MultiIndex columns and no index \('index'=False\) is not yet implemented.r   FrO   )Tr   T)r   r   r   r   r   r   r   r   r   NotImplementedErrorr   r  r3   rL   )r>   r  r  r  r  r   r  parser_headerr   nrowsncolsrA   r   rrl  r   r  r   test_excel_010_hemstring  s2   	"
z(TestExcelWriter.test_excel_010_hemstringc                 C   s  t g dg dg dgg dd}||d t g dg dg dgg dd}tj|ddd}t|| t g dg d	gg d
d}||d tj|ddd}t g dg d	gg dd}t|| |j|dddd tj|dd d}t g dg d	g}t|| d S )Nr^   )rP   rQ   rQ   rK   r   )rP   rQ   B.1r   rk   )r+   r.   r'   r&   )r      ru      )rP   rQ   rP   rQ   )rP   rQ   A.1r  Fr2   r  r   r9   r:   r;   r   r<   r>   r   rA   r?   rB   r   r   r   test_duplicated_columns  s$   "z'TestExcelWriter.test_duplicated_columnsc                 C   sf   t g dg dd}|j|dddgd tj|ddd	}t|d |d  t|d |d  d S )
Nr+   r+   r+   r.   r.   r.   rP   rQ   r   rQ   rP   rK   r   r  )r   r9   r:   r;   r   assert_series_equal)r>   r   write_frame
read_framer   r   r   test_swapped_columns  s
   z$TestExcelWriter.test_swapped_columnsc                 C   s   t g dg dd}tjtdd |j|dddgd	 W d    n1 s'w   Y  tjtd
d |j|dddgd	 W d    d S 1 sIw   Y  d S )Nr  r  r  zNot all names specifiedr   r   rQ   r  rK   z.'passes columns are not ALL present dataframe'r  )r   r   r   KeyErrorr9   )r>   r   r  r   r   r   test_invalid_columns  s   "z$TestExcelWriter.test_invalid_columnsz#to_excel_index,read_excel_index_col)Tr   )FNc                 C   s^   t g dg dg dd}|j|dddg|d |ddg }tj|d|d	}t|| d S )
Nr  r  )r'   r'   r'   rY  col_subset_bugrP   rQ   rL   r3   rk   r  )r>   r   to_excel_indexread_excel_index_colr  r?   r  r   r   r   test_write_subset_columns  s   	z)TestExcelWriter.test_write_subset_columnsc                 C   sr   t g dg dd}||d tj|ddd}d |jd< d |jd< d |jd	< tj|dd
dd}t|| d S )Nonez#oner  twor  z#twor  test_cr   rk   )r+   r   r+   r+   )r.   r+   #r6   commentrS   )r   r9   r:   r;   r   r   r<   r>   r   rA   result1result2r   r   r   test_comment_arg  s   


z TestExcelWriter.test_comment_argc                 C   sP   t g dg dd}||d tj|dd}tj|dd d}t|| d S )Nr  r  r  r  rp  )r6   r  r  r  r   r   r   test_comment_default#  s
   z$TestExcelWriter.test_comment_defaultc                 C   sZ   t g dg dd}||d t g dg dd}tj|dddd	}t|| d S )
Nr  r  r  r  )r  Nr  )r  NNr  r   r  r  r  r   r   r   test_comment_used0  s
   z!TestExcelWriter.test_comment_usedc                 C   sT   t ddgddgd}|j|dd t dgd	gd}tj|d
d}t|| d S )N1z#223)rI   rJ   FrO   r+   r.   r  )r  r  r  r   r   r   test_comment_empty_line>  s
   z'TestExcelWriter.test_comment_empty_linec                 C   s   t ddddddt ddddddt ddddd	d
t ddddddt ddddddt ddddddt ddddddt ddddddt ddddddt ddddddt ddddddg}td|i}||d tj|ddd }t|d |d  d S )!Ni  r+   r$  r.   r'   -   8   r&      1   r  *   ru   9   #   r  )   r#  r[            5      %   r      r3  4   rP   r   r  )r   r   r9   r:   r;   r   r  )r>   r   	datetimesr  r  r   r   r   test_datetimesJ  s    zTestExcelWriter.test_datetimesc              	   C   s   t  A}ttjdd}t||d}|| W d    n1 s%w   Y  |d t	j
|dd}t|| W d    d S 1 sGw   Y  d S )Nr.   r   r   r   r   )r   r   r   r   r   r   r   r9   seekr:   r;   r   r<   )r>   r   biorA   rV   	reread_dfr   r   r   test_bytes_io`  s   
"zTestExcelWriter.test_bytes_ioc                 C   s   t ddddddg}dddd}trd	|d
< d	|d< |d
kr*tj|s*d|d
< tjtt	|| d |j
||ddid W d    d S 1 sLw   Y  d S )Nr+   r.   r  r'   r&   zBOpenDocumentSpreadsheet() got an unexpected keyword argument 'foo'z3__init__() got an unexpected keyword argument 'foo')r$   r   r#   z<Workbook.__init__() got an unexpected keyword argument 'foo'r   r#   z8load_workbook() got an unexpected keyword argument 'foo'r   rF   rG   )r   engine_kwargs)r   r   osr   existsr   r   	TypeErrorreescaper9   )r>   r   r   rA   msgsr   r   r   test_engine_kwargsm  s4   "z"TestExcelWriter.test_engine_kwargsc                 C   sz   t dddgdddgg dg dd	}||d
 tj|d
ddd}| }|jt|_|j	d|_t
|| d S )NrI   rJ   rl  er.   )r`   f)r+   r.   g      @)applebananacherry)mixednumericr6  r   r   r^  r   )r   r9   r:   r;   r   r  rF  r6  r  r   r   r<   r>   r   rA   readr?   r   r   r   test_write_lists_dict  s   z%TestExcelWriter.test_write_lists_dictc                 C   sF   t ddgddgd}||d tj|ddd}|}t|| d S )	Nr+   r.   r'   r&   )renderr  r   r   r   r  r  r   r   r   test_render_as_column_name  s
   z*TestExcelWriter.test_render_as_column_namec                 C   sV   t ddggddgd}|ddd}|| tj|dgdgd	d
}t|| d S )NrF   rG   col1col2rK   TF)rF   rG   r   )true_valuesfalse_valuesrS   )r   replacer9   r:   r;   r   r<   )r>   r   rA   r?   r  r   r   r   !test_true_and_false_value_options  s   
z1TestExcelWriter.test_true_and_false_value_optionsc                 C   sJ   t ddgddggddgd}|j|dd	d
 tj|dd}t|| d S )Nr+   r.   r'   r&   r  r  rK   r   r  )freeze_panesr   r   r  )r>   r   r?   rB   r   r   r   test_freeze_panes  s   z!TestExcelWriter.test_freeze_panesc                 C   J   t  }t|j|d}ttjdd}t j||d| d}t || d S Nr  r   r   rF   )r   )r   makeDataFramer   r9   r:   r;   round_trip_pathlibr<   r>   r   r   rA   rV   rW   rB   r   r   r   test_path_path_lib  
   z"TestExcelWriter.test_path_path_libc                 C   r  r  )r   r  r   r9   r:   r;   round_trip_localpathr<   r  r   r   r   test_path_local_path  r  z$TestExcelWriter.test_path_local_pathc                 C   s   t tdtdftdtdfg}ttjddd|d}|| tj|dd	gdd
}|j	j
dd |jd D dd |jd	 D gdd	gd|_	t|| d S )N20182018Q12018Q2)r.   r.   r   r   rK   r   r+   r   c                 S   s   g | ]}t |qS r   )r6  )rf   ra   r   r   r   ri     rj   zCTestExcelWriter.test_merged_cell_custom_objects.<locals>.<listcomp>)level)r
   rd  r:   Periodr   r   onesr9   r;   rL   
set_levelslevelsr   r<   )r>   r   mir?   rB   r   r   r   test_merged_cell_custom_objects  s   
&z/TestExcelWriter.test_merged_cell_custom_objectsr   Nc                 C   s   |}t jd|d}t|g|d}tjtdd || W d    n1 s'w   Y  | }t|g|d}tjtdd || W d    d S 1 sOw   Y  d S )N2019)tzr   zExcel does not supportr   )r:   r   r   r   r   r   r9   to_pydatetime)r>   r   tz_aware_fixturer   r  r  rA   r   r   r    test_raise_when_saving_timezones  s   "z0TestExcelWriter.test_raise_when_saving_timezonesc                 C   s`   t ddgddgd}|j|g ddd t|}t g d	g d
gg dd}t|| d S )Nr   r+   r   r[   r  )rP   rQ   rP   Fr  )r   r   r   )r+   r[   r+   )rP   rQ   r  rK   r  )r>   r   rA   rB   r?   r   r   r   'test_excel_duplicate_columns_with_names  s
   
z7TestExcelWriter.test_excel_duplicate_columns_with_namesc              	   C   s   d}t |1}tjtt|d t|dd W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )Nz7if_sheet_exists is only valid in append mode (mode='a')r   r  )if_sheet_exists)r   r   r   r   r   r  r  r   )r>   r   r   r  r   r   r   test_if_sheet_exists_raises  s   "z+TestExcelWriter.test_if_sheet_exists_raisesc              	   C   s   t |3}t||d}t | W d    n1 sw   Y  t|}t }t || W d    d S 1 s;w   Y  d S Nr  )r   r   r   r   r9   r:   r;   r<   )r>   r   r   r   rV   rB   r?   r   r   r   test_excel_writer_empty_frame  s   
"z-TestExcelWriter.test_excel_writer_empty_framec                 C   s\   t |}t j||d t|}t }t || W d    d S 1 s'w   Y  d S r  r   )r>   r   r   r   rB   r?   r   r   r   test_to_excel_empty_frame  s   
"z)TestExcelWriter.test_to_excel_empty_frame)Er   r   r   r   r   r   r   r   r   r   r   r   r   r   int8int16int32r   r   float16float32float64r   r  r  r  r  r  r  r  r1  r8  rB  rG  rO  rW  r[  rh  rj  rt  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  objectr
  r  r  r  r  r   r   r   r   r   ?  s    1	

	9,	4

 
		r   c                
   @   sZ   e Zd Zejdejede	ddeje
de	ddgdd Zdd	 Zd
d ZdS )TestExcelWriterEngineTestsz	klass,extr   r#   r!   r   c              	   C   s   t |=}t| }|dkrtdrt|tsJ nt||s#J W d    n1 s-w   Y  W d    d S W d    d S 1 sEw   Y  d S )Nr   r#   )r   r   r   tdsafe_import
isinstancer   )r>   klassr   r   rV   r   r   r   test_ExcelWriter_dispatch  s   
"z4TestExcelWriterEngineTests.test_ExcelWriter_dispatchc                 C   s<   t jtdd td W d    d S 1 sw   Y  d S )Nz	No enginer   nothing)r   r   r   r   r>   r   r   r    test_ExcelWriter_dispatch_raises  s   
"z;TestExcelWriterEngineTests.test_ExcelWriter_dispatch_raisesc              
   C   s  G dd dt }t| tddI d}t|.}t |}t||s&J W d    n1 s0w   Y  tdd}|| W d    n1 sJw   Y  |  W d    n1 s]w   Y  td}|j|dd W d    n1 syw   Y  |  d S )	Nc                   @   sP   e Zd ZdZdZdZdZdZdd Zdd Z	dd	 Z
ed
d Zedd ZdS )zCTestExcelWriterEngineTests.test_register_writer.<locals>.DummyClassF)xlsxxlsr  c                 S   s   d S )Nr   r  r   r   r   book*  s   zHTestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass.bookc                 S      dt | _d S NT)typecalled_saver  r   r   r   _save-     zITestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass._savec                 _   r$  r%  )r&  called_write_cells)r>   argskwargsr   r   r   _write_cells0  r)  zPTestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass._write_cellsc                 S   r$  r%  )r&  called_sheetsr  r   r   r   ro   3  s   zJTestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass.sheetsc                 S   s.   | j sJ | js
J | jrJ d| _ d| _d S )NF)r'  r*  r.  )clsr   r   r   assert_called_and_reset7  s
   



z[TestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass.assert_called_and_resetN)r   r   r   r'  r*  r.  _supported_extensions_enginer#  r(  r-  propertyro   classmethodr0  r   r   r   r   
DummyClass#  s    
r5  zio.excel.xlsx.writerr  zsomething.xlsxr+   zsomething.xlsr  )	r   r   r   r   r   r  r   r9   r0  )r>   r5  r   filepathrV   rA   r   r   r   test_register_writer"  s"   

	z/TestExcelWriterEngineTests.test_register_writerN)r   r   r   r   r   r   paramr   r  
skip_if_nor   r  r   r7  r   r   r   r   r    s    
	r  c                   @   s   e Zd Zdd Zdd ZdS )
TestFSPathc              	   C   s   t d5}tdddgi}|| t|}t|}W d    n1 s'w   Y  ||ks2J W d    d S 1 s=w   Y  d S )Nfoo.xlsxrP   r+   r.   )r   r   r   r9   r   r  fspath)r>   r   rA   r   rB   r   r   r   test_excelfile_fspathR  s   

"z TestFSPath.test_excelfile_fspathc              	   C   s~   t d0}t|}t|t|ksJ W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S )Nr;  )r   r   r   r  r<  r6  )r>   r   rV   r   r   r   test_excelwriter_fspathZ  s   
"z"TestFSPath.test_excelwriter_fspathN)r   r   r   r=  r>  r   r   r   r   r:  O  s    r:  r  c                 C   s6   dd t tD }dd t | D }||rJ d S )Nc                 S      h | ]	}| d s|qS _
startswithrf   r  r   r   r   	<setcomp>c      z%test_subclass_attr.<locals>.<setcomp>c                 S   r?  r@  rB  rD  r   r   r   rE  d  rF  )dirr   symmetric_difference)r  
attrs_baseattrs_klassr   r   r   test_subclass_attr`  s   rK  )1r   r   r   	functoolsr   ior   r  r  numpyr   r   pandas.compat._constantsr   pandas.util._test_decoratorsutil_test_decoratorsr  pandasr:   r   r	   r
   r   pandas._testing_testingr   pandas.io.excelr   r   r   r   r   pandas.io.excel._utilr   fixturer   r   r   r   r8  r9  r%   usefixturesr   r  r:  valuesrK  r   r   r   r   <module>   s    

 y
       ?B