o
    5co                  
   @   sj  d dl Z d dlZd dlmZ d dlZd dlZd dlmZm	Z	m
Z
mZmZ d dlmZ edZd dlmZ d dlmZmZmZmZ ejdd Zejd	d
 Zejdd Zejdd Zejdd Zejdd Zej !ddddddddddgfdddddddddgfgdd Z"ej !ddddddddddgfdddddddddgfgdd  Z#d!d" Z$ej !d#g d$d%d& Z%ej !d'd(d)gd*d+ Z&ej !d'd(d,gd-d. Z'd/d0 Z(d1d2 Z)ej !d3ddgej !d4ddgej !d5ddgd6d7 Z*d8d9 Z+d:d; Z,d<d= Z-ej !d>d?d@d?gd@ggdAdB Z.ej !d>d?d@d?gd@ggej !dCddgdDdE Z/ej !dFdGdHgej !dIdJdKgdLdM Z0ej !dFdHdGgej !dIdJdKgdNdO Z1dPdQ Z2G dRdS dSZ3dTdU Z4dVdW Z5ej !dXg dYdZd[ Z6d\d] Z7d^d_ Z8d`da Z9dbdc Z:ddde Z;dfdg Z<dhdi Z=ej !djg dkdldm Z>dS )n    N)dedent)	DataFrame
IndexSlice
MultiIndexSeriesoption_contextjinja2Styler)_get_level_lengths_get_trimming_maximumsmaybe_convert_css_to_tuplesnon_reducing_slicec                   C   s<   t ddgddggtdgddggtdgd	d
ggtdS )N            i0i1_ai1_bc0c1_ac1_b)indexcolumnsdtype)r   r   from_productint r   r   ^/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/io/formats/style/test_style.pymi_df   s   r    c                 C   s   t | ddS )Nr   uuid_lenr	   )r    r   r   r   	mi_styler'   s   r#   c                 C   sd  | j dd} i | jddd| _d| _d| _| d | d	d
dg | jdd | jdgddd | jdd | jdgddd | d | j	dg}t
dg|jg|_| |j | jddd | jddd | jddd | jd d | jdd dd | jdd dd | td	d gd	d!gg| j| jd" | td#d$gd#d%gg| j| jd" | S )&NT)deepcopyROWCOL)rowcol   abcdecaptaa:v;selectorpropsr   axis)r   r   r2   namesr   )r   r   zclass="box"mean MISSINGr   )na_rep	precisionr   r   )r9   r2   r   r   c                 S      dS )Nzcolor: white;r   xr   r   r   <lambda>A       z mi_styler_comp.<locals>.<lambda>c                 S   r:   )Nzcolor: black;r   r;   r   r   r   r=   B   r>   bcr   r   a2b2c2)_copycssr"   uuidset_captionset_table_styleshideset_table_attributesdataaggr   r   r   concatstyleformatformat_indexhighlight_maxapplymap_indexset_td_classesr   r   set_tooltips)r#   otherr   r   r   mi_styler_comp,   sB   

rW   c                   C   r:   )N&nbsp;r   r   r   r   r   blank_valueR   s   rY   c                  C   s*   t jd tddgt jdd} | S N   r   r   r   AB)nprandomseedr   randndfr   r   r   rd   W   s   rd   c                 C   s.   t jd tddgt jdd} t| S rZ   )r_   r`   ra   r   rb   r
   rc   r   r   r   styler^   s   re   zsparse_columns, exp_colsTzcolspan="2"r   )
is_visible
attributesvalueFr6   c                 C   s   dddd}dddd}|  d|}|d  |d d d  ks$J |d	  |d d d
  ks6J | |d d	 d  ksFJ | |d d	 d
  ksVJ d S )NTr6   r   rf   rg   display_valuer   r   headr   r   r   
_translateitems)r#   sparse_columnsexp_cols	exp_l1_c0	exp_l1_c1ctxr   r   r   test_mi_styler_sparsify_columnse      $$ $rt   zsparse_index, exp_rowsrowspan="2"r   c                 C   s   dddd}dddd}|  |d}|d  |d d d  ks$J |d  |d d d  ks6J | |d d d  ksFJ | |d d d  ksVJ d S )	NTr6   r   ri   r   r   bodyr   rl   )r#   sparse_indexexp_rows	exp_l1_r0	exp_l1_r1rs   r   r   r   test_mi_styler_sparsify_index   ru   r|   c                 C   s   t dd |  }W d    n1 sw   Y  t dd |  }W d    n1 s-w   Y  ||ks8J t dd |  }W d    n1 sLw   Y  t dd |  }W d    n1 sew   Y  ||kspJ d S )Nzstyler.sparse.indexFTzstyler.sparse.columns)r   to_html)r#   html1html2r   r   r   test_mi_styler_sparsify_options   s   



r   z3rn, cn, max_els, max_rows, max_cols, exp_rn, exp_cn))d   r   r   NN      )  r     NN   r   )r   r     NNr   }   )r   r   r   
   Nr   r   )r   r   r   Nr)   r   r)   )r   r   i  2   r      r   c                 C   s0   t | ||||dd\} }| |f||fksJ d S )Ng      ?)scaling_factor)r   )rncnmax_elsmax_rowsmax_colsexp_rnexp_cnr   r   r   test_trimming_maximum   s   
r   zoption, val)styler.render.max_elementsr   )styler.render.max_rowsr   c                 C   s   t tddd}t| | |jdd}W d    n1 s"w   Y  t|d d dks3J t|d d	ks=J t|d d dksIJ d S )
Nx   <   r   Trk   r   r   rw   r   r   r_   arangereshaper   rO   rm   lenoptionvalrd   rs   r   r   r   test_render_trimming_rows      	r   )styler.render.max_columnsr   c                 C   s   t tddd}t| | |jdd}W d    n1 s"w   Y  t|d d dks3J t|d dks=J t|d d dksIJ d S )	N   r   r   Trk   r   r   rw   r   r   r   r   r   test_render_trimming_cols   r   r   c                  C   s  t ddgg dg} ttddd| | d}tdd |jd	d	}W d    n1 s0w   Y  t	|d
 d dksAJ ddi
 |d
 d d 
 ksSJ ddi
 |d
 d d 
 kseJ ddi
 |d
 d d 
 kswJ t	|d
 dksJ d S )Nr   r   r   r   r   $   r   r   r   r   r   Trw   r   r)   rg   rv   classzdata row0 col_trimzdata row_trim col_trimr   )r   r   r   r_   r   r   r   rO   rm   r   rn   midxrd   rs   r   r   r   test_render_trimming_mi   s   $$$r   c                  C   s@   t tjdgddggd dgdd} td}|| j v sJ d S )Nr]   r   r   oner4   r   z    >
      <thead>
        <tr>
          <th class="index_name level0" >&nbsp;</th>
          <th class="index_name level1" >one</th>
        </tr>
      </thead>
    )r   r   r   r   rO   r}   )rd   expectedr   r   r   test_render_empty_mi   s
   "r   comprehensiverenderr$   c                    s.  | r|n|}d|_ |rt|nt|}||usJ |r!|  g d |sF fdd|jD D ]}tt||tt||ksCJ q1d S g dD ]}tt||tt||ks^J qL fdd|jD D ]*}t||d u rtt||tt||ksJ qjtt||tt||ksJ qjd S )Nr)   )	r8   r9   cellstyle_mapcellstyle_map_columnscellstyle_map_indextemplate_latextemplate_htmltemplate_html_styletemplate_html_tablec                    s    g | ]}t |s| vr|qS r   callable.0r,   exclr   r   
<listcomp>       ztest_copy.<locals>.<listcomp>)rL   r   r   r"   rG   captioncell_idshide_index_hide_columns_hide_index_nameshide_column_namestable_attributesc                    s(   g | ]}t |s| vr|vr|qS r   r   r   r   shallowr   r   r   2  s    )r"   copyr$   r}   __dict__idgetattr)r   r   r$   r#   rW   re   s2attrr   r   r   	test_copy  s*   ""
""r   c                    s   | }|   t|j|jd}g d  fdd|jD D ].}t||t||k}t|dr:t|dkr:t|r9J qt|drFt|dkrFq|rJJ q|	  dd |jD D ]}t||t||k}t|drnt|srJ |srJ qWd S )NrG   )rL   r   r   rG   r"   r   r   r   r   r9   r8   r   r   r   r   c                    s    g | ]}t |s| v s|qS r   r   r   r   r   r   r   X  r   ztest_clear.<locals>.<listcomp>__iter__r   c                 S   s   g | ]}t |s|qS r   r   r   r   r   r   r   c      )
_computer
   rL   rG   r   r   hasattrr   allclear)rW   re   
clean_copyr   resr   r   r   
test_clear=  s"   
r   c                 C   s   g d}|D ]!}t ||t | |k}t|dr#t|dkr#t|r'J |r'J q|  }||}|D ]!}t ||t | |k}t|drPt|dkrPt|sTJ |sTJ q3|  d S )N)_todor   r   r   r   r   table_stylesrF   r   r   )r   r   r   r   exportuser}   )rW   r#   	exp_attrsr   checkr   usedr   r   r   test_exporth  s&   


*r   c                 C   s   d}t jt|d | jdddd W d    n1 sw   Y  d}t jt|d | jddd	d
d W d    d S 1 s@w   Y  d S )Nz4`subset` and `level` cannot be passed simultaneouslymatchr   	somethingzsomething else)r2   subsetlevelz4`level` must be of type `int`, `str` or list of suchr   r   )badtyper2   r   )pytestraises
ValueErrorrJ   )r#   msgr   r   r   test_hide_raises  s   "r   r   r   r   c                 C   s  ddgddg| j _| j_| jd|ddd}t|d d d	ks$J t|d d
 d	ks0J t|d d dks<J |d d d d sHJ |d d d
 d rTJ |d d d d s`J |d d d
 d rlJ |d d
 d d sxJ |d d
 d
 d rJ d S )Nzeror   r   r   FTrk   r   r   r   r   r   rf   rw   )r   r4   r   rJ   rm   r   )r#   r   rs   r   r   r   test_hide_index_level  s   r   r4   c                 C   sR   ddg| j _|rddg| j_| jd|ddd}t|d |r"dnd	ks'J d S )
Nr   r   r   r   TFrk   r   r   )r   r4   r   rJ   rm   r   )r#   r   r4   rs   r   r   r   test_hide_columns_level  s
    r   methodapplymapapplyr2   r   r   c                 C   s   t ddgddgdddgd}dd d	d d
}t|j|  d||  |d}t|jdks0J tt|d| dks>J |  ddgi}t|d| |ksSJ d S )Nr   r   r\   CDr   c                 S      dd | D S )Nc                 S   s$   g | ]}d |v sd|v rdndqS )r]   r   	attr: valr6   r   r   vr   r   r   r     s   $ z;test_apply_map_header.<locals>.<lambda>.<locals>.<listcomp>r   sr   r   r   r=         z'test_apply_map_header.<locals>.<lambda>c                 S   s   d| v sd| v r
dS dS )Nr]   r   r   r6   r   r   r   r   r   r=     r   r   r   _indexr1   ctx_r   r   r   r   )r   r   rO   r   r   r   )r   r2   rd   funcresultr   r   r   r   test_apply_map_header  s   r  c                 C   sX   dd dd d}t | | d|| |d }ddgi}t |d	| |ks*J d S )
Nc                 S   r   )Nc                 S   s   g | ]
}d |v r
dndqS )r?   
attr: val;r6   r   r   r   r   r   r         z>test_apply_map_header_mi.<locals>.<lambda>.<locals>.<listcomp>r   r   r   r   r   r=     r   z*test_apply_map_header_mi.<locals>.<lambda>c                 S   s   d| v rdS dS )Nr?   r   r6   r   r   r   r   r   r=         r  r  r1   r   r   r  r  )r   r   )r#   r   r2   r  r  r   r   r   r   test_apply_map_header_mi  s    
r  c                 C   sJ   t jtdd | jdd dd  W d    d S 1 sw   Y  d S )Nz+No axis named bad for object type DataFramer   c                 S   r:   )Nr	  r   r   r   r   r   r=     r>   z.test_apply_map_header_raises.<locals>.<lambda>r   r1   )r   r   r   rS   r   r#   r   r   r   test_apply_map_header_raises  s   "r  c                   @   s  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	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ejd!d"d#gd$d% Zejd&d'd(gejd)d'd(gd*d+ Zejd,ed-d- ed-d-d.gf ed#gd-d-f ed#gd.gf ed-d/d.d0gf gejd!d"d#gd1d2 Zejd,ed-d- ed-d-d.gf ed#gd-d-f ed#gd.gf ed-d/d.d0gf gd3d4 Zejd,ed-d-ed5 f ed-d-ed-d-d.f f ed-d-ed-d-d.d6gf f eed7 d-d-f eed-d-d#f d-d-f eed-d-d#d8gf d-d-f ed-d-d5f ed7d-d-f gd9d: Zd;d< Zejd=g d>d?d@ ZdAdB ZdCdD ZdEdF Z dGdH Z!dIdJ Z"dKdL Z#dMdN Z$dOdP Z%dQdR Z&dSdT Z'dUdV Z(dWdX Z)dYdZ Z*d[d\ Z+d]d^ Z,d_d` Z-dadb Z.ejd!d&d)gdcdd Z/dedf Z0dgdh Z1didj Z2dkdl Z3dmdn Z4dodp Z5dqdr Z6dsdt Z7dudv Z8dwdx Z9dydz Z:ejd{e;d|d}ge<j=d-ggd.d0gd~dgde;d}ggd0gd~gde;d}dggd0d6gd~gdgdd Z>dd Z?dd Z@dd ZAejdg ddd ZBejdg ddd ZCejded-d-d-d-f ed-d-d#f ed#d-d-f ed#gd#gf ed#d#gf ed#gd#f ed# ed eDd-d-d-d"d#ge<Ed"d#geFd"d#ggdd ZGejdeHeFe<jEgdd ZIdd ZJejd,ed-d-d-d-f ed-d-ed~g f ed-d-ed~gdgf f ed-d-ed~dd-d-f f ed-d-ed~d-d-df f ed-d-ed-d-ddf f ed-d-ed~ddgd-d-f f ed-d-ed~g dd-d-f f ed-d-ed~g ddf f eedg d-d-f eedgdgf d-d-f eeddd-d-f d-d-f eedd-d-df d-d-f eed-d-ddf d-d-f eed-d-dddgf d-d-f eed-d-dg df d-d-f eeddg df d-d-f eed-d-ddf ed~dd-d-f f gdd ZKd-S )
TestStylerc                 C   sD   d}t jt|d tg d W d    d S 1 sw   Y  d S )Nz&``data`` must be a Series or DataFramer   r   )r   r   	TypeErrorr
   selfr   r   r   r   test_init_non_pandas  s   "zTestStyler.test_init_non_pandasc                 C   s$   t tddg}|jjdksJ d S )Nr   r   )r
   r   rL   ndim)r  r  r   r   r   test_init_series  s   zTestStyler.test_init_seriesc                 C   s   |   d S N)_repr_html_r  re   r   r   r   test_repr_html_ok  s   zTestStyler.test_repr_html_okc                 C   sP   d|  vsJ tdd d|  v sJ W d    d S 1 s!w   Y  d S )Ntex2jax_ignorezstyler.html.mathjaxF)r  r   r  r   r   r   test_repr_html_mathjax  s   "z!TestStyler.test_repr_html_mathjaxc                 C   s6   | tdddgi dgdgd}|j|ksJ d S )Nr]   
color: redcolor: bluecolorredr   bluer  r   r   )_update_ctxr   rs   )r  re   r   r   r   r   test_update_ctx  s   zTestStyler.test_update_ctxc                 C   s>   t dddgi}|| ddgddgd}|j|ksJ d S )	Nr]   zcolor: red; foo: barzcolor:blue ; foo: baz;r  foobarr"  )r)  bazr$  )r   r&  rs   )r  re   attrsr   r   r   r   /test_update_ctx_flatten_multi_and_trailing_semi  s   
z:TestStyler.test_update_ctx_flatten_multi_and_trailing_semic                 C   6   t dddgi}dd }t|dd|}|  d S )Nr]   r   r   c                 S      t ddg| jdS )Nr  r  namer   r1  r;   r   r   r   r=         z(TestStyler.test_render.<locals>.<lambda>ABr   r   r
   r   r}   r  rd   rO   r   r   r   r   test_render  s   zTestStyler.test_renderc                 C   s8   t |ddjdd dgd}|  d| v sJ d S )Nr   r!   c                 S   r:   Ncolor: red;r   r;   r   r   r   r=     r>   z1TestStyler.test_multiple_render.<locals>.<lambda>r]   r   zO<style type="text/css">
#T__row0_col0, #T__row1_col0 {
  color: red;
}
</style>)r
   r   r}   r  rd   r   r   r   r   test_multiple_render  s   
zTestStyler.test_multiple_renderc                 C   s>   t  }t|}|  t dgdj  t dgdj  d S )Nr,   r   r   )r   r
   r}   rO   )r  empty_dfesr   r   r   test_render_empty_dfs  s
   z TestStyler.test_render_empty_dfsc                 C   r.  )Nr]   r   r   c                 S   r/  )Nzcolor: red; border: 1pxzcolor: blue; border: 2pxr0  r2  r;   r   r   r   r=     s    
z/TestStyler.test_render_double.<locals>.<lambda>r4  r   r5  r6  r   r   r   test_render_double  s   zTestStyler.test_render_doublec                 C   s   t dddgi}|jjddd j}ddg}||d	}| | ks&J t| | D ]\}}t|t|ks=J q/d S )
Nr]   r   r   white10px)r   sizer   rB  )rD  rC  r$  )	r   rO   set_propertiesr   rs   keyszipvaluessorted)r  rd   r  r   r   v1v2r   r   r   test_set_properties  s   
zTestStyler.test_set_propertiesc                 C   sD   t dddgi}|jjtd dd j}ddgi}||ks J d S )	Nr]   r   r   )r   r]   rB  )r   r   r  rE  )r   rO   rF  r   r   rs   r  rd   r  r   r   r   r   test_set_properties_subset  s   
z%TestStyler.test_set_properties_subsetc                 C   sr   t ddgddgddgd}|jdd}t|d	 dksJ d
d|d|d}| |d	 d d  ks7J d S )Nr   r   r   r   r)   r   r]   r^   r   Trk   zblank level0thr   r   rh   rf   rj   r   )r   rO   rm   r   rn   )r  rY   rd   r  r   r   r   r   $test_empty_index_name_doesnt_display)  s   $z/TestStyler.test_empty_index_name_doesnt_displayc                 C   sd   t ddgddgddgd}|djd	d	}d
ddd	dd}| |d d d  ks0J d S )Nr   r   r   r   r)   r   rP  r]   Tindex_name level0rQ  rR  rk   r   )r   	set_indexrO   rm   rn   rN  r   r   r   test_index_name7  s   $zTestStyler.test_index_namec                 C   s"   t dg di}|jdd d S )Nr   r   T)r   rO   rm   )r  rd   r   r   r   test_numeric_columnsD  s   zTestStyler.test_numeric_columnsc                 C   s   t ddgddgd}dd }|jj|dd}t|jdks J t|jdks)J |  dgdgdgdgd}|j|ks?J |jj|dd}d	gdgd	gdgd}|  |j|ks]J |j|}|  |j|ksnJ d S )
Nr   r   r\   c                    s    fdd D S )Nc                    s   g | ]	}d     qS )zval: )maxr   r;   r   r   r   L  s    z@TestStyler.test_apply_axis.<locals>.<lambda>.<locals>.<listcomp>r   r;   r   r;   r   r=   L  r3  z,TestStyler.test_apply_axis.<locals>.<lambda>r1   )r   1)r  r   r   r%  r  )r   0)r   rO   r   r   r   rs   r   )r  rd   fr  r   r   r   r   test_apply_axisJ  s.   zTestStyler.test_apply_axisr2   r   r   c                 C   s   t ddgddggddgddgd}dd	 }|jj||d
 j}|d dgks)J |d| |f dgks6J dd	 }|jj||d
 j}|d dgksNJ |d dgksWJ |d| |f dgksdJ ||d| f dgksqJ d S )Nr   r   r   r   XYrA   c                 S   s   t dgdgdS )Nr9  r_  r   r   r   r   r   r   r=   l  r  z5TestStyler.test_apply_series_return.<locals>.<lambda>r1   r  r  c                 S      t ddgddgdS )Nr9  zcolor: blue;r_  r^  r   r`  r   r   r   r   r=   r      r  r"  r   rO   r   r   rs   )r  r2   rd   r  r  r   r   r   test_apply_series_returnf  s   "z#TestStyler.test_apply_series_returnr   FTr   c                    s   t ddgddggddgddgd}|rddgndg}|r ddgndg}t d||d |jj fd	d
d d j}|d dgksBJ |d dgk|u sMJ |d dgk|u sXJ |d dgk|oa|u seJ d S )Nr   r   r   r   r^  r_  rA   r9  c                    s    S r  r   r;   	df_stylesr   r   r=     r>   z8TestStyler.test_apply_dataframe_return.<locals>.<lambda>r1   r  r  rZ  r%  r  rc  )r  r   r   rd   idxscolsr  r   re  r   test_apply_dataframe_returny  s   "z&TestStyler.test_apply_dataframe_returnslice_Nr]   r   r^   c                    sN   ddd} j j||dd j} fddt jD }||ks%J d S )	Nr*  c                 S   s   t d| | j| jdS )Ncolor: )r   r1  )r   r   r1  )r<   r)  r   r   r   h  s   z'TestStyler.test_apply_subset.<locals>.hr+  )r2   r   r)  c                    P   i | ]$\}}t  jD ]\}}| j jv r| j jv r||fd gqqS )r   r+  	enumerater   locr   r   rr'   r@   r(   rd   rj  r   r   
<dictcomp>      
z0TestStyler.test_apply_subset.<locals>.<dictcomp>)r*  )rO   r   r   rs   rp  r   )r  rj  r2   rd   rl  r  r   r   rt  r   test_apply_subset  s   
zTestStyler.test_apply_subsetc                    sD    j jdd d j} fddt jD }||ks J d S )Nc                 S   r:   )Nz
color:baz;r   r;   r   r   r   r=     r>   z1TestStyler.test_applymap_subset.<locals>.<lambda>r:  c                    rm  rn  ro  rr  rt  r   r   ru    rv  z3TestStyler.test_applymap_subset.<locals>.<dictcomp>)rO   r   r   rs   rp  r   )r  rj  rd   r  r   r   rt  r   test_applymap_subset  s
   zTestStyler.test_applymap_subset)r<   r]   r   )r,   r   r   c                 C   s  d }d}t |d trt |d d trd|d d v rt}nt |d tr9t |d d tr9d|d d v r9t}tddgdd	gg}td
dgddgg}ttj	dd||d}t
j||d |jjdd |d  W d    d S 1 szw   Y  d S )N9indexing on a MultiIndex with a nested sequence of labelsr   r   r   r   r,   r?   r   r<   yr]   r^   r   r   r   c                 S   r:   r8  r   r;   r   r   r   r=     r>   z<TestStyler.test_applymap_subset_multiindex.<locals>.<lambda>r:  )
isinstancetuplelistFutureWarningr   r   r   r_   r`   randtmassert_produces_warningrO   r   r}   )r  rj  warnr   idxr(   rd   r   r   r   test_applymap_subset_multiindex  s,   "z*TestStyler.test_applymap_subset_multiindexc                 C   s   t g dg dg}tddgddgg|ddgd}tg d	g d
gddg|d}td d td d ddf f }dd }|j|  |jj||d d S )N)r   r   r   r   r   r   r   r   r,   r?   %#r6   )levelscodesr4   )r   rz  r   r   )rz  r   r   r   helloworldrA   c                 S   s   | dk rdnd}d| S )Nr   r!  blackrk  r   )r   r   r   r   r   color_negative_red  s   
zKTestStyler.test_applymap_subset_multiindex_code.<locals>.color_negative_redr:  )r_   arrayr   r   r   rq  rO   r   )r  r  r   rd   
pct_subsetr  r   r   r   $test_applymap_subset_multiindex_code  s    
z/TestStyler.test_applymap_subset_multiindex_code	stylefunc)background_gradientr*  text_gradientc                 C   sL   t ddgddggddgd}t|j| }|  t|jh dks$J d S )	Nr   r   r   r   FTr=  >   r  rZ  r  r%  )r   r   rO   r   setrs   )r  r  rd   styledr   r   r   test_subset_for_boolean_cols  s   z'TestStyler.test_subset_for_boolean_colsc                 C   sb   t dddgi}|j}dgdgd|_|ddd }dgd	gd
dgdgd
g}||ks/J d S )Nr]   r   r   r  )r6   r6   r$  T	cellstyle	row0_col0r0   	selectors	row1_col0r   rO   rs   rm   r  rd   r   r  r   r   r   r   
test_empty  s   zTestStyler.test_emptyc                 C   sX   t dddgi}|j}dgdgd|_|ddd }dgdd	gd
g}||ks*J d S )Nr]   r   r   r  r$  Tr  r  r  r  r  r  r   r   r   test_duplicate	  s   zTestStyler.test_duplicatec                 C   sl   t d d gddggddgd}t|dddd}|d	 d
 d d dks&J |d	 d
 d d dks4J d S )Ng?g333333?r]   r^   r=  NA)r8   Trw   r   r   rj   r   )r   r
   rm   r  rd   rs   r   r   r   test_init_with_na_rep  s    z TestStyler.test_init_with_na_repc                 C   sZ   t |dd}| }td|v d|v gsJ |j}|d}||u s$J |jdks+J d S )Nr)  )r   r   r+  )r
   r}   r   rO   rH   r   r  rd   re   r  r   r   r   test_caption  s   
zTestStyler.test_captionc                 C   sN   t |dd}| }d|v sJ |j}|d}||u sJ |jdks%J d S )Nabc123r   aaa)r
   r}   rO   set_uuidrG   r  r   r   r   	test_uuid&  s   
zTestStyler.test_uuidc                 C   sX   t g dg dd}|jjdd}d|v sJ td|}t|jt|ks*J d S )N)r   r   r)   r   )r   r   r      r,   r?   testr   z
id="(.*?)")	r   rO   r}   refindallr_   uniquerD  r   )r  rd   r  idsr   r   r   test_unique_id0  s
   zTestStyler.test_unique_idc                 C   s   ddgdg}t ||d}d|  }d|v sJ |j}||}||u s*J |j|ks1J dddg}|j|}d|  }d|v sLJ d S )NrQ  r(  r.   )r    zth { foo: bar; }zfoo:bar;)r
   joinr}   splitrO   rI   r   )r  rd   rO   re   r  r   r   r   test_table_styles8  s   
zTestStyler.test_table_stylesc                 C   sV   |j ddddddgddd }|dd	gdd
d	gdddgdgks)J d S )Nth,tdz
color:red;r.   trzcolor:green;Tr   rQ  r  td)r   greenrO   rI   rm   r  r   r   r   test_table_styles_multipleI  s   



z%TestStyler.test_table_styles_multiplec                 C   sN   |j dddgdgiddd }ddgdddgdg}||ks%J d S )	Nr^   r  )zborder-leftz2px solid blackr.   Tr   zth.col1ztd.col1r  rN  r   r   r   )test_table_styles_dict_multiple_selectorsV  s   


	
z4TestStyler.test_table_styles_dict_multiple_selectorsc                 C   s@   ddg}t d|ksJ t d|ksJ g }t d|ksJ d S )Nr  )r@   zd ez
a:b;c:d e;za: b ;c:  d e  r6   )r   )r  r   r   r   r    test_maybe_convert_css_to_tuplesg  s
   z+TestStyler.test_maybe_convert_css_to_tuplesc                 C   s@   d}t jt|d td W d    d S 1 sw   Y  d S )Nz6Styles supplied as string must follow CSS rule formatsr   err)r   r   r   r   r  r   r   r   $test_maybe_convert_css_to_tuples_errn  s   
"z/TestStyler.test_maybe_convert_css_to_tuples_errc                 C   sD   d}t ||d}| }d|v sJ |j| }d|v s J d S )Nzclass="foo" data-bar)r   )r
   r}   rO   rK   )r  rd   rg   re   r  r   r   r   test_table_attributess  s   z TestStyler.test_table_attributesc                 C   sD   dd }t ddgddggjj|d d j}|d d	gks J d S )
Nc                 S   s$   t t| |  kdd| j| jdS )Nr  r6   rA   )r   r_   whererX  r   r   r;   r   r   r   r\  }  s
   z%TestStyler.test_apply_none.<locals>.fr   r   r   r   r1   r  r  rc  )r  r\  r  r   r   r   test_apply_none|  s   &zTestStyler.test_apply_nonec                 C   sF   |j  }|ddksJ |j   }|dt|jks!J d S )Nr  r   )rO   r}   countrR   r   r   )r  rd   r  r   r   r   	test_trim  s   
zTestStyler.test_trimc                 C   sd   dd }dd }|}| |j |dd   | }|j}|| |j|jks,J |  d S )Nc                 S   s   | dkrdS dS )Nr   r  r  r   r;   r   r   r   r=     r  z(TestStyler.test_export.<locals>.<lambda>c                 S   s   | dkr	d| S d| S )Nr   rk  r   )r<   zr   r   r   r=     r
  r?   )r  )r   rR   r   r   rO   r   r   r}   )r  rd   re   r\  gstyle1r  style2r   r   r   r     s   
zTestStyler.test_exportc                 C   s  t ddgddggddgddgd	}d
}tjt|d |jdd  W d    n1 s-w   Y  d}tjt|dd |jdd  W d    n1 sQw   Y  tjt|dd |jdd  W d    n1 ssw   Y  tjt|dd |jjdd dd W d    n1 sw   Y  tjt|dd |jjdd dd W d    n1 sw   Y  tjt|dd |jjdd dd W d    n1 sw   Y  d}tjt|d |jjdd d d W d    d S 1 sw   Y  d S )Nr   r   r   r   r]   r^   r^  r_  rA   z4resulted in the apply method collapsing to a Series.r   c                 S   r:   )Nr<   r   r;   r   r   r   r=     r>   z1TestStyler.test_bad_apply_shape.<locals>.<lambda>zcreated invalid {} labelsr   c                 S   s   dgS Nr6   r   r;   r   r   r   r=     s    c                 S      g dS )N)r6   r6   r6   r6   r   r;   r   r   r   r=         c                 S   ra  )Nr-   r6   r]   r   r   r`  r;   r   r   r   r=     rb  r   r1   r   c                 S   r  )N)r6   r6   r6   r   r;   r   r   r   r=     r  c                 S   ra  )Nr-   r6   r^  Zr   r`  r;   r   r   r   r=     rb  z!returned ndarray with wrong shapec                 S   s   t dgdggS r  )r_   r  r;   r   r   r   r=     r3  )r   r   r   r   rO   _applyrP   )r  rd   r   r   r   r   test_bad_apply_shape  s2   "$zTestStyler.test_bad_apply_shapec                 C   sd   dd }t ddgddgg}d}tjt|d |jj|d d	 W d    d S 1 s+w   Y  d S )
Nc                 S   r:   r  r   r;   r   r   r   r\    s   z+TestStyler.test_apply_bad_return.<locals>.fr   r   r   r   zOmust return a DataFrame or ndarray when passed to `Styler.apply` with axis=Noner   r1   )r   r   r   r  rO   r  )r  r\  rd   r   r   r   r   test_apply_bad_return  s   "z TestStyler.test_apply_bad_returnc                    sp    fdd}t ddgddgg}d  d}tjt|d	 |jj|d d
 W d    d S 1 s1w   Y  d S )Nc                    s   t di  ddgiS )Nr   labelsr   )r   r;   r1   r   r   r\       z+TestStyler.test_apply_bad_labels.<locals>.fr   r   r   r   zcreated invalid z labels.r   r1   )r   r   r   r   rO   r  )r  r2   r\  rd   r   r   r1   r   test_apply_bad_labels  s   "z TestStyler.test_apply_bad_labelsc                 C   s   t ddgg dg}ddddddddd}t|ddd	}t|| ddddddddddddd
}t|ddd	}t|| d S )Nr,   r?   r   r   r   r   r   )r  r   r   r%  r  r   r   r   r   r   r   r   r)   Tr   sparsify	max_index)r  rZ  r   r   r  r   r   r   r)   r%  r  r  r  r  r  F)r   r   r   r  assert_dict_equalr  r   r   r  r   r   r   test_get_level_lengths  s6   
z!TestStyler.test_get_level_lengthsc              	   C   sx   t g dg dg}dddddddd}t|ddd}t|| ddddddddd	}t|d
dd}t|| d S )N)r   r   r   r   )r,   r?   r?   dr   r   )r  r  r  r%  r  r  r  Tr   r  )r  rZ  r  r  r%  r  r  r  Fr   from_arraysr   r  r  r  r   r   r    test_get_level_lengths_un_sorted  s,   	
z+TestStyler.test_get_level_lengths_un_sortedc                 C   s   t dddgitjddgddggddgdd	}|jd
d
}|d d }ddd
dddd
dd|d
dg}t|D ]\}}| ||  ksIJ q9d S )Nr]   r   r   r,   r   idx_level_0idx_level_1r   r   Trk   rT  r   rj   rf   zindex_name level1z
blank col0)r   r   r  rO   rm   rp  rn   )r  rY   rd   r  rk   r   iexpected_dictr   r   r   test_mi_sparse_index_names  s0   
z%TestStyler.test_mi_sparse_index_namesc           	      C   s   t tdddtjg dg dgddgdtjg dg d	gd
dgdd}t|dddd}dD ]/}|d | }d|ddd| d| ddg}t|D ]\}}|	 || 	 ksbJ qRq4d S )N   r   )r,   r,   r?   r,   )r   r   r   r   r  r  r   )C1r  C2r  )r   r   r   r   colnam_0colnam_1rA   F)r   TrZ  rk   blankr  zindex_name levelcolnam_)
r   r_   r   r   r   r  r
   rm   rp  rn   )	r  rY   rd   r  r   rk   r   r  r  r   r   r   test_mi_sparse_column_names#  s4   
z&TestStyler.test_mi_sparse_column_namesc                 C   s^   |j dddd}t|d dksJ d|j_|jj dddd}t|d dks-J d S )Nr   r1   Trk   r   	some_namer   )rJ   rm   r   r   r1  rO   )r  rd   re   rs   r   r   r   test_hide_column_headersA  s
   z#TestStyler.test_hide_column_headersc                 C   s@  |j dd}|d d d d sJ |d d d d sJ |j jdddd}|d d d d r6J |d d d d rBJ |dj dd}|d d d d sXJ t|d d	ksbJ |d d d d snJ |dj jdddd}|d d d d rJ t|d d
ksJ |d d d d rJ d S )NTrw   r   rf   rk   r   r1   r]   r   r   )rO   rm   rJ   rU  r   )r  rd   rs   ctx2ctx3ctx4r   r   r   test_hide_single_indexJ  s   z!TestStyler.test_hide_single_indexc                 C   s  t ddgddgdtjddgddggddgdd	}|jd
d
}|d d d d s-J |d d d d s9J t|d d dksEJ |jjddd
d
}|d d d d r\J |d d d d rhJ t|d d dkstJ |d d d d rJ d S )Nr   r   r\   r,   r   r  r  r   r   Trw   rf   rk   r   r   r1   r   )r   r   r  rO   rm   r   rJ   )r  rd   ctx1r  r   r   r   test_hide_multiindex_  s   zTestStyler.test_hide_multiindexc                 C   s  |j dd}|d d d d sJ |d d d d dks!J |d d d d s-J |d d d d d	ks;J |d
 d d d sGJ |d
 d d d sSJ |j jddddd}|d d d d rkJ |d
 d d d rwJ |d
 d d d sJ |j jdd	gdddd}|d d d d rJ |d d d d rJ |d
 d d d rJ |d
 d d d rJ d S )NTrk   r   r   rf   rj   r]   r   r^   rw   r   r1   )rO   rm   rJ   r  r   r   r   test_hide_columns_single_levelv  s    z)TestStyler.test_hide_columns_single_levelc                 C   s  t jddgddggddgd}t jddgddggdd	gd}tdd
gddgg||d}|jdd}|d d d
 d s>J |d d d
 d sJJ |d d d d dksXJ |d d d d sdJ |d d d
 d spJ |d d d
 d dks~J |d d d d sJ |d d d d dksJ |jjddddd}|d d d
 d rJ |d d d
 d rJ |d d d
 d rJ |d d d d sJ |jjdgdddd}|d d d
 d rJ |d d d d sJ |d d d
 d rJ |d d d
 d rJ |d d d d s J |d d d d dks/J |jjdgddjdddd}|d d d d rMJ t|d d dksZJ |d d d d sgJ |d d d d stJ |d d d
 d rJ |d d d d rJ |d d d
 d sJ |d d d
 d dksJ |jjddddd}|d g ksJ |jjddddd}dD ]}d|d d | d v sJ |d d | d sJ qd S )Nr,   r   r   r  r  r   r?   col_level_0col_level_1r   r   r   rA   Trk   rf   rj   rY  rw   34r   r1   )r?   r   )r?   r   r   )r,   r   )r   r   r   r   row1r   )r   r  r   rO   rm   rJ   r   )r  i1i2rd   rs   r  r   r   r   #test_hide_columns_index_mult_levels  sX   "z.TestStyler.test_hide_columns_index_mult_levelsc                 C   sb   dd }|j j|ddd}d| v sJ dd }|j }|j|d	fd
dd}|d
d|fks/J d S )Nc                 S   s   |  d| d| S )NzDataframe with a = z	 and b = )rH   )re   r,   r?   r   r   r   set_caption_from_template  r  z7TestStyler.test_pipe.<locals>.set_caption_from_templater]   r^   )r?   zDataframe with a = A and b = Bc                 S   s
   | ||fS r  r   )r,   r?   re   r   r   r   r\    s   
zTestStyler.test_pipe.<locals>.fre   r   r   r  )rO   piper}   )r  rd   r  re   r\  r  r   r   r   	test_pipe  s   zTestStyler.test_pipec                 C   sB   t dggd}t|ddd}|  | }|ddksJ d S )Nr   rL   _F)rG   r   z<td class="data row0 col0" >rz  r   r
   r}   find)r  rd   re   r   r   r   r   test_no_cell_ids  s
   zTestStyler.test_no_cell_idsclassesr6   z
test-classr,   r?   rL   r   r   unusedc                 C   s   t ddgddggddgddgd	}t|dd
d| }d|v s#J d|v s)J d|v s/J d|v s5J t|ddd| }d|v sGJ d|v sMJ d|v sSJ d|v sYJ d S )Nr   r   r   r   r]   r^   r,   r?   r  Fr"   r   z"<td class="data row0 col0" >0</td>z-<td class="data row0 col1 test-class" >1</td>z"<td class="data row1 col0" >2</td>z"<td class="data row1 col1" >3</td>Tz4<td id="T__row0_col0" class="data row0 col0" >0</td>z?<td id="T__row0_col1" class="data row0 col1 test-class" >1</td>z4<td id="T__row1_col0" class="data row1 col0" >2</td>z4<td id="T__row1_col1" class="data row1 col1" >3</td>r   r
   rT   r}   )r  r  rd   r   r   r   r   test_set_data_classes  s   "z TestStyler.test_set_data_classesc                 C   s   t g dg dg dgg dg dd}t ddgddggd	d
gd	d
gd}t|d	d| }d|v s6J d|v s<J d|v sBJ d|v sHJ d|v sNJ d S )Nr  )r   r   r)   )r         r  mimamumor   r   r!   z7<td id="T__row0_col0" class="data row0 col0 mi" >0</td>z7<td id="T__row0_col2" class="data row0 col2 ma" >2</td>z4<td id="T__row1_col1" class="data row1 col1" >4</td>z7<td id="T__row2_col0" class="data row2 col0 mu" >6</td>z7<td id="T__row2_col2" class="data row2 col2 mo" >8</td>r  )r  rd   r  r   r   r   r   test_set_data_classes_reindex  s    z(TestStyler.test_set_data_classes_reindexc                 C   s\   t ddgddggddgd}|jddgd	gjd
dgd	gdd}t|jdks,J d S )Nr   r   r   r]   r^   rL   r   r6   )background-coloryellowr.   z.col0)r  r#  F)	overwrite)r   rO   rI   r   r   )r  rd   re   r   r   r   test_chaining_table_styles  s   z%TestStyler.test_chaining_table_stylesc                 C   s   t ddgddggddgd}t|dd}|ddd	gd
gi}d| v s(J |jddd	gd
gidd}d| v s>J d S )Nr   r   r   r]   r^   r  r!   r6   r"  r.   z#T_ .col0 {
  color: blue;
}r1   z#T_ .row0 {
  color: blue;
})r   r
   rI   r}   r;  r   r   r   test_column_and_row_styling  s   z&TestStyler.test_column_and_row_stylinglen_)r   r)       !   r   c                 C   sh   t dggd}t||dd }|d}||d d  d}|dkr,|dks*J d S ||ks2J d S )	Nr]   r  Fr  zid="T_r   "r!  r
  )r  r   rd   r   strtendr   r   r   test_uuid_len#  s   
zTestStyler.test_uuid_len)r   Nc                 C   sX   t dggd}d}tjt|d t||dd  W d    d S 1 s%w   Y  d S )Nr]   r  z3``uuid_len`` must be an integer in range \[0, 32\].r   Fr  )r   r   r   r  r
   r}   )r  r   rd   r   r   r   r   test_uuid_len_raises/  s
   "zTestStyler.test_uuid_len_raisesslcr  c                 C   s4   t ddgddgg}t|}t|j| t sJ d S )Nr   r   r   r   )r   r   r|  rq  )r  r)  rd   tslice_r   r   r   test_non_reducing_slice7  s   z"TestStyler.test_non_reducing_sliceboxc                 C   s^   |dg}t ddgddgdddgd}td d dgf }t|}t|j| |j|  d S )	Nr]   r   r   r   r   r\   r^   r   )r   r   r   r  assert_frame_equalrq  )r  r,  r   rd   r   r  r   r   r   test_list_sliceN  s
   
zTestStyler.test_list_slicec                 C   sx   ddgddgddgddgd}t |ddgd}t}|d d |d f }t|}|j| }t dddgi}t|| d S )	Nr   r   r   r   ))r,   r  )r,   r@   )r?   r@   r?   r  r   r   r/  )r   r   r   rq  r  r-  )r  dicrd   r  rj  r*  r  r   r   r   r   %test_non_reducing_slice_on_multiindexY  s   
z0TestStyler.test_non_reducing_slice_on_multiindexr@   er  )r@   r  -UWr_  r  )r_  r  r3  c                 C   s  t ddgddgddgg}t ddgd	d
gddgg}ttddd||d}d}d }dD ]}|| }t|trK|D ]}	t|	trJd|	v rJt	}q=q0t
j||d |j| }
W d    n1 scw   Y  t
j||d |jt| }W d    n1 sw   Y  t
||
 d S )Nr,   r?   r@   r  r2  r\  r4  Vr5  r^  r_  r  @   r  r   ry  rZ  r3  r   )r   r   r   r_   r   r   r|  r}  r~  r  r  r  rq  r   r-  )r  rj  rh  rg  rd   r   r  lvlkeysubkeyr   r  r   r   r   +test_non_reducing_multi_slice_on_multiindexj  s&   
z6TestStyler.test_non_reducing_multi_slice_on_multiindex)L__name__
__module____qualname__r  r  r  r  r'  r-  r7  r<  r@  rA  rM  rO  rS  rV  rW  r]  r   markparametrizerd  ri  r   rw  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r_   nanr  r  r  r  r&  r(  slicer  r   r+  r~  r.  r1  r;  r   r   r   r   r    s2   		
	












	
	 	<	







    &r  c                 C   s   ddg| j _| j}|dd}t|d dksJ |jddd |dd}t|d dks0J td	D ]}|d
 d | d sBJ q4|jddd |dd}t|d dksZJ |d
 d d d du shJ |d
 d d d du svJ d S )NLev0Lev1Trk   r   r   r3   r   r   rw   r   rf   r   r   F)r   r4   rO   rm   r   rJ   range)r    r#   rs   r  r   r   r   test_hidden_index_names  s    rF  c                 C   s   ddg| j _| j}|dd}|d d d d dksJ |d d d d dks+J |jddd	 |dd}|d d d d d
ksFJ |d d d d d
ksTJ |jddd |dd}t|d dkskJ |d d d d d
ksyJ d S )NrC  rD  Trk   r   r   rj   r   )r4   r2   rX   )r   r2   )r   r4   rO   rm   rJ   r   )r    r#   rs   r   r   r   test_hidden_column_names  s    rG  r   )r   )r,   r?   r@   )r   r   c                 C   sB   d}t jt|d | | W d    d S 1 sw   Y  d S )Nz8`caption` must be either a string or 2-tuple of strings.r   )r   r   r   rH   )r#   r   r   r   r   r   test_caption_raises  s   "rH  c                  C   s   t ddgg dg} td| dgd}|jdd}t|d d	ks$J |jjd
dddd}t|d dks:J d|d d d d v sHJ d S )Nr   r   r,   r,   r?   	   r   rA   Frw   r   r   r,   r1   r   row2r   )r   r   r   rO   rm   r   rJ   r   r   r   r   *test_hiding_headers_over_index_no_sparsify  s    rM  c                  C   s   t ddgg dg} td| dgd}|jdd}dD ]}|d	 |d  |d  d
 du s0J q|jjddddd}dD ]}|d	 |d  |d  d
 du sSJ q?d S )Nr   r   rI  rJ  r   r   F)rZ  r  r  r  rk   rf   TrK  r   r1   )r   r   r   rO   rm   rJ   )r   rd   rs   ixr   r   r   ,test_hiding_headers_over_columns_no_sparsify  s   &&rO  c               	   C   sP   t g dg dg} ddddddddd}t| ddg dd}t|| d S )	N)r   r   r   r   r   r   )r,   r,   r?   r,   r,   r?   r   )r  r  r  r  r  r  r  r  Fr   r  )r  r  hidden_elementsr  )r   r   r  r   r   r    test_get_level_lengths_mi_hidden  s"   
rQ  c                  C   s   t dgdgdgdgdgg} tdd | jjddgdd	d
d
}W d    n1 s,w   Y  t|d dks;J tg dD ]\}}|d | d d |ksSJ qAd S )Nr   r   r   r   r)   r   r   r   r1   Trw   r  r   ...rj   r   r   rO   rJ   rm   r   rp  rd   rs   rs  r   r   r   r   test_row_trimming_hide_index  s   rV  c                  C   sj  t dgdgdgdgdgg} tdgg dg| _tdd | jjd	d
gdddd}W d    n1 s7w   Y  t|d dksFJ dddd	 |d d d 	 ksZJ dddd	 |d d d 	 ksnJ ddd	 |d d d 	 ksJ t
g dD ]\}}|d | d d |ksJ qt
g dD ]\}}|d | d d |ksJ qd S )Nr   r   r   r   r)   r   )r   r   r   r   r   r   r  rZ  r   r1   Trw   rv   )rh   rg   rf   r6   FrS  )rh   rf   )2r  rS  rj   rR  )r   r   r   r   r   rO   rJ   rm   r   rn   rp  rU  r   r   r   test_row_trimming_hide_index_mi  s8   &rX  c                  C   s   t g dg} tdd | jjddgdddd}W d    n1 s%w   Y  t|d	 d d
ks6J tg dD ](\}}|d	 d |d  d |d ksRJ |d	 d |d  d |d ksdJ q<t|d d d
ksqJ d S )N)r   r   r   r   r)   r   r   r   r   r   r1   Trk   r   ))r   F)r   T)r   T)rS  Trh   rf   rw   rT  )rd   rs   r@   valsr   r   r   test_col_trimming_hide_columns  s   $&rZ  c                 C   s"   | j dd ddgd |   d S )Nc                 S   s
   dgd S )Nr-   r   r   r   r   r   r   r=   &  s   
 z%test_no_empty_apply.<locals>.<lambda>Fr:  )r   r   r  r   r   r   test_no_empty_apply$  s   r[  rP   )htmllatexstringc                 C   sJ   t d| }t| d| | W d    d S 1 sw   Y  d S )Nz
delete_me.to_)r  ensure_cleanr   )r#   rP   r\  r   r   r   test_output_buffer*  s   "ra  )?r   r  textwrapr   numpyr_   r   pandasr   r   r   r   r   pandas._testing_testingr  importorskipr   pandas.io.formats.styler
   pandas.io.formats.style_renderr   r   r   r   fixturer    r#   rW   rY   rd   re   r?  r@  rt   r|   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rF  rG  rH  rM  rO  rQ  rV  rX  rZ  r[  ra  r   r   r   r   <module>   s    

	

%

















5+

       S

