U
     U‚gb  ã                   @  sV   d dl mZ d dlmZ d dlZd dlZG dd„ dƒZddœdd	„Z	e
d
krRe	ƒ  dS )é    )Úannotations)ÚIterableNc                   @  sz   e Zd ZdZd#dddddœdd	„Zd
ddœdd„Zddœdd„Zd$dddœdd„Zdd„ Zdd„ Z	d%dddd œd!d"„Z
dS )&ÚTablePlotterzg
    Layout some DataFrames in vertical/horizontal layout for explanation.
    Used in merging.rst
    ç®Gáz®×?ç      Ð?ç      @ÚfloatÚNone)Ú
cell_widthÚcell_heightÚ	font_sizeÚreturnc                 C  s   || _ || _|| _d S )N)r
   r   r   )Úselfr
   r   r   © r   ú9/tmp/pip-unpacked-wheel-u1j4u1ka/pandas/util/_doctools.pyÚ__init__   s    zTablePlotter.__init__zpd.DataFrameztuple[int, int])Údfr   c                 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 ƒƒˆ  |¡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   ©Ú.0r   ©r   r   r   Ú	<genexpr>'   s     z*TablePlotter._get_cells.<locals>.<genexpr>r   c                 3  s   | ]}ˆ   |¡d  V  qdS ©é   Nr   r   r   r   r   r    (   s     r"   c                   s   g | ]}ˆ   |¡d  ‘qS )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#   +   s     )ÚmaxÚsumr   )r   ÚleftÚrightÚverticalÚvcellsÚhcellsr   r   r   Ú
_get_cells!   s    &&&&zTablePlotter._get_cellsr   TzIterable[str]Úbool©Úlabelsr(   c              	     s2  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�}
|�r^| t|ƒ|¡}t‡ fdd„|D ƒƒ}t‡ fd	d„|D ƒƒ}tt||ƒƒD ]8\}\}}|
 ||d|…f ¡}ˆ j|||d
| d� qà| |dd…|d…f ¡}ˆ j||dd| d� |
jddddd� nÐt‡ fdd„||g D ƒƒ}d
t |¡ }| d|¡}d}t||ƒD ]P\}}ˆ  |¡}|
 |d|||d  …f ¡}ˆ j||||d� ||d 7 }�q¢| |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   )ÚgridspecNc                   s   g | ]}ˆ   |¡‘qS r   )Ú_convr   r   r   r   r#   ?   s     z%TablePlotter.plot.<locals>.<listcomp>)Úfigsizec                 3  s   | ]}ˆ   |¡d  V  qdS r!   r   r   r   r   r   r    N   s     z$TablePlotter.plot.<locals>.<genexpr>c                 3  s   | ]}ˆ   |¡d  V  qdS r   r   r   r   r   r   r    O   s     ç      ð?)ÚtitleÚheightZResultgÍÌÌÌÌÌð?gÍÌÌÌÌÌì?gš™™™™™©?gffffffî?)ÚtopZbottomr&   r'   c                 3  s   | ]}ˆ   |¡d  V  qdS r   r   r   r   r   r   r    X   s     r"   g333333ë?)Z
matplotlibr/   Úmatplotlib.pyplotÚpyplotÚ
isinstanceÚlistr0   r+   r
   r   ÚfigureZGridSpecÚlenr$   Ú	enumerateÚzipZadd_subplotÚ_make_tableZsubplotZsubplots_adjustÚnpr   )r   r&   r'   r.   r(   r/   Úpltr*   r)   r1   ZfigZgsZmax_left_colsZmax_left_rowsÚiÚ_leftÚ_labelÚaxZmax_rowsr4   r   Úspr   r   r   Úplot.   sD    


zTablePlotter.plotc                 C  s:   t |tjƒr,|jdkr$|jdd�}n| ¡ }| d¡}|S )zF
        Convert each input to appropriate for table outplot.
        NÚ )ÚnameÚNaN)r8   ÚpdZSeriesrH   Zto_frameZfillna)r   Údatar   r   r   r0   i   s    

zTablePlotter._convc                   s²   ˆ   ¡ ‰ ˆ jj}|dkr*ˆ  ddˆ j¡ n*t|ƒD ] }ˆ  |d|› �ˆ j |¡¡ q2ˆ jj}|dkr®ˆ j d¡}‡ fdd„td|ƒD ƒ}t |¡}|jˆ _t 	|ˆ g¡‰ |ˆ _ˆ S )Nr"   r   ZIndexc                   s   g | ]}ˆ j  |¡j‘qS r   )r   Ú_get_level_valuesZ_values)r   rA   ©rK   r   r   r#   ‚   s    z.TablePlotter._insert_index.<locals>.<listcomp>)
Úcopyr   r   ÚinsertÚrangerL   r   rJ   Ú	DataFrameÚconcat)r   rK   Úidx_nlevelsrA   Úcol_nlevelsr   ÚvaluesZcol_dfr   rM   r   Ú_insert_indexu   s"    
ÿ
zTablePlotter._insert_indexNÚstrzfloat | None)r3   r4   r   c                 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  }| ¡ }	|	d  ¡ D ]`\\}
}}|d	kr¤|  d¡ n6|
|k rÀ||k rÀ|  d¡ n|
|k sÐ||k rÚ| d
¡ | |¡ q„|j|| j	d� | d¡ d S )NFr   )Úplottingé	   )Úlocr2   r"   Zcelldéÿÿÿÿz#AAAAAA)ÚsizeÚoff)Zset_visibleÚpandasrX   r   r   r   rV   ÚtableZset_fontsizer   r;   Z
propertiesÚitemsZset_facecolorZ
set_heightÚ	set_titleÚaxis)r   rD   r   r3   r4   rX   rS   rT   ÚtbÚpropsÚrÚcÚcellr   r   r   r>   ‹   s,    


zTablePlotter._make_table)r   r   r   )r   T)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r+   rF   r0   rV   r>   r   r   r   r   r   
   s      ü
;r   r	   r   c                  C  s:  dd l m}  tƒ }t dddgdddgdd	d
gdœ¡}t ddgdd
gdœ¡}|j||gt ||g¡ddgdd� |  ¡  t ddgdd
gdœ¡}|j||gtj||gdd�ddgdd� |  ¡  tj 	ddddddg¡}tj 	ddg¡}tjddddddgddd d!d"dgd#œ|d$�}||_
|j||d%gd&� |  ¡  d S )'Nr   é
   é   é   é   é   é   é   é   é    )ÚAÚBÚC)ru   rw   Údf1Údf2Tr-   )ÚXÚZr"   )rb   F)r"   ru   )r"   rv   )r"   rw   )é   ru   )r|   rv   )r|   rw   r|   é   é   é   é   é   é   rY   )Úv1Zv2)r   Údf3)r.   )r6   r7   r   rJ   rQ   rF   rR   ÚshowZ
MultiIndexÚfrom_tuplesr   )r@   Úprx   ry   r„   ÚidxÚcolumnr   r   r   Úmainª   s,    $$   ÿÿ,rŠ   Ú__main__)Ú
__future__r   Útypingr   Znumpyr?   r^   rJ   r   rŠ   rh   r   r   r   r   Ú<module>   s    !