a
    <b                     @  sP  d dl mZ d dlZd dlZG dd dZedkrLd dlm	Z
 e Zeg dg dg dd	Zed
dgddgdZejeegeeegddgdd e
  e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
  ejg dZejddgZejg dg ddedZee_ejeedgd e
  dS )     )annotationsNc                   @  st   e Zd ZdZd ddddddZd	d
dddZd
dddZd!ddddZdd Zdd Z	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
cell_widthcell_height	font_sizec                 C  s   || _ || _|| _d S )Nr   )selfr	   r
   r    r   e/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/pandas/util/_doctools.py__init__   s    zTablePlotter.__init__zpd.DataFrameztuple[int, int])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  |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_cellsNTbool)r'   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   Nc                   s   g | ]}  |qS r   )_convr   r   r   r   r"   =   r   z%TablePlotter.plot.<locals>.<listcomp>)figsizec                 3  s   | ]}  |d  V  qdS r    r   r   r   r   r   r   L   r   z$TablePlotter.plot.<locals>.<genexpr>c                 3  s   | ]}  |d  V  qdS r   r   r   r   r   r   r   M   r         ?titleheightResultg?g?g?gffffff?)topZbottomr%   r&   c                 3  s   | ]}  |d  V  qdS r   r   r   r   r   r   r   V   r   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'   r4   pltr)   r(   r-   ZfigZgsZmax_left_colsZmax_left_rowsillabelaxZmax_rowsr1   r   spr   r   r   plot,   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)r7   pdZSeriesrH   Zto_frameZfillna)r   datar   r   r   r,   g   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   rA   rK   r   r   r"      s   z.TablePlotter._insert_index.<locals>.<listcomp>)
copyr   r   insertrangerM   r   rJ   	DataFrameconcat)r   rK   idx_nlevelsrA   col_nlevelsr   valuesZcol_dfr   rN   r   _insert_indexs   s"    

zTablePlotter._insert_indexstrzfloat | Noner/   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   	   )locr.   r!   Zcelldz#AAAAAA)sizeoff)Zset_visibleZpandas.plottingplottingr   r   r   rW   tableZset_fontsizer   r:   Z
propertiesitemsZset_facecolorZ
set_height	set_titleaxis)r   rD   r   r0   r1   r^   rT   rU   tbpropsrccellr   r   r   r=      s,    


zTablePlotter._make_table)r   r   r   )NT)N)__name__
__module____qualname____doc__r   r   r*   rF   r,   rW   r=   r   r   r   r   r      s      
;r   __main__)
         )         )          )ABCrm   ro   rs   ru   )rv   rx   df1df2T)r?   r'   )XZr!   )rb   F)r!   rv   r!   rw   )r!   rx   )   rv   )r   rw   )r   rx   r}   r~   )r!   r               )r   r         rY   rm   )v1v2)r   df3)r?   )
__future__r   Znumpyr>   ZpandasrJ   r   rh   r5   r6   r@   prR   ry   rz   rF   rS   showr   Z
MultiIndexfrom_tuplesidxr   r   r   r   r   r   <module>   s0    !
$