a
    Pf                     @  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
    Gz?      ?      @floatNone)
cell_widthcell_height	font_sizereturnc                 C  s   || _ || _|| _d S )N)r   r   r   )selfr   r   r    r   N/var/www/ai-form-bot/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 nt 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   Z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SeriesrK   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   rE   rN   r   r   r%      s   z.TablePlotter._insert_index.<locals>.<listcomp>)
copyr   r   insertrangerP   r   rM   	DataFrameconcat)r   rN   idx_nlevelsrE   col_nlevelsr   valuesZcol_dfr   rQ   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celldz#AAAAAA)sizeoff)Zset_visiblepandasr\   r   r   r   rZ   tableZset_fontsizer   r>   
propertiesitemsZset_facecolorZ
set_height	set_titleaxis)r   rG   r   r5   r6   r\   rW   rX   tbpropsrccellr   r   r   rA      s,    


zTablePlotter._make_table)r   r   r   )r   T)N)__name__
__module____qualname____doc__r   r   r-   rI   r2   rZ   rA   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Crq   rs   rw   ry   )rz   r|   df1df2Tr/   )XZr$   )rg   F)r$   rz   r$   r{   )r$   r|   )   rz   )r   r{   )r   r|   r   r   )r$   r               )r   r         r]   rq   )Zv1Zv2)r   df3)r0   )r:   r;   r   rM   rU   rI   rV   showZ
MultiIndexfrom_tuplesr   )rC   pr}   r~   r   idxcolumnr   r   r   main   s&    $r   __main__)
__future__r   typingr   numpyrB   rb   rM   collections.abcr   r   r   rm   r   r   r   r   <module>   s    !