a
    é´«j£  ã                   @  sf   d dl mZ d dlmZ d dlZd dlZer8d dlm	Z	 G dd„ dƒZ
ddœd	d
„Zedkrbeƒ  dS )é    )Úannotations)ÚTYPE_CHECKINGN)ÚIterablec                   @  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   úT/var/www/html/laksyashrimp/venv/lib/python3.9/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>*   ó    z*TablePlotter._get_cells.<locals>.<genexpr>r   c                 3  s   | ]}ˆ   |¡d  V  qdS ©é   Nr   r   r    r   r   r!   +   r"   r$   c                   s   g | ]}ˆ   |¡d  ‘qS )r   r   r   r    r   r   Ú
<listcomp>-   r"   z+TablePlotter._get_cells.<locals>.<listcomp>c                   s   g | ]}ˆ   |¡d  ‘qS )r$   r   r   r    r   r   r%   .   r"   )Ú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%   B   r"   z%TablePlotter.plot.<locals>.<listcomp>)Úfigsizec                 3  s   | ]}ˆ   |¡d  V  qdS r#   r   r   r    r   r   r!   Q   r"   z$TablePlotter.plot.<locals>.<genexpr>c                 3  s   | ]}ˆ   |¡d  V  qdS r   r   r   r    r   r   r!   R   r"   ç      ð?)ÚtitleÚheightÚResultgÍÌÌÌÌÌð?gÍÌÌÌÌÌì?gš™™™™™©?gffffffî?)ÚtopÚbottomr(   r)   c                 3  s   | ]}ˆ   |¡d  V  qdS r   r   r   r    r   r   r!   [   r"   r$   g333333ë?)Z
matplotlibr1   Úmatplotlib.pyplotÚpyplotÚ
isinstanceÚlistr2   r-   r   r   ÚfigureZGridSpecÚlenr&   Ú	enumerateÚzipZadd_subplotÚ_make_tableZsubplotZsubplots_adjustÚnpr   )r   r(   r)   r0   r*   r1   Úpltr,   r+   r3   ZfigÚgsZmax_left_colsZmax_left_rowsÚiÚ_leftZ_labelÚaxZmax_rowsr6   r   Úspr   r    r   Úplot1   sD    


zTablePlotter.plotc                 C  s:   t |tjƒr,|jdu r$|jdd�}n| ¡ }| d¡}|S )zF
        Convert each input to appropriate for table outplot.
        NÚ )ÚnameÚNaN)r<   ÚpdZSeriesrL   Zto_frameZfillna)r   Údatar   r   r   r2   l   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   rF   ©rO   r   r   r%   …   s   z.TablePlotter._insert_index.<locals>.<listcomp>)
Úcopyr   r   ÚinsertÚrangerQ   r   rN   Ú	DataFrameÚconcat)r   rO   Úidx_nlevelsrF   Úcol_nlevelsr   ÚvaluesZcol_dfr   rR   r   Ú_insert_indexx   s"    
ÿ
zTablePlotter._insert_indexNÚstrzfloat | None)r5   r6   r   c                 C  s  |d u r|  d¡ d S ddlm} |jj}|jj}|  |¡}|j||dd�}| | j	¡ |d u 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é	   )Úlocr4   r$   Zcelldéÿÿÿÿz#AAAAAA)ÚsizeÚoff)Zset_visibleÚpandasr]   r   r   r   r[   ÚtableZset_fontsizer   r?   Ú
propertiesÚitemsZset_facecolorZ
set_heightÚ	set_titleÚaxis)r   rH   r   r5   r6   r]   rX   rY   ÚtbÚpropsÚrÚcÚcellr   r   r   rB   Ž   s,    


zTablePlotter._make_table)r   r   r   )r   T)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r-   rJ   r2   r[   rB   r   r   r   r   r      s      ü
;r   r
   r   c                  C  s  dd l m}  tƒ }t g d¢g d¢g d¢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 	g d¢¡}tj 	ddg¡}tjg d¢g d¢dœ|d�}||_
|j||dgd� |  ¡  d S )Nr   )é
   é   é   )é   é   é   )é   é   é    )ÚAÚBÚCrr   rt   rx   rz   )r{   r}   Údf1Údf2Tr/   )ÚXÚZr$   )rh   F)©r$   r{   ©r$   r|   )r$   r}   )é   r{   )r„   r|   )r„   r}   r‚   rƒ   )r$   r„   é   é   é   é   )r‡   rˆ   é   é   r^   rr   )Úv1Úv2)r   Údf3)r0   )r:   r;   r   rN   rV   rJ   rW   ÚshowZ
MultiIndexÚfrom_tuplesr   )rD   Úpr~   r   r�   ÚidxÚcolumnr   r   r   Úmain­   s&    $ÿÿr“   Ú__main__)Ú
__future__r   Útypingr   ÚnumpyrC   rc   rN   Úcollections.abcr   r   r“   rn   r   r   r   r   Ú<module>   s    !