B
    x\                 @   s  d dl Zd dlmZ d dlZG dd deZG dd deZ	e
dkr|d dlmZ e Zeddd	gd
ddgdddgdZedd	gddgdZejeegeeegddgdd e  edd	gddgdZejeegejeegddddgdd e  ejddddddgZejddgZejdd d!d"d#d$gd#d$d%d&d'dgd(ed)Zee_ejeed*gd+ e  dS ),    Nc               @   sN   e Zd ZdZdddZdd Zd	d
 ZdddZdd Zdd Z	dddZ
dS )TablePlotterzg
    Layout some DataFrames in vertical/horizontal layout for explanation.
    Used in merging.rst
    Gz?      ?      @c             C   s   || _ || _|| _d S )N)
cell_widthcell_height	font_size)selfr   r   r    r
   4lib/python3.7/site-packages/pandas/util/_doctools.py__init__   s    zTablePlotter.__init__c             C   s"   |j \}}||jj ||jj fS )zA
        Calculate table chape considering index levels.
        )shapecolumnsnlevelsindex)r	   dfrowcolr
   r
   r   _shape   s    
zTablePlotter._shapec                s   |rPt t fdd|D  |d }t  fdd|D  |d  }nLt  fdd|D  |d g }t fdd|D  |d g }||fS )	zQ
        Calculate appropriate figure size based on left and right data.
        c             3   s   | ]}  |d  V  qdS )r   N)r   ).0l)r	   r
   r   	<genexpr>"   s    z*TablePlotter._get_cells.<locals>.<genexpr>r   c             3   s   | ]}  |d  V  qdS )   N)r   )r   r   )r	   r
   r   r   $   s    r   c                s   g | ]}  |d  qS )r   )r   )r   r   )r	   r
   r   
<listcomp>'   s    z+TablePlotter._get_cells.<locals>.<listcomp>c                s   g | ]}  |d  qS )r   )r   )r   r   )r	   r
   r   r   )   s    )maxsumr   )r	   leftrightverticalvcellshcellsr
   )r	   r   
_get_cells   s    zTablePlotter._get_cellsNTc          	      s:  ddl m} ddlm} t|ts(|g} fdd|D } |} |||\}}|rp j|  j	| f}	n j|  j	| f}	|j
|	d}
|rb|t||}t fdd|D }t fdd|D }xJtt||D ]8\}\}}|
||d|f } j|||d	| d
 qW ||dd|df } j||dd| d
 |
jddddd nt fdd||g D }d	t| }|d|}d}x^t||D ]P\}} |}|
|d|||d  f } j||||d
 ||d 7 }qW ||d|df } j||d|d
 |
jddddd |
S )a  
        Plot left / right DataFrames in specified layout.

        Parameters
        ----------
        left : list of DataFrames before operation is applied
        right : DataFrame of operation result
        labels : list of str to be drawn as titles of left DataFrames
        vertical : bool
            If True, use vertical layout. If False, use horizontal layout.
        r   Nc                s   g | ]}  |qS r
   )_conv)r   r   )r	   r
   r   r   >   s    z%TablePlotter.plot.<locals>.<listcomp>)figsizec             3   s   | ]}  |d  V  qdS )r   N)r   )r   r   )r	   r
   r   r   M   s    z$TablePlotter.plot.<locals>.<genexpr>c             3   s   | ]}  |d  V  qdS )r   N)r   )r   r   )r	   r
   r   r   N   s    g      ?)titleheightZResultg?g?g?gffffff?)topZbottomr   r   c             3   s   | ]}  |d  V  qdS )r   N)r   )r   r   )r	   r
   r   r   X   s    r   g333333?)matplotlib.pyplotpyplotZmatplotlib.gridspecgridspec
isinstancelistr"   r!   r   r   ZfigureZGridSpeclenr   	enumeratezipZadd_subplot_make_tableZsubplotZsubplots_adjustnpr   )r	   r   r   labelsr   pltr)   r    r   r#   ZfigZgsZmax_left_colsZmax_left_rowsir   ZlabelaxZmax_rowsr%   Zspr
   )r	   r   plot-   sF    



zTablePlotter.plotc             C   s:   t |tjr,|jdkr$|jdd}n| }|d}|S )z3Convert each input to appropriate for table outplotN )nameZNaN)r*   pdZSeriesr7   Zto_frameZfillna)r	   datar
   r
   r   r"   i   s    

zTablePlotter._convc                s        jj}|dkr* dd j n.x,t|D ] } |d| j| q4W  jj}|dkr jd} fddtd|D }t	|}|j _t
| g | _ S )Nr   r   ZIndexzIndex{0}c                s   g | ]} j |jqS r
   )r   _get_level_valuesvalues)r   r3   )r9   r
   r   r      s   z.TablePlotter._insert_index.<locals>.<listcomp>)copyr   r   insertrangeformatr:   r   r8   	DataFrameconcat)r	   r9   idx_nlevelsr3   col_nlevelsr   r;   Zcol_dfr
   )r9   r   _insert_indexs   s"    

zTablePlotter._insert_indexc             C   s
  |d kr| d d S dd lm} |jj}|jj}| |}|j||dd}|| j	 |d krpdt
|d  }| }	xrt|	d D ]`\\}
}}|dkr| d n6|
|k r||k r| d n|
|k s||k r|d	 || qW |j|| j	d
 |d d S )NFr   	   )Zlocg      ?r   Zcelldz#AAAAAA)sizeZoff)Zset_visibleZpandas.plottingplottingr   r   r   rD   tableZset_fontsizer   r,   Z
propertiescompatZ	iteritemsZset_facecolorZ
set_heightZ	set_titleaxis)r	   r4   r   r$   r%   rH   rB   rC   tbZpropsrcZcellr
   r
   r   r/      s,    


zTablePlotter._make_table)r   r   r   )NT)N)__name__
__module____qualname____doc__r   r   r!   r5   r"   rD   r/   r
   r
   r
   r   r      s   

<
r   c               @   s   e Zd ZdS )_WritableDocN)rO   rP   rQ   r
   r
   r
   r   rS      s   rS   __main__
                            )ABC)r^   r`   df1df2T)r1   r   )XZr   )rK   F)r   r^   )r   r_   )r   r`   )   r^   )re   r_   )re   r`   re                     rE   )Zv1Zv2)r   df3)r1   )Znumpyr0   Zpandas.compatrJ   Zpandasr8   objectr   typerS   rO   r'   r(   r2   pr@   ra   rb   r5   rA   Zshowrl   Z
MultiIndexZfrom_tuplesidxr   r   r
   r
   r
   r   <module>   s<    !


