o
    թZhs                     @   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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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 rtej(j)Z*de+de+fddZ,ej-dd Z.ej-ddgddd Z/ej-dd Z0ej-dd Z1ej(2dej3de4de4dgdej3de4de4dgdej3de4de4dgdej3d e4d!dgG d"d# d#Z5ej(2d$ej3dde4de4dgdej3dde4de4dgdej3dde4de4dgdej3d!d e4d!dgej(6dG d%d& d&Z7G d'd( d(Z8e4de4dG d)d* d*Z9ej(2d+e': d,d- Z;dS ).    )datedatetime	timedelta)partial)BytesION)is_platform_windows)PY310)import_optional_dependency)	DataFrameIndex
MultiIndex
date_rangeoption_context)	ExcelFileExcelWriter_OpenpyxlWriter_XlsxWriterregister_writer)_writerspathreturnc                 C   s   dS )Nns r   r   r   Y/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/io/excel/test_writers.pyget_exp_unit*      r   c                 C   s   | dd S )z?
    Returns the first ten items in fixture "float_frame".
    N
   r   )Zfloat_framer   r   r   frame.   s   r   TF)paramsc                 C   s   | j S N)param)requestr   r   r   merge_cells6   s   r#   c                 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_pathr   r   r   r   ;   s   "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&   Zoption_namer   r   r   
set_engineD   s
   
"r+   r&   .xlsxopenpyxlZxlrdZ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 )
NZ	no_header    d   r5         r5   r3   i,  r5   r2   i  F
sheet_nameindexheaderr   r>   Zusecolsr@   r
   r$   r%   to_excelpd
read_excelassert_frame_equalselfr&   r@   expectedfilenamedfr   resultr   r   r   !test_read_one_empty_col_no_header_   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 )NZwith_headerr4   r8   r;   r<   FTr=   r   rA   rB   rG   r   r   r   #test_read_one_empty_col_with_headerp   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 )Nr6   foor9   barr3   ZbazabcolumnsZData_no_headF)r>   r@   r?   ZData_with_headr>   r?   AB)r>   r@   names)r>   	index_colrX   )
r
   r$   r%   r   rC   rT   r   rD   rE   rF   )rH   r&   ZrefdfpthwriterreaderZxlsdf_no_headZxlsdf_with_headr   r   r   "test_set_column_names_in_parameter   s.   "


"z0TestRoundTrip.test_set_column_names_in_parameterc           
   	      s   dd  g d} fdd|D }t t||}t|D}t|}| D ]\}}|j||d q'W d    n1 s=w   Y  tj||dd}|D ]}	t	||	 ||	  qLW d    d S 1 sdw   Y  d S )	Nc                 S   s"   g dg d}}t ||| gdS )N)      !   r6   r9   r3   rS   )r
   )Zcol_sheet_namedir   r   r   tdf   s   zDTestRoundTrip.test_creating_and_reading_multiple_sheets.<locals>.tdf)ZAAAZBBBZCCCc                    s   g | ]} |qS r   r   ).0srd   r   r   
<listcomp>       zKTestRoundTrip.test_creating_and_reading_multiple_sheets.<locals>.<listcomp>r>   r   r>   rY   )
dictzipr$   r%   r   itemsrC   rD   rE   rF   )
rH   r&   sheetsdfsrZ   ewZ	sheetnamerK   Zdfs_returnedrf   r   rg   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   r6   r3      )ZOnexTwoXrw   Y)Zeror5   )rt   rv   ry   )r{   zUnnamed: 4_level_1r@   rY   ))Begr5   ZMiddleru   Tailrx   r   rz   ))r}   zUnnamed: 1_level_1r~   r   r   r$   r%   r
   rC   rD   rE   rF   )rH   r&   r   rK   rI   actualr   r   r   &test_read_excel_multiindex_empty_level   sH   	
		
	"z4TestRoundTrip.test_read_excel_multiindex_empty_levelc_idx_namesrQ   r_idx_namesrR   c_idx_levelsr6   r_idx_levelsc                    s  t |}tp|dk}|dkrttd}	ntjdd t|D  fddt|D d}	|dkr;ttd}
ntjdd t|D fd	dt|D d}
td
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 )Nr6   Zabcdec                 S      g | ]}t d qS    rangere   _r   r   r   rh      ri   z@TestRoundTrip.test_excel_multindex_roundtrip.<locals>.<listcomp>c                       g | ]	}  d | qS -r   re   rc   )r   r   r   rh          rX   Zghijkc                 S   r   r   r   r   r   r   r   rh      ri   c                    r   r   r   r   )r   r   r   rh      r   皙?)r   r   rT   r?   )rY   r@   )check_namesr   )r$   r%   boolr   listr   from_arraysr   r
   nponesrC   rD   rE   rF   naniloc)rH   r&   r   r   r   r   r"   rZ   r   rT   r?   rK   Zactr   )r   r   r   test_excel_multindex_roundtrip   sV   








"z,TestRoundTrip.test_excel_multindex_roundtripc              	   C   s   t g dtdddd}| }|d jd|d< t|f}|| tj	|dd	}t
|| tj	|dgdd
}t
|| dd }tjtd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 )Nra   z
2012-01-01r3   )periods)coldate_stringsr   %m/%d/%Yr   rY   )parse_datesrY   c                 S   s   t | dS )Nr   )r   strptimeru   r   r   r   <lambda>0  s    z;TestRoundTrip.test_read_excel_parse_dates.<locals>.<lambda>zuse 'date_format' insteadF)matchZraise_on_extra_warnings)r   date_parserrY   )r   date_formatrY   )r
   r   copydtstrftimer$   r%   rC   rD   rE   rF   assert_produces_warningFutureWarning)rH   r&   rK   Zdf2rZ   resr   r   r   r   test_read_excel_parse_dates  s<   

"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 )
Nr2   z
2020-01-01Z6ME)startr   freqr?   r   r6   r   )z*(2020-01-31 00:00:00, 2020-07-31 00:00:00]z*(2020-07-31 00:00:00, 2021-01-31 00:00:00]z*(2021-01-31 00:00:00, 2021-07-31 00:00:00]z*(2021-07-31 00:00:00, 2022-01-31 00:00:00])r   r   r   rD   Zinterval_range	Timestampr
   r$   r%   rC   rE   rF   )rH   r&   ZmidxrK   rZ   rL   rI   r   r   r   "test_multiindex_interval_datetimesB  s*   
z0TestRoundTrip.test_multiindex_interval_datetimes)__name__
__module____qualname__pytestmarkparametrizer
   r   r   rM   rN   r]   rr   r   r   r   r   r   r   r   r   r1   S   s*    *
,
/8#r1   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@  r6   )shapezsheet is too larger   )r   Zzerosr
   r   raises
ValueErrorrC   )	rH   r   Zbreaking_row_countZbreaking_col_countZrow_arrZcol_arrZrow_dfZcol_dfmsgr   r   r   test_excel_sheet_sizex  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 )Nr9   r   r9   r   rk   zWorksheet named '0' not foundr   0)r
   r   randomdefault_rngstandard_normalrC   r   rD   rE   r$   rF   r   r   r   )rH   r   gtxlrK   r   r   r   r   test_excel_sheet_by_name_raise  s   

"z.TestExcelWriter.test_excel_sheet_by_name_raisec                 C   s   t |#}|j|dd | }|jd d d |_|j|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 s[w   Y  d S )NZData1rj   r   ZData2r   rk   )	r   rC   r   rT   r   rD   rE   r$   rF   )rH   r   r   r[   frame2r\   Zfound_dfZ	found_df2r   r   r   !test_excel_writer_context_manager  s   

"z1TestExcelWriter.test_excel_writer_context_managerc                 C   s  |  }tj|jd d|jdf< |j|dd |j|dddgd |j|ddd |j|ddd	 |j|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	
|| |j|dd tj|d
d}t	
|| |j|dd tj|d
d}t	
|| |d }|| tj|d
d}t	
| | d S )Nr   rV   test1rj   rW   r>   rT   Fr>   r@   rU   r   rk   ZNA)r>   Zna_rep)r>   rY   Z	na_valuesZ88X   g      V@Sheet1r   r   )r   r   r   r   rT   get_locrC   rD   rE   r$   rF   r?   Zto_frame)rH   r   r   reconsrf   r   r   r   test_roundtrip  sD   
zTestExcelWriter.test_roundtripc                 C   sf   |  }d|d< |j|dd t|}tj|ddd}W d    n1 s&w   Y  t|| d S )NrP   rO   r   rj   r   rk   )r   rC   r   rD   rE   r$   rF   )rH   r   r   Zmixed_framer\   r   r   r   r   
test_mixed  s   
zTestExcelWriter.test_mixedc                 C   s   t |}ttjddttdtddddd}t	j
t|jd d	}||_|d d  }|j||_|j|d
d t|}t	j|d
dd}W d    n1 sTw   Y  t|| d S )Nr9   r   r2   ABCD
2000-01-01r   rW   r   r   r   r   r   rj   r   rk   )r   r
   r   r   r   r   r   r   r   rD   DatetimeIndexasarrayr?   as_unitrC   r   rE   r$   rF   )rH   r   unitrK   r?   rI   r\   r   r   r   r   test_ts_frame  s   

zTestExcelWriter.test_ts_framec                 C   sj   |  }tj|jd d|jdf< |j|dd |j|dddgd |j|ddd |j|ddd	 d S )
Nr   rV   r   rj   rW   r   Fr   rU   )r   r   r   r   rT   r   rC   )rH   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}|j|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 )Nr9   r   r   sizedtyper   rj   r   rk   )r
   r   r   r   integersrC   r   rD   rE   astypeint64r$   rF   )rH   r   r   rK   r\   r   Z	int_frameZrecons2r   r   r   test_int_types  s   
zTestExcelWriter.test_int_typesc                 C   sv   t tjdd|d}|j|dd t|}tj|ddd|}W d    n1 s.w   Y  t	
|| d S )Nr9   r   r   r   rj   r   rk   )r
   r   r   r   rC   r   rD   rE   r   r$   rF   )rH   r   r   rK   r\   r   r   r   r   test_float_types  s   
z TestExcelWriter.test_float_typesc                 C   sp   t g dtjd}|j|dd t|}tj|dddtj}W d    n1 s+w   Y  t	|| d S )N)r6   r   TFr   r   rj   r   rk   )
r
   r   Zbool_rC   r   rD   rE   r   r$   rF   rH   r   rK   r\   r   r   r   r   test_bool_types  s   
zTestExcelWriter.test_bool_typesc                 C   sr   t dtjfddtj fg}|j|dd t|}tj|ddd}W d    n1 s,w   Y  t|| d S )Nr6   )r9   r3   r   r   rj   r   rk   )	r
   r   infrC   r   rD   rE   r$   rF   r   r   r   r   test_inf_roundtrip%  s   
z"TestExcelWriter.test_inf_roundtripc           
      C   s  t |}ttjddttdtddddd}t	j
t|jd d	}||_|d d  }|j||_| }tj|jd d|jd
f< |j|dd |j|dd
dgd |j|ddd |j|ddd t|}|j|dd |j|dd W d    n1 sw   Y  t|}t	j|ddd}	t||	 t	j|ddd}	W d    n1 sw   Y  t||	 dt|jksJ d|jd ksJ d|jd ksJ d S )Nr9   r   r   r   r   rW   r   r   r   rV   r   rj   r   Fr   rU   Ztest2r   rk   r6   )r   r
   r   r   r   r   r   r   r   rD   r   r   r?   r   r   r   r   rT   r   rC   r   r   rE   r$   rF   lensheet_names)
rH   r   r   r   tsframer?   rI   r[   r\   r   r   r   r   test_sheets.  s:   


zTestExcelWriter.test_sheetsc                 C   s   |  }tj|jd d|jdf< |j|d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 sXw   Y  |  }||_t|| d S )Nr   rV   r   rj   rW   r   Fr   rU   )ZAArx   rz   Zr   rk   )r   r   r   r   rT   r   rC   r   r   rD   rE   r$   rF   )rH   r   r   Zcol_aliasesr\   rsxpr   r   r   test_colaliasesQ  s   
zTestExcelWriter.test_colaliasesc                 C   s  |  }tj|jd d|jdf< |j|d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 sew   Y  dg|j_|jj|jjksyJ 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 s5w   Y  t|| d S )Nr   rV   r   rj   rW   r   Fr   rU   r9   r   r   test)r>   Zindex_labelr#   rk   )r   dummyZdummy2)rV   rW   CD)r>   rT   r?   r#   r6   )r   r   r   r   rT   r   rC   r
   r   r   r   r   rD   rE   r   r   r?   rX   r$   rF   r   	set_index)rH   r#   r   r   rK   r\   r   r   r   r   test_roundtrip_indexlabelsc  sn   







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 )Nr9   )r   r2   rO   r#   r   rk   )r
   r   r   r   r   r?   namerC   r   rD   rE   r   r$   rF   )rH   r#   r   rK   xfrL   r   r   r   test_excel_roundtrip_indexname  s   
z.TestExcelWriter.test_excel_roundtrip_indexnamec           
      C   s   t |}ttjddttdtddddd}t	j
t|jd d	}||_| }d
d |jD |_|j|d|d t|}t	j|ddd}W d    n1 sUw   Y  |d d  }	|	j||	_t|	| d S )Nr9   r   r   r   r   rW   r   r   r   c                 S   s   g | ]}|  qS r   )r   )re   ru   r   r   r   rh     ri   zATestExcelWriter.test_excel_roundtrip_datetime.<locals>.<listcomp>r   r>   r#   r   rk   )r   r
   r   r   r   r   r   r   r   rD   r   r   r?   r   rC   r   rE   r   r$   rF   )
rH   r#   r   r   r   r?   Ztsfr\   r   rI   r   r   r   test_excel_roundtrip_datetime  s"   

z-TestExcelWriter.test_excel_roundtrip_datetimec              
   C   s  t |}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}|d| d}t|y}t|}|j|dd W d    n1 sww   Y  t|ddd}|j|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  r6      i  	      i  r         r`   r2   r9         ZDATEZDATETIMErx   rz   r?   rT   M8[]r   rj   z
DD.MM.YYYYzDD.MM.YYYY HH-MM-SS)r   Zdatetime_formatr   rk   )r   r
   r   r   r   r$   r%   r   rC   r   rD   rE   rF   )rH   r&   r   r   rK   Zdf_expected	filename2Zwriter1Zwriter2Zreader1Zrs1Zreader2Zrs2r   r   r   test_excel_date_datetime_format  sL   ""


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	|s+t
nd	|d< |j|d
d t|}tj|d
dd}W d    n1 sNw   Y  t|| d S )Nr9   r   r      r6   r   r   r   newzstring[pyarrow_numpy]r   rj   rk   )r
   r   r   r   r   r   r   rD   cutr   strrC   r   rE   r$   rF   )rH   r   Zusing_infer_stringrK   rI   r\   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
< |j|dd t|}tj|ddd}W d    n1 sLw   Y  t|| d S )Nr9   r   r   r  r   r   r   )
rV   rW   r   r   EFGHIJ)labelsr  r   rj   rk   )r
   r   r   r   r   r   r   rD   r  ZSeriesr   rC   r   rE   r$   rF   )rH   r   rK   rI   Z	intervalsr\   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
< |j|dd t	|}t
j|ddd}W d    n1 sKw   Y  t|| d S )Nr9   r   r   r  r   rV   rT   r   c                 S   s
   t | dS )Nseconds)r   r   r   r   r   r   %  s   
 z9TestExcelWriter.test_to_excel_timedelta.<locals>.<lambda>r  c                 S   s   t | d d S )Nr#  iQ )r   total_secondsr   r   r   r   r   '  s    r   rj   r   rk   )r
   r   r   r   r   r   r   applyrC   r   rD   rE   r$   rF   )rH   r   rK   rI   r\   r   r   r   r   test_to_excel_timedelta  s   
z'TestExcelWriter.test_to_excel_timedeltac                 C   s   t tjddttdtddddd}|d		 
d
}|j|dd t|}tj|ddd}W d    n1 s?w   Y  t||
d
 d S )Nr9   r   r   r   r   rW   r   r   ZMEMZsht1rj   r   rk   )r
   r   r   r   r   r   r   r   ZresamplemeanZ	to_periodrC   r   rD   rE   r$   rF   )rH   r   rK   r   r\   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 )Nr9   r   r   firstsecondr   r   Fr   rV   rW   r   r  r   r6   rk   )r   aranger   r?   r   reshaper   r   rC   r   rD   rE   r$   rF   )rH   r#   r   r   arrays	new_indexr\   rK   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)Nr9   r3   )r   r     r9   r3   rV   rW   r   rV   rW   r  r   r6   r   )
r
   r   r   r   r   rC   rD   rE   r$   rF   )rH   r#   r   rK   Zdf1r   r   r   "test_to_excel_multiindex_nan_labelM  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  |sj|j	jddd}
dd t|
 D |_	t||	 d S )Nr9   r   r   r+  r,  r   ))(   r6   )r5  r9   )2   r6   )r6  r9   r   r6   r   r  r>   r@   rY   F)ZsparsifyZinclude_namesc                 S   s   g | ]
}d  tt|qS )r(   )joinmapr  )re   qr   r   r   rh   q  s    zATestExcelWriter.test_to_excel_multiindex_cols.<locals>.<listcomp>)r   r-  r   r?   r   r.  r   r   from_tuplesrT   rC   r   rD   rE   Z_format_multirm   r$   rF   )rH   r#   r   r   r/  r0  Znew_cols_indexr@   r\   rK   fmr   r   r   test_to_excel_multiindex_cols^  s$   "
z-TestExcelWriter.test_to_excel_multiindex_colsc                 C   s   t |}ttjddttdtddddd}t	j
|j|tjt|jtjd	gd
dgd|_|j|d|d t|}tj|dddgd}W d    n1 sUw   Y  t|| |jjdkshJ d S )Nr9   r   r   r   r   rW   r   r   r   timerO   r   r   r  r   r6   rk   )r>  rO   )r   r
   r   r   r   r   r   r   r   r   r   r?   r   r-  r   r   rC   r   rD   rE   r$   rF   rX   )rH   r#   r   r   r   r\   r   r   r   r   test_to_excel_multiindex_datest  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   r  r2  r5  r6  <   )rQ   rR   c)F   P   )Z   r7   r   FrU   rj   )r
   r   r   r;  r?   rC   r   rD   rE   r$   rF   )rH   r   Zframe1r   Zmulti_indexr\   Zframe3r   r   r   'test_to_excel_multiindex_no_write_index  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}|j|dd	 t|}tj|dd	}W d    n1 s4w   Y  tj||d
d
d d S )N)r   r6   r9   rS   r   r6   r   r9   r  r   rj   F)Zcheck_index_typeZcheck_dtype)	r
   r   r;  rC   r   rD   rE   r$   rF   )rH   r   rI   rK   r\   rL   r   r   r   test_to_excel_empty_multiindex  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@̤ArV   rW   rx   rz   r   r  r   %.2fr>   Zfloat_formatr   rk   gQ?gq=
ףp?g=
ףp=?gp=
ף(@rI  rJ  )r
   rC   r   rD   rE   r$   rF   )rH   r   rK   r\   rL   rI   r   r   r   test_to_excel_float_format  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ƒrW   )u   XƓrz   r   r  z__tmp_to_excel_float_format__.Z	TestSheetrj   r   rk   rB   )rH   r&   rK   rJ   rL   r   r   r   test_to_excel_output_encoding  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 systemrG  rH  rV   rW   rK  r  r   rL  rM  r   rk   rN  rO  )r$   r%   openUnicodeEncodeErrorr   skipr
   rC   r   rD   rE   rF   )rH   r&   rJ   rK   r\   rL   rI   r   r   r   test_to_excel_unicode_filename  s4   
z.TestExcelWriter.test_to_excel_unicode_filenameuse_headersTFr_idx_nlevelsra   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|d	kr>td
d tD td}	ntj	fddt|D dd t|D d}	|d	krgtdd tD td}
ntj	fddt|D dd t|D d}
t t
f|	|
d}|d	krd}tjt|d |||dd W d    d S 1 sw   Y  d S |||}|r|j| fksJ n|jd	 | fksJ 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)r@   r#   r?   r   r   )rC   r   rD   rE   r   )datar@   Z
parser_hdrr?   r  )r#   r   r   r   	roundtrip  s   
$z;TestExcelWriter.test_excel_010_hemstring.<locals>.roundtrip)r6   r9   )r   r   r   r3   r6   c                 S      g | ]}d | qS )za-r   r   r   r   r   rh         z<TestExcelWriter.test_excel_010_hemstring.<locals>.<listcomp>r   c                       g | ]}t  qS r   r   r   )ncolsr   r   rh     ri   c                 S   r\  zi-r   r   r   r   r   rh     r]  r   c                 S   r\  )zb-r   r   r   r   r   rh   	  r]  c                    r^  r   r   r   )nrowsr   r   rh     ri   c                 S   r\  )zj-r   r   r   r   r   rh     r]  r   z_Writing to Excel with MultiIndex columns and no index \('index'=False\) is not yet implemented.r   Fr   )Tr   T)r
   r   r   r   r   r   r   objectr   r   r   r   r   NotImplementedErrorr   r?   rT   )rH   r#   rY  rX  rW  r   r[  Zparser_headerr   rT   r?   rK   r   rrA  r   )r#   r_  ra  r   r   test_excel_010_hemstring  sN   	"
z(TestExcelWriter.test_excel_010_hemstringc                 C   s  t g dg dg dgg dd}|j|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}|j|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 )Nra   )rV   rW   rW   rS   r   rj   )rV   rW   B.1r   rk   )r6   r9   r3   r2   )r      rs      )rV   rW   rV   rW   )rV   rW   A.1rf  Fr=   r   r
   rC   rD   rE   r$   rF   rH   r   rK   rI   rL   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r6   r6   r6   r9   r9   r9   rV   rW   r   rW   rV   r   r   r   )r
   rC   rD   rE   r$   assert_series_equal)rH   r   write_frame
read_framer   r   r   test_swapped_columnsJ  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 )Nrm  rn  ro  zNot all names specifiedr   r   rW   r   r   z.'passes columns are not ALL present dataframe'r   )r
   r   r   KeyErrorrC   )rH   r   rq  r   r   r   test_invalid_columnsT  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 )
Nrm  rn  )r3   r3   r3   r3  Zcol_subset_bugrV   rW   )r>   rT   r?   rk   rj  )rH   r   Zto_excel_indexZread_excel_index_colrq  rI   rr  r   r   r   test_write_subset_columns`  s   	z)TestExcelWriter.test_write_subset_columnsc                 C   st   t g dg dd}|j|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#onerx  tworz  z#tworo  test_crj   r   rk   )r6   r   r6   r6   )r9   r6   #r>   commentrY   )r
   rC   rD   rE   r   r$   rF   rH   r   rK   Zresult1Zresult2r   r   r   test_comment_argu  s   


z TestExcelWriter.test_comment_argc                 C   sR   t g dg dd}|j|dd tj|dd}tj|dd d}t|| d S )Nrw  ry  ro  r{  rj   )r>   r  rj  r  r   r   r   test_comment_default  s
   z$TestExcelWriter.test_comment_defaultc                 C   s\   t g dg dd}|j|dd t g dg dd}tj|ddd	d
}t|| d S )Nrw  ry  ro  r{  rj   )rx  Nrx  )rz  NNr}  r   r~  rj  rk  r   r   r   test_comment_used  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)rQ   rR   Fr   r6   r9   r}  )r  rj  rk  r   r   r   test_comment_empty_line  s
   z'TestExcelWriter.test_comment_empty_linec                 C   s  t |}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}|j|dd  tj|ddd!}|d"| d#}t|d |d  d S )$Ni  r6   r  r9   r3   -   8   r2      1   rg  *   rs   9   #   r	  )   r  r^            5      %   r      r  4   rV   r   rj   r   r  r  )	r   r   r
   rC   rD   rE   r   r$   rp  )rH   r   r   Z	datetimesrq  rr  rI   r   r   r   test_datetimes  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 )Nr9   r   r*   r   r   )r   r
   r   r   r   r   r   rC   seekrD   rE   r$   rF   )rH   r*   ZbiorK   r[   Z	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 )Nr6   r9   ro  r3   r2   zBOpenDocumentSpreadsheet() got an unexpected keyword argument 'foo'z3__init__() got an unexpected keyword argument 'foo')r0   r-   r/   z<Workbook.__init__() got an unexpected keyword argument 'foo'r-   r/   z8load_workbook() got an unexpected keyword argument 'foo'r   rO   rP   )r*   Zengine_kwargs)r
   r   osr   existsr   r   	TypeErrorreescaperC   )rH   r*   r   rK   Zmsgsr   r   r   test_engine_kwargs  s4   "z"TestExcelWriter.test_engine_kwargsc                 C   s|   t dddgdddgg dg dd	}|j|d
d tj|d
ddd}| }|jt|_|j	d|_t
|| d S )NrQ   rR   rA  er9   )rb   f)r6   r9   g      @)applebananaZcherry)mixednumericr  r   rj   r   r7  r   )r
   rC   rD   rE   r   r  r&  r  r  r   r$   rF   rH   r   rK   readrI   r   r   r   test_write_lists_dict  s   z%TestExcelWriter.test_write_lists_dictc                 C   sH   t ddgddgd}|j|dd tj|ddd	}|}t|| d S )
Nr6   r9   r3   r2   )renderrZ  r   rj   r   r   rj  r  r   r   r   test_render_as_column_name  s
   z*TestExcelWriter.test_render_as_column_namec                 C   s   t ddggddgtd}tdd |ddd	d
}W d    n1 s'w   Y  || tj|dgdgdd}t	|| d S )NrO   rP   col1col2r"  zfuture.no_silent_downcastingTF)rO   rP   r   r   )Ztrue_valuesZfalse_valuesrY   )
r
   rb  r   replacer   rC   rD   rE   r$   rF   )rH   r   rK   rI   rr  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 )Nr6   r9   r3   r2   r  r  rS   r   r|  )r>   Zfreeze_panesr   r   rj  )rH   r   rI   rL   r   r   r   test_freeze_panes  s   z!TestExcelWriter.test_freeze_panesc                 C   s~   t dtdd ttdtdd tdD tdd	}t|j	|d
}tt
jdd}tj||d| d}t|| d S )Nr   x   r2  r2   r   c                 S   r\  r`  r   r   r   r   r   rh   &  r]  z6TestExcelWriter.test_path_path_lib.<locals>.<listcomp>r2  r   r   r  r   r   rO   r   )r
   r   r-  r.  r   r   r   rb  r   rC   rD   rE   r$   Zround_trip_pathlibrF   rH   r*   r&   rK   r[   r\   rL   r   r   r   test_path_path_lib"  s   
z"TestExcelWriter.test_path_path_libc                 C   sz   t dtdd ttdtdd tdD d}t|j|d	}tt	j
d
d}tj||d| d}t|| d S )Nr   r  r  r   c                 S   r\  r`  r   r   r   r   r   rh   2  r]  z8TestExcelWriter.test_path_local_path.<locals>.<listcomp>r2  r   r  r   r   rO   r   )r
   r   r-  r.  r   r   r   r   rC   rD   rE   r$   Zround_trip_localpathrF   r  r   r   r   test_path_local_path.  s   
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 )NZ2018Z2018Q1Z2018Q2)r9   r9   r   r   rS   r   r6   r|   c                 S   s   g | ]}t |qS r   )r  r   r   r   r   rh   G  ri   zCTestExcelWriter.test_merged_cell_custom_objects.<locals>.<listcomp>)level)r   r;  rD   ZPeriodr
   r   r   rC   rE   rT   Z
set_levelsZlevelsr$   rF   )rH   r   mirI   rL   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 )NZ2019)tzr   zExcel does not supportr   )rD   r   r
   r   r   r   rC   Zto_pydatetime)rH   r   Ztz_aware_fixturer   r  rZ  rK   r   r   r    test_raise_when_saving_timezonesL  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   r6   r   r^   ro  )rV   rW   rV   Fr   )r   r   r   )r6   r^   r6   )rV   rW   ri  rS   rj  )rH   r   rK   rL   rI   r   r   r   'test_excel_duplicate_columns_with_namesZ  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  )Zif_sheet_exists)r$   r%   r   r   r   r  r  r   )rH   r&   r   r  r   r   r   test_if_sheet_exists_raisesc  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
   rC   rD   rE   rF   )rH   r*   r&   r   r[   rL   rI   r   r   r   test_excel_writer_empty_framek  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   )rH   r*   r&   r   rL   rI   r   r   r   test_to_excel_empty_framet  s   
"z)TestExcelWriter.test_to_excel_empty_frame)Er   r   r   r   r   r   r   r   r   r   r   r   r   r   Zint8Zint16Zint32r   r   Zfloat16Zfloat32Zfloat64r   r   r   r   r   r  r  r  r  r  r!  r'  r*  r1  r4  r=  r?  rE  rF  rP  rQ  rV  re  rl  rs  ru  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb  r  r  r  r  r  r   r   r   r   r   a  s    1	

	#=/E

 
		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tdddrt|tsJ nt||s&J W d    n1 s0w   Y  W d    d S W d    d S 1 sHw   Y  d S )Nr,   r/   ignore)errors)r$   r%   r   r   r	   
isinstancer   )rH   klassr&   r   r[   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   Znothing)r   r   r   r   rH   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U d}t|:}t |}t||s&J W d    n1 s0w   Y  tdgtdgdd	td
gdd	d}|| W d    n1 sVw   Y  |	  W d    n1 siw   Y  td}|j|dd W d    n1 sw   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)ZxlsxZxlsr   c                 S   s   d S r    r   r  r   r   r   book  r   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)rH   argskwargsr   r   r   _write_cells  r  zPTestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass._write_cellsc                 S   r  r  )r  called_sheetsr  r   r   r   ro     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_reset  s
   



z[TestExcelWriterEngineTests.test_register_writer.<locals>.DummyClass.assert_called_and_resetN)r   r   r   r  r  r  Z_supported_extensionsZ_enginer  r  r  propertyro   classmethodr  r   r   r   r   
DummyClass  s    
r  zio.excel.xlsx.writerr   zsomething.xlsxrQ   rR   rO   )r  rA  rP   r   zsomething.xlsr  )
r   r   r   r$   r%   r  r
   r   rC   r  )rH   r  r   filepathr[   rK   r   r   r   test_register_writer  s*   

	z/TestExcelWriterEngineTests.test_register_writerN)r   r   r   r   r   r   r!   r   td
skip_if_nor   r  r  r  r   r   r   r   r  }  s    
r  c                   @   s$   e Zd Zd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.xlsxrV   r6   r9   )r$   r%   r
   rC   r   r  fspath)rH   r   rK   r   rL   r   r   r   test_excelfile_fspath  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  r  )rH   r   r[   r   r   r   test_excelwriter_fspath  s   
"z"TestFSPath.test_excelwriter_fspathc                 C   sb   t dg di}d}tjt|d t }t|}||d W d    d S 1 s*w   Y  d S )NrQ   ra   zwStarting with pandas version 3.0 all arguments of to_excel except for the argument 'excel_writer' will be keyword-only.r   ZSheet_name_1)r
   r$   r   r   r   r   rC   )rH   rK   r   bufr[   r   r   r   "test_to_excel_pos_args_deprecation  s   "z-TestFSPath.test_to_excel_pos_args_deprecationN)r   r   r   r  r  r  r   r   r   r   r    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 r   
startswithre   r  r   r   r   	<setcomp>  r   z%test_subclass_attr.<locals>.<setcomp>c                 S   r  r  r  r  r   r   r   r    r   )dirr   symmetric_difference)r  Z
attrs_baseZattrs_klassr   r   r   test_subclass_attr  s   r  )<r   r   r   	functoolsr   ior   r  r  numpyr   r   Zpandas.compatr   Zpandas.compat._constantsr   Zpandas.compat._optionalr	   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  ZpandasrD   r
   r   r   r   r   Zpandas._testingZ_testingr$   Zpandas.io.excelr   r   r   r   r   Zpandas.io.excel._utilr   r   Z
single_cpuZ
pytestmarkr  r   Zfixturer   r#   r   r+   r   r!   r  r1   Zusefixturesr   r  r  valuesr  r   r   r   r   <module>   s    



  
        H