o
    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	Z	e
d
kr)e	  dS dS )    )annotations)IterableNc                   @  s^   e Zd ZdZ			d'd(ddZd)ddZd*ddZd+d,ddZdd Zdd Z	d-d.d%d&Z
d S )/TablePlotterzg
    Layout some DataFrames in vertical/horizontal layout for explanation.
    Used in merging.rst
    Gz?      ?      @
cell_widthfloatcell_height	font_sizereturnNonec                 C  s   || _ || _|| _d S N)r   r
   r   )selfr   r
   r    r   Z/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/util/_doctools.py__init__   s   
zTablePlotter.__init__dfpd.DataFrametuple[int, int]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._shapec                   s   |r+t t fdd|D  |d }t  fdd|D  |d  }||fS t  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      | ]
}  |d  V  qdS r   Nr   .0r   r   r   r   	<genexpr>'       z*TablePlotter._get_cells.<locals>.<genexpr>r   c                 3  r      Nr   r    r"   r   r   r#   (   r$   r&   c                      g | ]	}  |d  qS )r   r   r    r"   r   r   
<listcomp>*       z+TablePlotter._get_cells.<locals>.<listcomp>c                   r'   )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   TlabelsIterable[str]r.   boolc              	     s0  ddl m} ddlm} t|ts|g} fdd|D } |} |||\}}|r8 j|  j	| f}	n
 j|  j	| f}	|j
|	d}
|r|t||}t fdd|D }t fd	d|D }tt||D ]\}\}}|
||d|f } j|||d
| d qo||dd|df } j||dd| d |
jddddd |
S t fdd||g D }d
t| }|d|}d}t||D ]'\}} |}|
|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  r   r%   r   r    r"   r   r   r#   N   r$   z$TablePlotter.plot.<locals>.<genexpr>c                 3  r   r   r   r    r"   r   r   r#   O   r$         ?)titleheightResultg?g?g?gffffff?)topbottomr,   r-   c                 3  r   r   r   r    r"   r   r   r#   X   r$   r&   g333333?)
matplotlibr5   matplotlib.pyplotpyplot
isinstancelistr6   r1   r   r
   figureGridSpeclenr*   	enumeratezipadd_subplot_make_tablesubplotsubplots_adjustnpr   )r   r,   r-   r2   r.   r5   pltr0   r/   r7   figgsmax_left_colsmax_left_rowsi_left_labelaxmax_rowsr:   r   spr   r"   r   plot.   sF   


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)rA   pdSeriesrZ   to_framefillna)r   datar   r   r   r6   i   s   

zTablePlotter._convc                   s        jj}|dkr dd j nt|D ]} |d|  j| q jj}|dkrW 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_values_values)r!   rR   r`   r   r   r(      s    z.TablePlotter._insert_index.<locals>.<listcomp>)
copyr   r   insertrangerb   r   r\   	DataFrameconcat)r   r`   idx_nlevelsrR   col_nlevelsr   valuescol_dfr   rd   r   _insert_indexu   s"   

zTablePlotter._insert_indexNr9   strr:   float | Nonec                 C  s  |d u r| d d S ddlm} |jj}|jj}| |}|j||dd}|| j	 |d u r8dt
|d  }| }	|	d  D ]0\\}
}}|d	krR| d n|
|k r`||k r`| d n|
|k sh||k rm|d
 || qB|j|| j	d |d d S )NFr   )plotting	   )locr8   r&   celldz#AAAAAA)sizeoff)set_visiblepandasrq   r   r   r   rn   tableset_fontsizer   rE   
propertiesitemsset_facecolor
set_height	set_titleaxis)r   rU   r   r9   r:   rq   rj   rk   tbpropsrccellr   r   r   rI      s,   


zTablePlotter._make_table)r   r   r   )r   r	   r
   r	   r   r	   r   r   )r   r   r   r   )r   r   )r   T)r2   r3   r.   r4   r   )r9   ro   r:   rp   r   r   )__name__
__module____qualname____doc__r   r   r1   rX   r6   rn   rI   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Cr   r   r   r   )r   r   df1df2T)r2   r.   )XZr&   )r   F)r&   r   r&   r   )r&   r   )   r   )r   r   )r   r   r   r   )r&   r               )r   r         rr   r   )v1v2)r   df3)r2   )r?   r@   r   r\   rh   rX   ri   show
MultiIndexfrom_tuplesr   )rM   pr   r   r   idxcolumnr   r   r   main   s&   $r   __main__)r   r   )
__future__r   typingr   numpyrL   ry   r\   r   r   r   r   r   r   r   <module>   s     
!
