3
qd                 @   sp  d dl mZmZ d dlZd dlZG dd dZedkrld dl	j
Ze Zejdddgd	d
dgdddgdZejddgddgdZejeegejeegddgdd ej  ej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j  ejjd(d)d*d+d,d-gZej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j  dS )0    )OptionalTupleNc               @   s   e Zd ZdZdeeedddZejee	e	f dd	d
Z
ee	e	f dddZdedddZdd Zdd Zdeee dddZdS )TablePlotterzg
    Layout some DataFrames in vertical/horizontal layout for explanation.
    Used in merging.rst
    Gz?      ?      @)
cell_widthcell_height	font_sizec             C   s   || _ || _|| _d S )N)r   r	   r
   )selfr   r	   r
    r   7/tmp/pip-build-7vycvbft/pandas/pandas/util/_doctools.py__init__   s    zTablePlotter.__init__)dfreturnc             C   s"   |j \}}||jj ||jj fS )zA
        Calculate table shape considering index levels.
        )shapecolumnsnlevelsindex)r   r   rowcolr   r   r   _shape   s    
zTablePlotter._shape)r   c                s   |rPt t fdd|D  j|d }t  fdd|D  j|d  }nLt  fdd|D  j|d g }t fdd|D  j|d g }||fS )	zQ
        Calculate appropriate figure size based on left and right data.
        c             3   s   | ]} j |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   | ]} j |d  V  qdS )   N)r   )r   r   )r   r   r   r   &   s    r   c                s   g | ]} j |d  qS )r   )r   )r   r   )r   r   r   
<listcomp>(   s    z+TablePlotter._get_cells.<locals>.<listcomp>c                s   g | ]} j |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_cellsNT)r!   c                s6  ddl j}ddlj}t|ts$|g} fdd|D } j|} j|||\}}|rl j|  j	| f}	n j|  j	| f}	|j
|	d}
|r^|jt||}t fdd|D }t fdd|D }xJtt||D ]8\}\}}|
j||d|f } j|||d	| d
 qW |j|dd|df } j||dd| d
 |
jddddd nt fdd||g D }d	tj| }|jd|}d}x^t||D ]P\}} j|}|
j|d|||d  f } j||||d
 ||d 7 }qW |j|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, default True
            If True, use vertical layout. If False, use horizontal layout.
        r   Nc                s   g | ]} j |qS r   )_conv)r   r   )r   r   r   r   =   s    z%TablePlotter.plot.<locals>.<listcomp>)figsizec             3   s   | ]} j |d  V  qdS )r   N)r   )r   r   )r   r   r   r   L   s    z$TablePlotter.plot.<locals>.<genexpr>c             3   s   | ]} j |d  V  qdS )r   N)r   )r   r   )r   r   r   r   M   s    g      ?)titleheightZResultg?g?g?gffffff?)topZbottomr   r    c             3   s   | ]} j |d  V  qdS )r   N)r   )r   r   )r   r   r   r   V   s    r   g333333?)Zmatplotlib.gridspecgridspecmatplotlib.pyplotpyplot
isinstancelistr%   r$   r   r	   figureZGridSpeclenr   	enumeratezipZadd_subplot_make_tableZsubplotZsubplots_adjustnpr   )r   r   r    labelsr!   r*   pltr#   r"   r&   ZfigZgsZmax_left_colsZmax_left_rowsir   labelaxZmax_rowsr(   spr   )r   r   plot,   sD    




zTablePlotter.plotc             C   s:   t |tjr,|jdkr$|jdd}n|j }|jd}|S )zF
        Convert each input to appropriate for table outplot.
        N )nameNaN)r-   pdZSeriesr=   Zto_frameZfillna)r   datar   r   r   r%   g   s    

zTablePlotter._convc                s    j    jj}|dkr* jdd j n.x,t|D ] } j|d|  jj| q4W  jj}|dkr jjd} fddtd|D }tj|}|j _tj	| g | _ S )Nr   r   Indexc                s   g | ]} j j|jqS r   )r   _get_level_valuesZ_values)r   r7   )r@   r   r   r      s    z.TablePlotter._insert_index.<locals>.<listcomp>)
copyr   r   insertrangerB   r   r?   	DataFrameconcat)r   r@   idx_nlevelsr7   col_nlevelsr   valuesZcol_dfr   )r@   r   _insert_indexs   s     
zTablePlotter._insert_index)r'   r(   c             C   s  |d kr|j d d S dd lj}|jj}|jj}| j|}|j||dd}|j| j	 |d krndt
|d  }|j }	xp|	d j D ]`\\}
}}|dkr|j d n6|
|k r||k r|j d n|
|k s||k r|jd |j| qW |j|| j	d	 |jd
 d S )NFr   	   )locg      ?r   Zcelldz#AAAAAA)sizeoff)Zset_visibleZpandas.plottingplottingr   r   r   rK   tableZset_fontsizer
   r0   Z
propertiesitemsZset_facecolorZ
set_height	set_titleaxis)r   r9   r   r'   r(   rQ   rH   rI   tbpropsrccellr   r   r   r3      s,    



zTablePlotter._make_table)r   r   r   )NT)N)__name__
__module____qualname____doc__floatr   r?   rF   r   intr   r$   boolr;   r%   rK   strr   r3   r   r   r   r   r      s     ;r   __main__
                            )ABC)rm   ro   df1df2T)r5   r!   )XZr   )rU   Frm   rn   ro                        rL   )Zv1Zv2)r   df3)r5   )r   rm   )r   rn   )r   ro   )rt   rm   )rt   rn   )rt   ro   )r   rm   )r   rn   )typingr   r   numpyr4   Zpandasr?   r   r[   r+   r,   r6   prF   rp   rq   r;   rG   showr{   Z
MultiIndexfrom_tuplesidxr   r   r   r   r   r   <module>   s,    !

$$$,