U
    sVcg9                     @   s  d dl 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mZ edZejddgZdd	 Zd
d Zejdddgdd Zejdddgdd Zdd Zejdddgdd Zejdddgfddddgfgd d! Zejd"d#d$d%d&gfd'd(d)gfd*d(d)d&gfgd+d, Zejd-d d d.d/gd0d1gfd d(d2d/gd.d1gfd(d d2d.gd0d1gfd(d(d2d/gd0d.gfgd3d4 Zejd5d6d7d8gd9d: Zd;d< Zejd=ddgd>d? Z ejd@d ej!dAd(d$dBgej!dCdDdEdFgej!dGdHdIdJgdKfd$d(d$dBgdDdEdFgdHdIdJgdLfgejdMdNdOdPgejd=dddgdQdR Z"dSdT Z#ejd=dddgdUdV Z$ejd=dddgdWdX Z%dYdZ Z&d[d\ Z'd]d^ Z(dS )_    N)Path)	DataFrame)ExcelWriter_OpenpyxlWriteropenpyxlextz.xlsxc                 C   s4  ddl m} dddddddddd	d
dddddddidddd}|d}|jd|d}|j|jjd}|j||||d}|jdd	d
}|jddd}|j	d|d}	d}
|j
ddd}t|}|d |kst|d |kst|d |kst|d |	kst|d |
kst|d |ks0td S )Nr   )styles00FF0000TcolorboldZthin)toprightZbottomleftcenterr   )Z
horizontalZverticalZsolidZ006666FFg333333?)ZrgbZtint)ZpatternTypeZfgColorZformat_codez0.00F)lockedhidden)fontborders	alignmentfillnumber_format
protection)r   r   )styler   borderr   r   r   r   )r   r   ZColorZFontZSider   ZBORDER_THINZBorderZ	AlignmentZPatternFillZ
Protectionr   _convert_to_style_kwargsAssertionError)r   r   ZhstyleZ
font_colorr   Zsider   r   Z
fill_colorr   r   r   kw r   G/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/io/excel/test_openpyxl.pytest_to_excel_styleconverter   s0    	

r    c              
   C   s   ddl m} d}dddii}dddii}|ddd	|d
|ddd|d
g}ddddi}t|}|d }|ddddd|dg}	t| l}
t|
,}|j||d |j|	|d |j| }W 5 Q R X |d }|d }|j|kst	|j|kst	W 5 Q R X d S )Nr   )	ExcelCellZmerge_styledr   r   r	   Z0000FF00   *   )colrowvalr   c   Z000000FFTr
   pandas)r$   r%   r&   Z
mergestartZmergeendr   
sheet_nameB1A2)
Zpandas.io.formats.excelr!   r   r   tmensure_cleanZ_write_cellssheetsr   r   )r   r!   r*   Zsty_b1Zsty_a2Zinitial_cellsZ
sty_mergedZ
sty_kwargsZopenpyxl_sty_mergedZmerge_cellspathwriterZwksZxcell_b1Zxcell_a2r   r   r   test_write_cells_merge_styled7   s8    
     
r2   	iso_datesTFc                 C   s   d|i}t | f}td}t jt|dB t|fddi|"}|jj|ksTt	t
 | W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr3   zUse of **kwargs is deprecatedmatchenginer   )r-   r.   reescapeZassert_produces_warningFutureWarningr   bookr3   r   r   to_excel)r   r3   kwargsfmsgr1   r   r   r   test_kwargsY   s    
r?   c              
   C   sX   d|i}t | <}t|d|d"}|jj|ks4tt | W 5 Q R X W 5 Q R X d S )Nr3   r   )r6   engine_kwargs)r-   r.   r   r:   r3   r   r   r;   )r   r3   r@   r=   r1   r   r   r   test_engine_kwargs_writef   s
    rA   c                 C   s   t | l}tddg| tjttdd: t	|ddddid	}td
gj|dd W 5 Q R X W 5 Q R X W 5 Q R X d S )NhelloworldzAload_workbook() got an unexpected keyword argument 'apple_banana'r4   r   aZapple_bananafruitr6   moder@   ZgoodSheet2r)   )
r-   r.   r   r;   pytestraises	TypeErrorr7   r8   r   )r   r=   r1   r   r   r   !test_engine_kwargs_append_invalidq   s        rL   zdata_only, expected)Tr   )F=1+1c              
   C   sr   t | ^}tdg| t|ddd|id.}|jd d j|ksJtt j|dd	 W 5 Q R X W 5 Q R X d S )
NrM   r   rD   	data_onlyrF   ZSheet1B2rH   r)   )r-   r.   r   r;   r   r/   valuer   )r   rN   expectedr=   r1   r   r   r   #test_engine_kwargs_append_data_only   s       rR   zmode,expectedwbazrD   foobarc              
   C   s   t dgdgd}t| }t }d|jd _d|jd d _|d d|jd d _|	| t
|d|d	}|j|dd
d W 5 Q R X tt|L}dd |jD }||kstt|D ] \}	}
|j|	 d j|
kstqW 5 Q R X W 5 Q R X d S )Nr"   rT   columnsrU   r   A1rV   r   )r6   rG   Fr*   indexc                 S   s   g | ]
}|j qS r   )title).0sheetr   r   r   
<listcomp>   s     z*test_write_append_mode.<locals>.<listcomp>)r   r-   r.   r   ZWorkbookZ
worksheetsr\   rP   create_sheetsaver   r;   
contextlibclosingload_workbookr   	enumerate)r   rG   rQ   dfr=   wbr1   Zwb2resultr[   Z
cell_valuer   r   r   test_write_append_mode   s    

ri   z#if_sheet_exists,num_sheets,expectednew   applebananareplacer"   pearoverlayc           
   
   C   s
  t dddgi}t ddgi}t| }|j|dddd t|dd	|d
}|j|ddd W 5 Q R X tt|~}t	|j
|kst|j
d dksttj|ddd}	t|	d |kstt	|j
dkrtj||j
d dd}	t|	| W 5 Q R X W 5 Q R X d S )NrE   rl   rm   ro   r   rU   Fr6   r*   r[   rD   r6   rG   if_sheet_existsrZ   r   r6   rk   r"   )r   r-   r.   r;   r   rb   rc   r   rd   lenZ
sheetnamesr   pd
read_excellistassert_frame_equal)
r   rs   Z
num_sheetsrQ   df1df2r=   r1   rg   rh   r   r   r   !test_if_sheet_exists_append_modes   s(    
   r|   z%startrow, startcol, greeting, goodbyepooprC   goodbyepeoplerB   c              
   C   s   t ddgddgd}t dg}t| x}|j|ddd	d
 t|dddd }|j|d	d	|d |dd W 5 Q R X tj|ddd}	t ||d}
t|	|
 W 5 Q R X d S )NrB   rC   r~   r   )greetingr~   r}   r   ZpooFrq   rD   rp   rr   r"   )r[   headerstartrowstartcolr*   )r*   r6   )r   r-   r.   r;   r   rv   rw   ry   )r   r   r   r   r~   rz   r{   r=   r1   rh   rQ   r   r   r   %test_append_overlay_startrow_startcol   s,    

   	r   zif_sheet_exists,msg)invalidzf'invalid' is not valid for if_sheet_exists. Valid options are 'error', 'new', 'replace' and 'overlay'.)errorASheet 'foo' already exists and if_sheet_exists is set to 'error'.)Nr   c                 C   s   t ddgi}t| `}tjtt|d@ |j|ddd t	|dd|d}|j|dd	 W 5 Q R X W 5 Q R X W 5 Q R X d S )
NrE   ro   r4   rU   r   rt   rD   rr   r)   )
r   r-   r.   rI   rJ   
ValueErrorr7   r8   r;   r   )r   rs   r>   rf   r=   r1   r   r   r   test_if_sheet_exists_raises   s       r   c              	   C   sz   t | f}tdtdddi}tdtdddi}tj||gdd}|jdd 	 }|j
|d	d
 W 5 Q R X d S )NAr"   
   B   )Zaxisc                 S   s   d| dk rdnd S )Nz	color: %sr   ZredZblackr   )r&   r   r   r   <lambda>      z4test_to_excel_with_openpyxl_engine.<locals>.<lambda>r   rt   )r-   r.   r   npZlinspacerv   concatr   ZapplymapZhighlight_maxr;   )r   filenamerz   r{   rf   Zstyledr   r   r   "test_to_excel_with_openpyxl_engine  s    r   	read_onlyc              	   C   sZ   | dddd| }t tj||d}tj|dd}W 5 Q R X t|}t|| d S )NiodataexcelZtest1r   r   rt   )rb   rc   r   rd   rv   rw   r-   ry   )datapathr   r   r   rg   rh   rQ   r   r   r   test_read_workbook  s    
r   zheader, expected_datar      r            C      	   ZTitlez
Unnamed: 1z
Unnamed: 2)r   r   r   r   Zdimension_missingZdimension_smallZdimension_largec           
   	   C   sv   | ddd| | }|d kr.t j||d}n0ttj||d}t j|d|d}W 5 Q R X t|}	t||	 d S )Nr   r   r   )r   r   r   )r6   r   	rv   rw   rb   rc   r   rd   r   r-   ry   )
r   r   r   Zexpected_datar   r   r0   rh   rg   rQ   r   r   r   test_read_with_bad_dimension"  s    r   c              
   C   s   t  }t| }|j|dd t|dddd}|| W 5 Q R X t| }|d}|d|d }|d|d }|dkr|dkstW 5 Q R X d S )	Nr   rt   rD   rj   )rG   r6   rs   s   docProps/app.xmlr"   )	r   r-   r.   r;   r   r   
read_bytesfindr   )r   rf   r=   r1   r   firstsecondthirdr   r   r   test_append_mode_fileE  s        
r   c              	   C   s   | dddd| }|d kr(t |}n.ttj||d}t j|dd}W 5 Q R X ttjdd	d
dgtjddddgtjddddgd}t	
|| d S )Nr   r   r   Zempty_trailing_rowsr   r   rt   r   r"   rk   r   r   r   r   r   r   r   r   r   r   )rv   rw   rb   rc   r   rd   r   r   nanr-   ry   r   r   r   r0   rh   rg   rQ   r   r   r   "test_read_with_empty_trailing_rows[  s    r   c              	   C   sl   | dddd| }|d kr(t |}n.ttj||d}t j|dd}W 5 Q R X t }t|| d S )Nr   r   r   Zempty_with_blank_rowr   r   rt   r   r   r   r   r   test_read_empty_with_blank_rowq  s    r   c              
   C   s`   t | L}t|dd4}|ji ks(t|jdd}|jd|iksHtW 5 Q R X W 5 Q R X d S )Nr   rt   Z	test_namer   )r-   r.   r   r/   r   r:   r`   )r   r=   r1   r^   r   r   r   test_book_and_sheets_consistent  s
    r   c                 C   sB   | dddd| }t |}ttdddgd}t|| d S )	Nr   r   r   Zints_spelled_with_decimalsrk      r"   rW   )rv   rw   r   ranger-   ry   r   r   r0   rh   rQ   r   r   r   test_ints_spelled_with_decimals  s    
r   c                 C   s   | dddd| }t j|dddgdddgd}ttjd	d	d	gd	tjtjtjggt jd
dddgt jddgd}t|| d S )Nr   r   r   Zmultiindex_no_index_namesr   r"   rk   )Z	index_colr   x)XYrY   )r   r   r,   )XXYYr+   )r   r   rO   )r   ZAAZAAA)r   BBZBBB)rX   r[   )	rv   rw   r   r   r   Z
MultiIndexfrom_tuplesr-   ry   r   r   r   r   *test_read_multiindex_header_no_index_names  s    
r   ))rb   pathlibr   r7   Znumpyr   rI   r(   rv   r   Zpandas._testingZ_testingr-   Zpandas.io.excelr   r   Zimportorskipr   markZparametrizeZ
pytestmarkr    r2   r?   rA   rL   rR   ri   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   
!"



 


	


  

	