U
    ¿mœdb  ã                   @  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   úN/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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ÚheightÚResultgÍÌÌÌÌÌð?gÍÌÌÌÌÌì?gš™™™™™©?gffffffî?)ÚtopÚ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   ZfigureZGridSpecÚlenr$   Ú	enumerateÚzipZadd_subplotÚ_make_tableZsubplotZsubplots_adjustÚnpr   )r   r&   r'   r.   r(   r/   Úpltr*   r)   r1   ZfigÚgsZmax_left_colsZmax_left_rowsÚiÚ_leftZ_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)r:   ÚpdZSeriesrI   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   ÚIndexc                   s   g | ]}ˆ j  |¡j‘qS r   )r   Ú_get_level_valuesZ_values)r   rC   ©rL   r   r   r#   ‚   s    z.TablePlotter._insert_index.<locals>.<listcomp>)
Úcopyr   r   ÚinsertÚrangerN   r   rK   Ú	DataFrameÚconcat)r   rL   Úidx_nlevelsrC   Úcol_nlevelsr   ÚvaluesZcol_dfr   rO   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ÚpandasrZ   r   r   r   rX   ÚtableZset_fontsizer   r<   Ú
propertiesÚitemsZset_facecolorZ
set_heightÚ	set_titleÚaxis)r   rE   r   r3   r4   rZ   rU   rV   Ú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+   rG   r0   rX   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)rx   rz   Údf1Údf2Tr-   )ÚXÚZr"   )re   F)r"   rx   )r"   ry   )r"   rz   )é   rx   )r   ry   )r   rz   r   é   é   é   é   é   é   r[   )Zv1Zv2)r   Údf3)r.   )r8   r9   r   rK   rS   rG   rT   ÚshowZ
MultiIndexÚfrom_tuplesr   )rA   Úpr{   r|   r†   ÚidxÚcolumnr   r   r   Úmainª   s,    $$   ÿÿ,rŒ   Ú__main__)Ú
__future__r   Útypingr   Únumpyr@   r`   rK   r   rŒ   rk   r   r   r   r   Ú<module>   s    !