3
Udl                 @   s   d dl Z d dlZd dlZd dlZd dlZd dljjZ	d dl
Zd dl
mZ d dljZejdZd dlmZmZ G dd dZe	jG dd dZd	d
 Zdd ZdS )    N)	DataFramejinja2)Styler_get_level_lengthsc               @   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d!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!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\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5ddhdiZ6djdk Z7dldm Z8dndo Z9dpdq Z:drds Z;dtdu Z<dvdw Z=dxdy Z>dzd{ Z?d|d} Z@d~d ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdS )
TestStylerc             C   s   t jjd tdt jjtdi| _tddgt jjdd| _dd	 | _	d
d	 | _
ddd}|| _t| j| _tjdddgi| _| jtjddgddgtjddgdg| _d S )N   A   r         )r   Bc             S   s   | S )N )xr   r   V/var/www/html/virt/lib64/python3.6/site-packages/pandas/tests/io/formats/test_style.py<lambda>   s    z)TestStyler.setup_method.<locals>.<lambda>c             S   s   | S )Nr   )r   r   r   r   r      s    barc             S   s   t jd| | j| jdS )Nzcolor: )indexname)pdSeriesr   r   )r   foor   r   r   h   s    z"TestStyler.setup_method.<locals>.hz
color: redzcolor: blueg      ?g       @ab)foc)r   )nprandomseedr   Zpermutationrangesrandndfr   gr   r   stylerr   attrsZCategoricalZ
dataframes)selfmethodr   r   r   r   setup_method   s    


zTestStyler.setup_methodc             C   s0   d}t jt|d tdddg W d Q R X d S )Nz&``data`` must be a Series or DataFrame)matchr
   r      )pytestraises	TypeErrorr   )r'   msgr   r   r   test_init_non_pandas'   s    zTestStyler.test_init_non_pandasc             C   s&   t tjddg}|jjdks"td S )Nr
   r   )r   r   r   datandimAssertionError)r'   resultr   r   r   test_init_series,   s    zTestStyler.test_init_seriesc             C   s   | j j  d S )N)r%   _repr_html_)r'   r   r   r   test_repr_html_ok0   s    zTestStyler.test_repr_html_okc          	   C   s@   d| j j ksttjdd d| j j ks2tW d Q R X d S )NZtex2jax_ignorezdisplay.html.use_mathjaxF)r%   r6   r3   r   option_context)r'   r   r   r   test_repr_html_mathjax3   s    z!TestStyler.test_repr_html_mathjaxc             C   s2   | j j| j ddgddgi}| j j|ks.td S )Nr   z
color: redr
   zcolor: blue)r   r   )r
   r   )r%   _update_ctxr&   ctxr3   )r'   expectedr   r   r   test_update_ctx:   s    zTestStyler.test_update_ctxc             C   sD   t dddgi}| jj| d
ddgddd	gi}| jj|ks@td S )Nr   zcolor: red; foo: barzcolor: blue; foo: bazr   z
color: redz	 foo: barr
   zcolor: bluez	 foo: baz)r   r   )r
   r   )r   r%   r:   r;   r3   )r'   r&   r<   r   r   r   test_update_ctx_flatten_multi?   s
    z(TestStyler.test_update_ctx_flatten_multic             C   sD   t dddgi}| jj| d
ddgddd	gi}| jj|ks@td S )Nr   zcolor: red; foo: bar;zcolor: blue; foo: baz;r   z
color: redz	 foo: barr
   zcolor: bluez	 foo: baz)r   r   )r
   r   )r   r%   r:   r;   r3   )r'   r&   r<   r   r   r   +test_update_ctx_flatten_multi_traliing_semiH   s
    z6TestStyler.test_update_ctx_flatten_multi_traliing_semic             C   s~   t j | j}| j|k	st| jj|jks,t| jj|jks>t| jj| j | jj  | jj|jksht| jj|jksztd S )N)copyr%   r3   r;   _todor:   r&   highlight_max)r'   s2r   r   r   	test_copyQ   s    
zTestStyler.test_copyc             C   s   t j| j}| j|k	st| jj|jk	s,t| jj|jk	s>t| jj| j | jj  | jj|jksht|jg ksvt| jj|jkstd S )N)	r@   deepcopyr%   r3   r;   rA   r:   r&   rB   )r'   rC   r   r   r   test_deepcopy\   s    
zTestStyler.test_deepcopyc             C   sd   | j jj j }t|jdks"tt|jdks4t|j  t|jdksNtt|jdks`td S )Nr   )	r#   stylerB   _computelenr;   r3   rA   clear)r'   r!   r   r   r   
test_clearh   s    zTestStyler.test_clearc             C   s8   t jdddgi}dd }t|ddj|}|j  d S )Nr   r   r
   c             S   s   t jddg| jdS )Nz
color: redzcolor: blue)r   )r   r   r   )r   r   r   r   r   r   s    z(TestStyler.test_render.<locals>.<lambda>AB)uuid)r   r   r   applyrender)r'   r#   rG   r!   r   r   r   test_renderp   s    zTestStyler.test_renderc             C   s>   t  }t|}|j  t dgdjj  t dgdjj  d S )Nr   )columns)r   )r   r   rO   rG   )r'   Zempty_dfesr   r   r   test_render_empty_dfsw   s
    z TestStyler.test_render_empty_dfsc             C   s8   t jdddgi}dd }t|ddj|}|j  d S )Nr   r   r
   c             S   s   t jddg| jdS )Nzcolor: red; border: 1pxzcolor: blue; border: 2px)r   )r   r   r   )r   r   r   r   r      s   z/TestStyler.test_render_double.<locals>.<lambda>rL   )rM   )r   r   r   rN   rO   )r'   r#   rG   r!   r   r   r   test_render_double   s    zTestStyler.test_render_doublec             C   s   t jdddgi}|jjdddj j}ddg}d	|d
|i}|j |j ksPtx2t|j	 |j	 D ]\}}t
|t
|ksdtqdW d S )Nr   r   r
   whiteZ10px)colorsizezcolor: whitez
size: 10px)r   r   )r
   r   )r   r   rG   set_propertiesrH   r;   keysr3   zipvaluessorted)r'   r#   r4   vr<   v1v2r   r   r   test_set_properties   s    zTestStyler.test_set_propertiesc             C   sH   t jdddgi}|jjt jd ddj j}ddgi}||ksDtd S )	Nr   r   r
   rU   )subsetrV   zcolor: white)r   r   )r   r   )r   r   rG   rX   
IndexSlicerH   r;   r3   )r'   r#   r4   r<   r   r   r   test_set_properties_subset   s    
z%TestStyler.test_set_properties_subsetc          	   C   sz   t jddgddgddgd}|jj }dd	d
dd
dddd	dddddd	dddddd	dddgg}|d |ksvtd S )Nr
   r   r+         r	   )r   r   Czblank level0th T)classtypevalue
is_visibledisplay_valuezcol_heading level0 col0r   )ri   rm   rj   rk   rl   zcol_heading level0 col1r   zcol_heading level0 col2rf   head)r   r   rG   
_translater3   )r'   r#   r4   r<   r   r   r   $test_empty_index_name_doesnt_display   s.    
z/TestStyler.test_empty_index_name_doesnt_displayc             C   s   t jddgddgddgd}|jdjj }d	d
dddddd
dddddd
ddddgdd
dddd
dddd
ddgg}|d |kstd S )Nr
   r   r+   rd   re   r	   )r   r   rf   r   zblank level0rg   rh   T)ri   rj   rk   rm   rl   zcol_heading level0 col0r   zcol_heading level0 col1rf   zindex_name level0)ri   rj   rk   blankrn   )r   r   	set_indexrG   ro   r3   )r'   r#   r4   r<   r   r   r   test_index_name   s*    

zTestStyler.test_index_namec             C   s   t jddgddgddgd}|jdd	gjj }d
dddddddddddddddddgddddddd	dd
dddgg}|d |kstd S )Nr
   r   r+   rd   re   r	   )r   r   rf   r   r   rq   rg   rh   T)ri   rj   rk   rm   rl   zblank level0zcol_heading level0 col0rf   zindex_name level0)ri   rj   rk   zindex_name level1rn   )r   r   rr   rG   ro   r3   )r'   r#   r4   r<   r   r   r   test_multiindex_name   s*    

zTestStyler.test_multiindex_namec             C   s"   t jddddgi}|jj  d S )Nr   r
   r   r+   )r   r   rG   ro   )r'   r#   r   r   r   test_numeric_columns  s    zTestStyler.test_numeric_columnsc             C   s   t jddgddgd}dd }|jj|dd}t|jdksBtt|jdksTt|j  d	dgd
dgddgddgi}|j|kst|jj|dd}ddgddgddgddgi}|j  |j|kst|jj|}|j  |j|k std S )Nr   r
   )r   r   c                s    fdd D S )Nc                s   g | ]}d  j   qS )zval: )max).0r]   )r   r   r   
<listcomp>  s    z@TestStyler.test_apply_axis.<locals>.<lambda>.<locals>.<listcomp>r   )r   r   )r   r   r     s    z,TestStyler.test_apply_axis.<locals>.<lambda>)axiszval: 1zval: 0)r   r   )r   r
   )r
   r   )r
   r
   )r   r   )r   r
   )r
   r   )r
   r
   )	r   r   rG   rN   rI   rA   r3   r;   rH   )r'   r#   r   r4   r<   r   r   r   test_apply_axis  s*    

zTestStyler.test_apply_axisc                s   ddg}t jd d  t jd d dgf t jdgd d f t jdgdgf t jd dddgf g}x`|D ]X}xR|D ]J jjj j|ddj j} fdd	t jj	D }||kspt
qpW qfW d S )
Nr   r
   r   r   r   baz)ry   ra   r   c                sV   i | ]N\}}t  jjD ]8\}}| jj jkr| jj jkrd g||fqqS )z
color: baz)	enumerater#   rQ   locr   )rw   rrowr   col)r'   slice_r   r   
<dictcomp>D  s   z0TestStyler.test_apply_subset.<locals>.<dictcomp>)r   rb   r#   rG   rN   r   rH   r;   r|   r   r3   )r'   ZaxesslicesZaxr4   r<   r   )r'   r   r   test_apply_subset4  s    

zTestStyler.test_apply_subsetc                s   dd }t jd d  t jd d dgf t jdgd d f t jdgdgf t jd dddgf g}xL|D ]D jjj|dj j} fdd	t jjD }||ksft	qfW d S )
Nc             S   s   dS )Nzfoo: barr   )r   r   r   r   r   N  s    z*TestStyler.test_applymap_subset.<locals>.fr   r
   r   r   )ra   c                sV   i | ]N\}}t  jjD ]8\}}| jj jkr| jj jkrd g||fqqS )zfoo: bar)r|   r#   rQ   r}   r   )rw   r~   r   r   r   )r'   r   r   r   r   [  s   z3TestStyler.test_applymap_subset.<locals>.<dictcomp>)
r   rb   r#   rG   applymaprH   r;   r|   r   r3   )r'   r   r   r4   r<   r   )r'   r   r   test_applymap_subsetM  s    
zTestStyler.test_applymap_subsetc          	   C   sl   dd }dddgdddgdddgdddgi}t j}t j|ddgd}|jj||d d |d f dj  d S )Nc             S   s   | dk rdnd}d| S )z
            Takes a scalar and returns a string with
            the css property `'color: red'` for negative
            strings, black otherwise.
            r   redblackzcolor: r   )valrV   r   r   r   color_negative_redg  s    zFTestStyler.test_applymap_subset_multiindex.<locals>.color_negative_redr   dgQ?gzG @r   g=
ףp=@g
ףp=
@r   gQ@g)\(@gףp=
@gQ?r   r
   )r   )ra   )r   r   gQ)r   r   g
ףp=
)r   r   gQ)r   r   gQ)r   r   )r   rb   r   rG   r   rO   )r'   r   Zdicidxr#   r   r   r   test_applymap_subset_multiindexd  s    
z*TestStyler.test_applymap_subset_multiindexc             C   s   t jddddgddddgg}tjddgddgg|ddgd}tddddgddddggd	d
g|d}tjd d tjd d ddf f }dd }|j|  |jj||d d S )Nr   r
   r   r   %#rh   )ZlevelscodesnamesZhelloZworld)r   rQ   c             S   s   | dk rdnd}d| S )Nr   r   r   zcolor: r   )r   rV   r   r   r   r     s    zKTestStyler.test_applymap_subset_multiindex_code.<locals>.color_negative_red)ra   r   )	r   arrayr   
MultiIndexr   rb   r}   rG   r   )r'   r   rQ   r#   Z
pct_subsetr   r   r   r   $test_applymap_subset_multiindex_code|  s    $$
z/TestStyler.test_applymap_subset_multiindex_codec                sP   dd  dj jj j j} fddtj jD }||ksLtd S )Nc             S   s   | dkS )Ng      ?r   )r   r   r   r   r     s    z/TestStyler.test_where_with_one_style.<locals>.fzfoo: barc                sF   i | ]>\}}t jjD ](\}} jj||f rg||fqqS r   )r|   r#   rQ   r}   )rw   r~   r   r   r   )r   r'   style1r   r   r     s   z8TestStyler.test_where_with_one_style.<locals>.<dictcomp>)r#   rG   whererH   r;   r|   r   r3   )r'   r4   r<   r   )r   r'   r   r   test_where_with_one_style  s    z$TestStyler.test_where_with_one_stylec                s   dd  ddt jd d  t jd d dgf t jdgd d f t jdgdgf t jd dddgf g}xV|D ]Njjj d	j j} fd
dtjjD }||ksnt	qnW d S )Nc             S   s   | dkS )Ng      ?r   )r   r   r   r   r     s    z'TestStyler.test_where_subset.<locals>.fzfoo: barzbaz: foor   r
   r   r   )ra   c                sn   i | ]f\}}t jjD ]P\}}|jj jkr|jj jkr jj||f r\ng||fqqS r   )r|   r#   rQ   r}   r   )rw   r~   r   r   r   )r   r'   r   r   style2r   r   r     s   z0TestStyler.test_where_subset.<locals>.<dictcomp>)
r   rb   r#   rG   r   rH   r;   r|   r   r3   )r'   r   r4   r<   r   )r   r'   r   r   r   r   test_where_subset  s    
zTestStyler.test_where_subsetc                s   dd  dd fdd}t jd d  t jd d dgf t jdgd d f t jdgdgf t jd d	dd
gf g}xL|D ]D}| jjj |dj j}| jjj||dj j}||ks~tq~W d S )Nc             S   s   | dkS )Ng      ?r   )r   r   r   r   r     s    z=TestStyler.test_where_subset_compare_with_applymap.<locals>.fzfoo: barzbaz: fooc                s    | rS S )Nr   )r   )r   r   r   r   r   r$     s    z=TestStyler.test_where_subset_compare_with_applymap.<locals>.gr   r
   r   r   )ra   )	r   rb   r#   rG   r   rH   r;   r   r3   )r'   r$   r   r   r4   r<   r   )r   r   r   r   'test_where_subset_compare_with_applymap  s    
z2TestStyler.test_where_subset_compare_with_applymapc             C   sb   t jdddgi}|j}ddgddgi|_|j d }dgd	gd
dgdgd
g}||ks^td S )Nr   r
   r   z
color: redrh   	cellstylerV    red	row0_col0)props	selectors	row1_col0)r   r   )r
   r   )rV   r   )rh   rh   )r   r   rG   r;   ro   r3   )r'   r#   r!   r4   r<   r   r   r   
test_empty  s    zTestStyler.test_emptyc             C   sX   t jdddgi}|j}ddgddgi|_|j d }dgdd	gd
g}||ksTtd S )Nr   r
   r   z
color: redr   rV    redr   r   )r   r   )r   r   )r
   r   )rV   r   )r   r   rG   r;   ro   r3   )r'   r#   r!   r4   r<   r   r   r   test_duplicate  s    zTestStyler.test_duplicatec             C   s   t jddddgi}|jj j j}dddgddddgddddgi}||ksPt|jjd	d
dj j}dddgddddgddddgi}||kstdgt| |d< |jjd	d
dj j}||kst|d jd|d< |jjd	d
dj j}||k std S )Nr   r   r
   r   zwidth: 10emz height: 80%zCbackground: linear-gradient(90deg,#d65f5f 50.0%, transparent 50.0%)zEbackground: linear-gradient(90deg,#d65f5f 100.0%, transparent 100.0%)r   2   )rV   widthz?background: linear-gradient(90deg,red 25.0%, transparent 25.0%)z?background: linear-gradient(90deg,red 50.0%, transparent 50.0%)r   rf   category)r   r   )r
   r   )r   r   )r   r   )r
   r   )r   r   )	r   r   rG   r   rH   r;   r3   rI   Zastype)r'   r#   r4   r<   r   r   r   test_bar_align_left  s:    zTestStyler.test_bar_align_leftc             C   s  t jdddgdddgddd	gg}|jj j j}dddgdddgdddgddddgddddgddddgddddgddddgddddgi	}||kst|jjddj j}dddgddddgddddgdddgddddgddddgdddgd dddgd!dddgi	}||kstd S )"Nr
   r   r+   rd   re   r	         	   r   zwidth: 10emz height: 80%zCbackground: linear-gradient(90deg,#d65f5f 50.0%, transparent 50.0%)zEbackground: linear-gradient(90deg,#d65f5f 100.0%, transparent 100.0%))ry   )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
   )r   r   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_left_0points  sv    "z&TestStyler.test_bar_align_left_0pointsc          
   C   sj   t jdddddgi}|jjdddgd	j j}dd
ddgdd
dgdd
ddgdd
ddgi}||ksftd S )Nr   
   r      Z   midz#d65f5fz#5fba7d)alignrV   zwidth: 10emz height: 80%zCbackground: linear-gradient(90deg,#d65f5f 10.0%, transparent 10.0%)r
   r   zfbackground: linear-gradient(90deg, transparent 10.0%, #5fba7d 10.0%, #5fba7d 30.0%, transparent 30.0%)r+   zhbackground: linear-gradient(90deg, transparent 10.0%, #5fba7d 10.0%, #5fba7d 100.0%, transparent 100.0%)i)r   r   )r
   r   )r   r   )r+   r   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_pos_and_negn  s     z)TestStyler.test_bar_align_mid_pos_and_negc          
   C   sl   t jdddddgi}|jjdddgd	j j}ddddgddddgddddgddddgi}||kshtd S )Nr   r   r   r   d   r   z#d65f5fz#5fba7d)r   rV   r   zwidth: 10emz height: 80%zCbackground: linear-gradient(90deg,#5fba7d 10.0%, transparent 10.0%)r
   zCbackground: linear-gradient(90deg,#5fba7d 20.0%, transparent 20.0%)r   zCbackground: linear-gradient(90deg,#5fba7d 50.0%, transparent 50.0%)r+   zEbackground: linear-gradient(90deg,#5fba7d 100.0%, transparent 100.0%))r   r   )r
   r   )r   r   )r+   r   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_all_pos  s&    z%TestStyler.test_bar_align_mid_all_posc          
   C   sl   t jdddddgi}|jjdddgd	j j}ddddgddddgddddgddddgi}||kshtd S )Nr   r   <      r   r   z#d65f5fz#5fba7d)r   rV   r   zwidth: 10emz height: 80%zEbackground: linear-gradient(90deg,#d65f5f 100.0%, transparent 100.0%)r
   zhbackground: linear-gradient(90deg, transparent 40.0%, #d65f5f 40.0%, #d65f5f 100.0%, transparent 100.0%)r   zhbackground: linear-gradient(90deg, transparent 70.0%, #d65f5f 70.0%, #d65f5f 100.0%, transparent 100.0%)r+   zhbackground: linear-gradient(90deg, transparent 80.0%, #d65f5f 80.0%, #d65f5f 100.0%, transparent 100.0%)iiii)r   r   )r
   r   )r   r   )r+   r   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_all_neg  s&    z%TestStyler.test_bar_align_mid_all_negc          
   C   sl   t jdddddgi}|jjdddgdd	j j}dd
ddgdd
dgdd
ddgdd
ddgi}||kshtd S )Nr   r   r   r   r   zeroz#d65f5fz#5fba7d)r   rV   r   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 40.0%, #d65f5f 40.0%, #d65f5f 45.0%, transparent 45.0%)r
   r   zfbackground: linear-gradient(90deg, transparent 45.0%, #5fba7d 45.0%, #5fba7d 55.0%, transparent 55.0%)r+   zfbackground: linear-gradient(90deg, transparent 45.0%, #5fba7d 45.0%, #5fba7d 90.0%, transparent 90.0%)i)r   r   )r
   r   )r   r   )r+   r   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_zero_pos_and_neg  s     z*TestStyler.test_bar_align_zero_pos_and_negc          
   C   sf   t jddgddgd}|jjd dj j}dddgdddd	gdddd
gddddgi}||ksbtd S )Nr   r
   r   rd   )r   r   )ry   zwidth: 10emz height: 80%zCbackground: linear-gradient(90deg,#d65f5f 25.0%, transparent 25.0%)zCbackground: linear-gradient(90deg,#d65f5f 50.0%, transparent 50.0%)zEbackground: linear-gradient(90deg,#d65f5f 100.0%, transparent 100.0%))r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_left_axis_none  s     z(TestStyler.test_bar_align_left_axis_nonec          
   C   sh   t jddgddgd}|jjdd dj j}ddd	gddd	d
gddd	dgddd	dgi}||ksdtd S )Nr   r
   r   rd   )r   r   r   )r   ry   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 50.0%, #d65f5f 50.0%, #d65f5f 62.5%, transparent 62.5%)zfbackground: linear-gradient(90deg, transparent 25.0%, #d65f5f 25.0%, #d65f5f 50.0%, transparent 50.0%)zhbackground: linear-gradient(90deg, transparent 50.0%, #d65f5f 50.0%, #d65f5f 100.0%, transparent 100.0%))r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_zero_axis_none  s     z(TestStyler.test_bar_align_zero_axis_nonec          
   C   sh   t jddgddgd}|jjdd dj j}ddd	gddd	d
gddd	dgddd	dgi}||ksdtd S )Nr   r
   r   rd   )r   r   r   )r   ry   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 33.3%, #d65f5f 33.3%, #d65f5f 50.0%, transparent 50.0%)zCbackground: linear-gradient(90deg,#d65f5f 33.3%, transparent 33.3%)zhbackground: linear-gradient(90deg, transparent 33.3%, #d65f5f 33.3%, #d65f5f 100.0%, transparent 100.0%)r   )r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_axis_none1  s     z'TestStyler.test_bar_align_mid_axis_nonec          
   C   sj   t jddgddgd}|jjdd ddj j}dd	d
gdd	d
dgdd	d
dgdd	d
dgi}||ksftd S )Nr   r
   r   rd   )r   r   r   r	   )r   ry   vminzwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 60.0%, #d65f5f 60.0%, #d65f5f 70.0%, transparent 70.0%)zfbackground: linear-gradient(90deg, transparent 40.0%, #d65f5f 40.0%, #d65f5f 60.0%, transparent 60.0%)zhbackground: linear-gradient(90deg, transparent 60.0%, #d65f5f 60.0%, #d65f5f 100.0%, transparent 100.0%)r   i)r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_vminM  s     z"TestStyler.test_bar_align_mid_vminc          
   C   sj   t jddgddgd}|jjdd ddj j}dd	d
gdd	d
dgdd	d
dgdd	d
dgi}||ksftd S )Nr   r
   r   rd   )r   r   r   r   )r   ry   vmaxzwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 20.0%, #d65f5f 20.0%, #d65f5f 30.0%, transparent 30.0%)zCbackground: linear-gradient(90deg,#d65f5f 20.0%, transparent 20.0%)zfbackground: linear-gradient(90deg, transparent 20.0%, #d65f5f 20.0%, #d65f5f 60.0%, transparent 60.0%)r   )r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_vmaxj  s     z"TestStyler.test_bar_align_mid_vmaxc          
   C   sl   t jddgddgd}|jjdd ddd	j j}dd
dgdd
ddgdd
ddgdd
ddgi}||kshtd S )Nr   r
   r   rd   )r   r   r   r+   r   )r   ry   r   r   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 30.0%, #d65f5f 30.0%, #d65f5f 40.0%, transparent 40.0%)zfbackground: linear-gradient(90deg, transparent 10.0%, #d65f5f 10.0%, #d65f5f 30.0%, transparent 30.0%)zfbackground: linear-gradient(90deg, transparent 30.0%, #d65f5f 30.0%, #d65f5f 70.0%, transparent 70.0%)r   )r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   !test_bar_align_mid_vmin_vmax_wide  s     z,TestStyler.test_bar_align_mid_vmin_vmax_widec          
   C   sl   t jddgddgd}|jjdd dddj j}dd	d
gdd	d
dgdd	d
dgdd	d
dgi}||kshtd S )Nr   r
   r   rd   )r   r   r   r+   )r   ry   r   r   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 25.0%, #d65f5f 25.0%, #d65f5f 50.0%, transparent 50.0%)zCbackground: linear-gradient(90deg,#d65f5f 25.0%, transparent 25.0%)zhbackground: linear-gradient(90deg, transparent 25.0%, #d65f5f 25.0%, #d65f5f 100.0%, transparent 100.0%)r   r   )r   r   )r
   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   %test_bar_align_mid_vmin_vmax_clipping  s     z0TestStyler.test_bar_align_mid_vmin_vmax_clippingc             C   s`   t jdd gddgd}|jjdd dj j}dddd	gdddd
gddddgi}||ks\td S )Nr
   r+   )r   r   r   )r   ry   r   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 25.0%, #d65f5f 25.0%, #d65f5f 50.0%, transparent 50.0%)zCbackground: linear-gradient(90deg,#d65f5f 25.0%, transparent 25.0%)zhbackground: linear-gradient(90deg, transparent 25.0%, #d65f5f 25.0%, #d65f5f 100.0%, transparent 100.0%)r   )r   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_mid_nans  s    z"TestStyler.test_bar_align_mid_nansc             C   s`   t jdd gddgd}|jjdd dj j}dddd	gdddd
gddddgi}||ks\td S )Nr
   r   )r   r   r   )r   ry   r   zwidth: 10emz height: 80%zfbackground: linear-gradient(90deg, transparent 50.0%, #d65f5f 50.0%, #d65f5f 75.0%, transparent 75.0%)zfbackground: linear-gradient(90deg, transparent 25.0%, #d65f5f 25.0%, #d65f5f 50.0%, transparent 50.0%)zhbackground: linear-gradient(90deg, transparent 50.0%, #d65f5f 50.0%, #d65f5f 100.0%, transparent 100.0%)r   )r   r   )r   r
   )r
   r
   )r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_bar_align_zero_nans  s    z#TestStyler.test_bar_align_zero_nansc             C   sL   t jdddddgi}d}tjt|d |jjdd	d
gd W d Q R X d S )Nr   r   r   r   r   z.`align` must be one of {'left', 'zero',' mid'})r*   Zpoorlyz#d65f5fz#5fba7d)r   rV   iiii)r   r   r,   r-   
ValueErrorrG   r   )r'   r#   r/   r   r   r   test_bar_bad_align_raises  s    z$TestStyler.test_bar_bad_align_raisesc             C   sF  t jd d gddggddgd}|jjd ddj }|d d	 d
 d dksNt|d d	 d d dksjt|jjdddj }|d d	 d
 d dkst|d d	 d d dkst|d d
 d
 d dkst|d d
 d d dkst|jjdddgdj }|d d	 d d dks$t|d d
 d d dksBtd S )Ng?g333333?r   r   )rQ   -)na_repbodyr   r
   rm   r   z{:.2%}z110.00%z120.00%)r   ra   )r   r   rG   formatro   r3   )r'   r#   r;   r   r   r   test_format_with_na_rep  s    z"TestStyler.test_format_with_na_repc             C   sj   t jd d gddggddgd}t|ddj }|d d	 d
 d dksJt|d d	 d d dksftd S )Ng?g333333?r   r   )rQ   NA)r   r   r   r
   rm   r   )r   r   r   ro   r3   )r'   r#   r;   r   r   r   test_init_with_na_rep  s    z TestStyler.test_init_with_na_repc             C   s   t jd d gddggddgd}|jjdj }|d d d	 d
 dksJt|d d d d
 dksft|jjdjd ddgdj }|d d d	 d
 dkst|d d d d
 dkstd S )Ng?g333333?r   r   )rQ   r   r   r   r
   rm   r   r   )r   ra   )r   r   rG   
set_na_repro   r3   r   )r'   r#   r;   r   r   r   test_set_na_rep  s    zTestStyler.test_set_na_repc             C   s2  t jd tjdgd t jt jdgd}|jjdj }|d d d d dksRt	|d d d	 d dksnt	|d d d d dkst	|d d d	 d dkst	|jj
d d
dj }|d d d d d
kst	|d d d	 d d
kst	|d d d d d
kst	|d d d	 d d
ks.t	d S )Nr   Z20120101)objectdatetimer   r   r   r
   rm   r   r   )r   )r   r   r   nanZNaT	TimestamprG   r   ro   r3   r   )r'   r#   r;   r   r   r   test_format_non_numeric_na&  s    
z%TestStyler.test_format_non_numeric_nac             C   sP   t jd d gddggddgd}d}tjt|d |jjd d
d	 W d Q R X d S )Ng?g333333?r   r   )rQ   z!Expected a string, got -1 instead)r*   r
   )r   r   )r   r   r,   r-   r.   rG   r   )r'   r#   r/   r   r   r   test_format_with_bad_na_rep;  s    z&TestStyler.test_format_with_bad_na_repr   c             C   s>   t jddtjgi}|jj j j}ddgi}||ks:td S )Nr   r   r
   zbackground-color: red)r
   r   )	r   r   r   r   rG   highlight_nullrH   r;   r3   )r'   
null_colorr#   r4   r<   r   r   r   test_highlight_nullB  s    
zTestStyler.test_highlight_nullc             C   s`   t jdtjgdtjgd}|jjddgdjddgdj j}dd	gdd
gi}||ks\td S )Nr   )r   r   r   r   )r   ra   greenr   r
   zbackground-color: redzbackground-color: green)r
   r   )r
   r
   )	r   r   r   r   rG   r   rH   r;   r3   )r'   r#   r4   r<   r   r   r   test_highlight_null_subsetH  s    
z%TestStyler.test_highlight_null_subsetc             C   sb   t jddggddgd}d}tjt|d |j W d Q R X tjt|d t| W d Q R X d S )Nr
   r   r   )rQ   z.style is not supported for non-unique indices.)r*   )r   r   r,   r-   r   rG   r   )r'   r#   r/   r   r   r   test_nonunique_raisesW  s    z TestStyler.test_nonunique_raisesc             C   s^   t | jdd}|j }td|kd|kgs.t| jj}|jd}||ksLt|jdksZtd S )Nr   )captionr   r{   )r   r#   rO   allr3   rG   set_captionr   )r'   r%   r4   r   r   r   test_caption`  s    
zTestStyler.test_captionc             C   sR   t | jdd}|j }d|ks"t| jj}|jd}||ks@t|jdksNtd S )NZabc123)rM   aaa)r   r#   rO   r3   rG   Zset_uuidrM   )r'   r%   r4   r   r   r   	test_uuidj  s    
zTestStyler.test_uuidc             C   sb   t jddddgddddgd	}|jjd
d}d
|ks:ttjd|}tj|j	t
|ks^td S )Nr
   r+   re   r	   r   rd         )r   r   test)rM   z
id="(.*?)")r   r   rG   rO   r3   refindallr   uniquerW   rI   )r'   r#   r4   idsr   r   r   test_unique_idt  s
     zTestStyler.test_unique_idc             C   sj   ddgdg}t | j|d}dj|j j }d|ks:t| jj}|j|}||ksXt|j|ksftd S )	Nrg   r   r   )selectorr   )table_styles zth { foo: bar; })r   r   )	r   r#   joinrO   splitr3   rG   Zset_table_stylesr   )r'   rG   r%   r4   r   r   r   test_table_styles|  s    
zTestStyler.test_table_stylesc             C   sH   d}t | j|d}|j }d|ks&t| jjj|j }d|ksDtd S )Nzclass="foo" data-bar)Ztable_attributes)r   r#   rO   r3   rG   Zset_table_attributes)r'   
attributesr%   r4   r   r   r   test_table_attributes  s    z TestStyler.test_table_attributesc             C   st   t jdd t| j}W d Q R X |jdks0tt| jdd}|jdksLt|jd}||ksbt|jdksptd S )Nzdisplay.precisionr   r   )	precisionrd   )r   r8   r   r#   r   r3   set_precision)r'   r!   rC   r   r   r   test_precision  s    
zTestStyler.test_precisionc             C   sF   dd }t jddgddggjj|d dj j}|d	 dgksBtd S )
Nc             S   s&   t jtj| | j kdd| j| jdS )Nz
color: redrh   )r   rQ   )r   r   r   r   rv   r   rQ   )r   r   r   r   r     s    z%TestStyler.test_apply_none.<locals>.fr
   r   r+   rd   )ry   z
color: red)r
   r
   )r   r   rG   rN   rH   r;   r3   )r'   r   r4   r   r   r   test_apply_none  s    (zTestStyler.test_apply_nonec             C   sL   | j jj }|jddkst| j jj j }|jdt| j jksHtd S )Nr   r   )r#   rG   rO   countr3   rB   rI   rQ   )r'   r4   r   r   r   	test_trim  s    zTestStyler.test_trimc             C   sl  t jddgddggddgd}xdD  ]}|r6d
}n
| }d}t|j| j j}|d dgksftt|j|ddj j}|d dgkstt|j|ddj j}|d dgkstt|j|ddj j}ddgddgi}||k stt|j|ddj j}ddgddgi}||ks&tq&W ddg|d< |jj j j}ddgi}|jj j j}ddgi}d S ) Nr
   r   r+   rd   r   r   )rQ   TFrB   highlight_minzbackground-color: yellowr   )rV   zbackground-color: green)ra   r   )ry   r   r   rf   )TF)r
   r
   )r
   r
   )r
   r   )r
   r   )r
   r
   )r   r
   )r
   r
   )r
   r
   )r   r   )	r   r   getattrrG   rH   r;   r3   rB   r   )r'   r#   Zmax_attrr4   r<   r   r   r   test_highlight_max  s2    


zTestStyler.test_highlight_maxc             C   sd   dd }dd }| j }|j|j|ddj  |j }| jj}|j| |j|jksXt|j	  d S )Nc             S   s   | dkrdS dS )Nr   z
color: redzcolor: bluer   )r   r   r   r   r     s    z(TestStyler.test_export.<locals>.<lambda>c             S   s   | dkrd| S d| S )Nr   zcolor: r   )r   zr   r   r   r     s    r   )r   )
r%   r   rB   Zexportr#   rG   ZuserA   r3   rO   )r'   r   r$   r   r4   r   r   r   r   test_export  s    
zTestStyler.test_exportc             C   s   t jtjjdd}|jjdj }tdd |d D s>ttdd |d D sXtt	|d d d	 d
 j
ddks~td S )Nr   )rW   z{:0.1f}c             s   s   | ]}d d |D V  qdS )c             S   s   g | ]}d |kqS )rm   r   )rw   r   r   r   r   rx     s    z<TestStyler.test_display_format.<locals>.<genexpr>.<listcomp>Nr   )rw   r   r   r   r   	<genexpr>  s    z1TestStyler.test_display_format.<locals>.<genexpr>r   c             s   s$   | ]}d d |dd D V  qdS )c             S   s   g | ]}t |d  dkqS )rm   r+   )rI   )rw   r   r   r   r   rx     s    z<TestStyler.test_display_format.<locals>.<genexpr>.<listcomp>r
   Nr   )rw   r   r   r   r   r     s    r   r
   rm   r   r+   )r   r   )r   r   r   r   rG   r   ro   r   r3   rI   lstrip)r'   r#   r;   r   r   r   test_display_format  s    zTestStyler.test_display_formatc             C   sl   t jtjjdd}d}tjt|d |jj	d W d Q R X d}tjt|d |jj	d W d Q R X d S )Nr   z5Expected a template string or callable, got 5 instead)r*   re   z8Expected a template string or callable, got True insteadT)
r   r   r   r   r"   r,   r-   r.   rG   r   )r'   r#   r/   r   r   r   test_display_format_raises  s    z%TestStyler.test_display_format_raisesc             C   s  t jddgddggddgd}t|}|jdj }|jdksBt|d	 d
 d d dks^t|d	 d
 d d dkszt|d	 d d d dkst|d	 d d d dkst|jdj }|jdkst|d	 d
 d d dkst|d	 d
 d d dkst|d	 d d d dks&t|d	 d d d dksDt|jdj }|jdksbt|d	 d
 d d dkst|d	 d
 d d dkst|d	 d d d dkst|d	 d d d dkstd S )Ng      ?gOn @gQ|a	@g$C@r   r   )r1   rQ   r
   r   r   rm   z1.0r   z2.0z3.2z4.6z1.00z2.01z3.21z4.57r+   z1.000z2.009z3.212z4.566)r   r   r   r   ro   r   r3   )r'   r#   r!   r;   r   r   r   test_display_set_precision  s(    z%TestStyler.test_display_set_precisionc             C   sH  t jddgddggddgd}|jjdddt jd	d d f d
j }d}d}|d d	 d d |ksjt|d d d d |kst|d d	 d d dkst|jjdt jd	d d f d
j }|d d	 d d |kst|d d d d |kst|jjdt jd d
j }|d d	 d d |ks4t|d d	 d d dksRt|jjdt jd d
j }|d d	 d d |kst|d d d d |kst|jjdt jd	dgdgf d
j }|d d	 d d |kst|d d d d dkst|d d	 d d dks&t|d d d d |ksDtd S )NgSt$?g8EGr?r   r   )rQ   z{:0.1f}z{0:.2%})r   r   r   )ra   z0.1z1.123400r   r
   rm   r   z12.34%z0.123400z1.1)r   r   )r   r   rG   r   rb   ro   r3   )r'   r#   r;   r<   Zraw_11r   r   r   test_display_subset  s.    ""zTestStyler.test_display_subsetc             C   s   t jddgddggddgd}|jjdddj }|d	 d
 d d dksPt|d	 d
 d d dksltddg|d< |jjdtjdj }|d	 d
 d d dkst|d	 d
 d d dkstd S )NgSt$?g8EGr?r   r   )rQ   z{:0.1f}z{0:.2%})r   r   r   r   r
   rm   z0.1r   z12.34%r   bbbr   )r   r   r+   ZAAA)r   r   rG   r   ro   r3   strupper)r'   r#   r;   r   r   r   test_display_dict.  s    zTestStyler.test_display_dictc          '   C   s(  t jddgddgg}d}tjt|d, |jjdd t jd	dgd d f d
 W d Q R X tjt|d, |jjdd t jd	dgd d f d
 W d Q R X tjt|d |jjdd  W d Q R X tjt|d |jjdd dd
 W d Q R X d}tjt|d |jjdd dd W d Q R X d S )Nr
   r   r+   rd   zreturned the wrong shape)r*   c             S   s   dS )Nr   r   )r   r   r   r   r   <  s    z1TestStyler.test_bad_apply_shape.<locals>.<lambda>r   )ra   c             S   s   dgS )Nrh   r   )r   r   r   r   r   ?  s    c             S   s   ddddgS )Nrh   r   )r   r   r   r   r   B  s    c             S   s
   dddgS )Nrh   r   )r   r   r   r   r   E  s    z-Length mismatch: Expected axis has 3 elementsc             S   s
   dddgS )Nrh   r   )r   r   r   r   r   I  s    )ry   )r   r   r,   r-   r   rG   _applyrb   )r'   r#   r/   r   r   r   test_bad_apply_shape8  s    00zTestStyler.test_bad_apply_shapec             C   sP   dd }t jddgddgg}d}tjt|d |jj|d d	 W d Q R X d S )
Nc             S   s   dS )Nrh   r   )r   r   r   r   r   L  s    z+TestStyler.test_apply_bad_return.<locals>.fr
   r   r+   rd   zDmust return a DataFrame when passed to `Styler.apply` with axis=None)r*   )ry   )r   r   r,   r-   r.   rG   r
  )r'   r   r#   r/   r   r   r   test_apply_bad_returnK  s
    z TestStyler.test_apply_bad_returnc             C   sP   dd }t jddgddgg}d}tjt|d |jj|d d	 W d Q R X d S )
Nc             S   s   t jddgddgdS )Nr
   r   r   r   )r   rQ   )r   r   )r   r   r   r   r   U  s    z+TestStyler.test_apply_bad_labels.<locals>.fr
   r   r+   rd   z2must have identical index and columns as the input)r*   )ry   )r   r   r,   r-   r   rG   r
  )r'   r   r#   r/   r   r   r   test_apply_bad_labelsT  s
    z TestStyler.test_apply_bad_labelsc             C   sV   t jjddgdddgg}d	dd
dddddddddddddi}t|}tj|| d S )Nr   r   r   r
   r   r+   rd   re   )r   r   )r   r+   )r
   r   )r
   r
   )r
   r   )r
   r+   )r
   rd   )r
   re   )r   r   Zfrom_productr   tmassert_dict_equal)r'   r   r<   r4   r   r   r   test_get_level_lengths]  s    z!TestStyler.test_get_level_lengthsc             C   sX   t jjddddgddddgg}ddd	dd
dddddddddi}t|}tj|| d S )Nr
   r   r   r   r   r   r+   )r   r   )r   r   )r   r+   )r
   r   )r
   r
   )r
   r   )r
   r+   )r   r   from_arraysr   r  r  )r'   r   r<   r4   r   r   r    test_get_level_lengths_un_sortedl  s     z+TestStyler.test_get_level_lengths_un_sortedc             C   s  t jdddgit jjddgddggd}|jj }|d d d }dddd	d
gddd}tj|| |d d d }dddd	ddd}tj|| |d d d }dddd	ddd}tj|| |d d }	d	dddddd	dddddd	dddddg}
|	|
ks
td S )Nr   r
   r   r   r   )r   r   Trg   z	rowspan=2zrow_heading level0 row0Zlevel0_row0)rk   rm   rl   rj   r   ri   idzrow_heading level1 row0Zlevel1_row0)rk   rm   rl   rj   ri   r  Fzrow_heading level0 row1Zlevel0_row1rn   rq   rh   )rj   ri   rk   rl   rm   zblank level0zcol_heading level0 col0)	r   r   r   r  rG   ro   r  r  r3   )r'   r#   r4   Zbody_0Z
expected_0Zbody_1Z
expected_1Zbody_10Zexpected_10rn   r<   r   r   r   test_mi_sparsez  sZ    &

zTestStyler.test_mi_sparsec             C   sv   t jdd: t jdddgit jjddgddggd}|jj }W d Q R X |d	 }x|D ]}d
|d ksZtqZW d S )Nzdisplay.multi_sparseFr   r
   r   r   r   )r   r   r   )r   r8   r   r   r  rG   ro   r3   )r'   r#   r4   r   r   r   r   r   test_mi_sparse_disabled  s    &
z"TestStyler.test_mi_sparse_disabledc             C   sz   t jdddgit jjddgddggddgdd	}|jj }|d
 d }ddddddddddddg}||ksvtd S )Nr   r
   r   r   r   idx_level_0idx_level_1)r   )r   rn   zindex_name level0rg   )ri   rk   rj   zindex_name level1rq   rh   )r   r   r   r  rG   ro   r3   )r'   r#   r4   rn   r<   r   r   r   test_mi_sparse_index_names  s    



z%TestStyler.test_mi_sparse_index_namesc             C   s   t jtjdjddt jjddddgddddggdd	gd
t jjddddgddddggddgd
d}|jj }|d d }ddddddddddddddddddddddddddddddddddddg}||kst	d S )N   rd   r   r   r   r
   r   r  r  )r   ZC1ZC2Zcol_0Zcol_1)r   rQ   rn   rq   rh   rg   T)ri   rk   rm   rj   rl   zindex_name level1)ri   rk   rm   rl   rj   zcol_heading level1 col0)ri   rm   rl   rj   rk   zcol_heading level1 col1zcol_heading level1 col2zcol_heading level1 col3)
r   r   r   ZarangeZreshaper   r  rG   ro   r3   )r'   r#   r4   rn   r<   r   r   r   test_mi_sparse_column_names  sP    
&

z&TestStyler.test_mi_sparse_column_namesc             C   s>  | j jj }|d d d d s$t|d d d d s<t| j jj j }|d d d d  sft|d d d d  st| j jdjj }|d d d d stt|d dkst|d d d d st| j jdjj j }|d d d d  stt|d dkst|d d d d  s:td S )Nr   r   rl   rn   r   r   r
   )r#   rG   ro   r3   
hide_indexrr   rI   )r'   r;   ctx2Zctx3Zctx4r   r   r   test_hide_single_index  s    z!TestStyler.test_hide_single_indexc             C   s  t jdddgit jjddgddggddgdd	}|jj }|d
 d d d sTt|d
 d d d slt|d d d d st|d d d d st|jj j }|d
 d d d  st|d
 d d d  st|d d d d  st|d d d d  std S )Nr   r
   r   r   r   r  r  )r   )r   r   rl   rn   )r   r   r   r  rG   ro   r3   r  )r'   r#   ctx1r  r   r   r   test_hide_multiindex'  s    

zTestStyler.test_hide_multiindexc             C   s  | j jj }|d d d d s$t|d d d d dks@t|d d d d sXt|d d d d dkstt|d	 d d d st|d	 d d d st| j jjdj }|d d d d  st|d	 d d d  st|d	 d d d st| j jjddgj }|d d d d  s6t|d d d d  sRt|d	 d d d  snt|d	 d d d  std S )
Nrn   r   r
   rl   rm   r   r   r   r   )r#   rG   ro   r3   hide_columns)r'   r;   r   r   r   test_hide_columns_single_level?  s     z)TestStyler.test_hide_columns_single_levelc             C   s*  t jjddgddggddgd}t jjddgddggdd	gd}t jdd
gddgg||d}|jj }|d d d
 d s~t|d d d
 d st|d d d d dkst|d d d d st|d d d
 d st|d d d
 d dkst|d d d d st|d d d d dks6t|jjdj }|d d d
 d  sbt|d d d
 d  s~t|d d d
 d  st|d d d d st|jjdgj }|d d d
 d st|d d d
 d  st|d d d
 d  st|d d d d s2t|d d d d dksPt|jjdgj j }|d d d d  st|d d d
 d st|d d d
 d st|d d d d  st|d d d d  st|d d d
 d st|d d d
 d dks&td S )Nr   r   r
   r  r  )r   r   Zcol_level_0Zcol_level_1r   r+   rd   )r   rQ   rn   rl   rm   r   )r   r   )r   r
   )	r   r   r  r   rG   ro   r3   r   r  )r'   i1i2r#   r;   r   r   r   test_hide_columns_mult_levelsV  sB    
z(TestStyler.test_hide_columns_mult_levelsc             C   sf   dd }| j jj|ddd}d|j ks,tdd }| j j}|j|d	fd
dd}|d
d|fksbtd S )Nc             S   s   | j d| d| S )NzDataframe with a = z	 and b = )r   )r%   r   r   r   r   r   set_caption_from_template  s    z7TestStyler.test_pipe.<locals>.set_caption_from_templater   r   )r   zDataframe with a = A and b = Bc             S   s
   | ||fS )Nr   )r   r   r%   r   r   r   r     s    zTestStyler.test_pipe.<locals>.fr%   r
   r   )r   r   )r#   rG   piperO   r3   )r'   r%  r%   r   r4   r   r   r   	test_pipe  s    zTestStyler.test_pipec             C   sD   t jdggd}t|ddd}|j  |j }|jddks@td S )	Nr   )r1   _F)rM   Zcell_idsz<td  class="data row0 col0" >r
   r   )r   r   r   rO   findr3   )r'   r#   r%   r!   r   r   r   test_no_cell_ids  s
    zTestStyler.test_no_cell_idsN)r   )W__name__
__module____qualname__r)   r0   r5   r7   r9   r=   r>   r?   rD   rF   rK   rP   rS   rT   r`   rc   rp   rs   rt   ru   rz   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   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      s   		
	

(&&+V "'#
	

	(


		B
;0r   c            	   @   s   e Zd Zdd Zejjdddddgdd	d
gifdddd
gdddgifgdd Zejjdddd ddggdd Ze	j
dd Zdd Zdd ZdS )!TestStylerMatplotlibDepc             C   s   t jddgddggddgd}xbdD ]Z}|jj|dj j}td	d
 |j D sVt|d |d ksjt|d |d ks$tq$W |jjt j	d dj j}|d ddgkstd S )Nr
   r   rd   r   r   )rQ   YlOrRd)cmapc             s   s   | ]}d |d kV  qdS )r   r   Nr   )rw   r   r   r   r   r     s    zCTestStylerMatplotlibDep.test_background_gradient.<locals>.<genexpr>r   )ra   zbackground-color: #fff7fbzcolor: #000000)Nr/  )r   r   )r   r
   )r
   r   )r
   r
   )r
   r   )r
   r   )
r   r   rG   background_gradientrH   r;   r   r[   r3   rb   )r'   r#   c_mapr4   r   r   r   test_background_gradient  s    
z0TestStylerMatplotlibDep.test_background_gradientzc_map,expectedNr   zbackground-color: #440154zcolor: #f1f1f1r
   zbackground-color: #fde725zcolor: #000000r/  zbackground-color: #ffffcczbackground-color: #800026c             C   s8   t jddgdgd}|jj|dj j}||ks4td S )Nr
   r   r   )rQ   )r0  )r   r   rG   r1  rH   r;   r3   )r'   r2  r<   r#   r4   r   r   r   test_text_color_threshold  s    z1TestStylerMatplotlibDep.test_text_color_thresholdtext_color_thresholdg?1r   c          
   C   sR   t jddgddggddgd}d}tjt|d |jj|d	j  W d Q R X d S )
Nr
   r   rd   r   r   )rQ   z3`text_color_threshold` must be a value from 0 to 1.)r*   )r5  )r   r   r,   r-   r   rG   r1  rH   )r'   r5  r#   r/   r   r   r    test_text_color_threshold_raises  s
    z8TestStylerMatplotlibDep.test_text_color_threshold_raisesc             C   sF  t jddgddggddgd}ddg}d	d
g}ddg}|jjdddj j}|d |ks\t|d |kslt|d |ks|t|d |kst|jjdddj j}|d |kst|d |kst|d |kst|d |k st|jjdd dj j}|d |kst|d |kst|d |ks0t|d |ksBtd S )Nr
   r   rd   r   r   )rQ   zbackground-color: #f7fbffzcolor: #000000zbackground-color: #08306bzcolor: #f1f1f1zbackground-color: #abd0e6ZBluesr   )r0  ry   )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   rG   r1  rH   r;   r3   )r'   r#   lowhighr   r4   r   r   r   test_background_gradient_axis  s&    z5TestStylerMatplotlibDep.test_background_gradient_axisc             C   sP   t jtd}|jjdddj j}|d |d ks8t|d	 |d
 ksLtd S )Nre   r
   r+   )r   r   r   rd   )r   r   )r
   r   )rd   r   )r+   r   )r   r   r    rG   r1  rH   r;   r3   )r'   r#   r;   r   r   r   "test_background_gradient_vmin_vmax  s    z:TestStylerMatplotlibDep.test_background_gradient_vmin_vmaxc             C   s   t jtdj }t jtdddj }|jj j j}|jj j j}|d |d ks\t|d	 |d
 kspt|d |d kstd S )Nr+   ZInt64)Zdtyper   r
   r   )r   r   )r   r   )r
   r   )r
   r   )r   r   )r   r   )	r   r   r    Zto_framerG   r1  rH   r;   r3   )r'   Zdf1Zdf2r  r  r   r   r   test_background_gradient_int64  s    z6TestStylerMatplotlibDep.test_background_gradient_int64)r   r   )r
   r   )r   r   )r
   r   r   )r+  r,  r-  r3  r,   markZparametrizer4  r7  tdskip_if_no_mplr:  r;  r<  r   r   r   r   r.    s   
"	r.  c              C   sB   ddddddddd	d
dddddddh} t tjj}|| ks>td S )NZbefore_stylerG   r   Zbefore_cellstyler   Zbefore_tabletabler   theadtbodyZafter_tableZbefore_head_rowsZhead_trZafter_head_rowsZbefore_rowstrZ
after_rows)setr   templateblocksr3   )r<   r4   r   r   r   test_block_names  s&    rG  c             C   s   | j djd}|jtjd tjt| jdd}t|tsDt	|j
tj
k	sTt	|jtjk	sdt	|tjdddgi}|j st	d S )NZ	templatesz
myhtml.tplz        {% extends "html.tpl" %}
        {% block table %}
        <h1>{{ table_title|default("My Table") }}</h1>
        {{ super() }}
        {% endblock table %}r   r
   r   )mkdirr   writetextwrapdedentr   Zfrom_custom_templater  
issubclassr3   envrE  r   r   rO   )Ztmpdirpr4   r%   r   r   r   test_from_custom_template  s    rO  )r@   r   rJ  Znumpyr   r,   Zpandas.util._test_decoratorsutilZ_test_decoratorsr>  Zpandasr   r   Zpandas._testingZ_testingr  Zimportorskipr   Zpandas.io.formats.styler   r   r   r?  r.  rG  rO  r   r   r   r   <module>   s6   

             ]