o
    Û­j£  ã                   @  sf   d dl mZ d dlmZ d dlZd dlZerd dlm	Z	 G dd„ dƒZ
dd	d
„Zedkr1eƒ  dS dS )é    )Úannotations)ÚTYPE_CHECKINGN)ÚIterablec                   @  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
    ç®Gáz®×?ç      Ð?ç      @Ú
cell_widthÚfloatÚcell_heightÚ	font_sizeÚreturnÚNonec                 C  s   || _ || _|| _d S ©N)r	   r   r   )Úselfr	   r   r   © r   úR/var/www/html/CropPilot/venv/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)   B   s    z%TablePlotter.plot.<locals>.<listcomp>)Úfigsizec                 3  r   r&   r    r!   r#   r   r   r$   Q   r%   z$TablePlotter.plot.<locals>.<genexpr>c                 3  r   r   r    r!   r#   r   r   r$   R   r%   ç      ð?)ÚtitleÚheightÚResultgÍÌÌÌÌÌð?gÍÌÌÌÌÌì?gš™™™™™©?gffffffî?)ÚtopÚbottomr-   r.   c                 3  r   r   r    r!   r#   r   r   r$   [   r%   r'   g333333ë?)Ú
matplotlibr6   Úmatplotlib.pyplotÚpyplotÚ
isinstanceÚlistr7   r2   r	   r   ÚfigureÚGridSpecÚlenr+   Ú	enumerateÚzipÚadd_subplotÚ_make_tableÚsubplotÚsubplots_adjustÚnpr   )r   r-   r.   r3   r/   r6   Úpltr1   r0   r8   ÚfigÚgsÚmax_left_colsÚmax_left_rowsÚiÚ_leftÚ_labelÚaxÚmax_rowsr;   r   Úspr   r#   r   Úplot1   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)rB   ÚpdÚSeriesr[   Úto_frameÚfillna)r   Údatar   r   r   r7   l   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"   rS   ©ra   r   r   r)   …   s    ÿz.TablePlotter._insert_index.<locals>.<listcomp>)
Úcopyr   r   ÚinsertÚrangerc   r   r]   Ú	DataFrameÚconcat)r   ra   Úidx_nlevelsrS   Úcol_nlevelsr   ÚvaluesÚcol_dfr   re   r   Ú_insert_indexx   s"   
ÿ
zTablePlotter._insert_indexNr:   Ú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é	   )Úlocr9   r'   Úcelldéÿÿÿÿz#AAAAAA)ÚsizeÚoff)Úset_visibleÚpandasrr   r   r   r   ro   ÚtableÚset_fontsizer   rF   Ú
propertiesÚitemsÚset_facecolorÚ
set_heightÚ	set_titleÚaxis)r   rV   r   r:   r;   rr   rk   rl   ÚtbÚpropsÚrÚcÚcellr   r   r   rJ   Ž   s,   


zTablePlotter._make_table)r   r   r   )r	   r
   r   r
   r   r
   r   r   )r   r   r   r   )r   r   )r   T)r3   r4   r/   r5   r   )r:   rp   r;   rq   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r2   rY   r7   ro   rJ   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)r3   r/   )ÚXÚZr'   )r‚   F)©r'   r•   ©r'   r–   )r'   r—   )é   r•   )rž   r–   )rž   r—   rœ   r�   )r'   rž   é   é   é   é   )r¡   r¢   é   é   rs   rŒ   )Úv1Úv2)r   Údf3)r3   )r@   rA   r   r]   ri   rY   rj   ÚshowÚ
MultiIndexÚfrom_tuplesr   )rN   Úpr˜   r™   r§   ÚidxÚcolumnr   r   r   Úmain­   s&   $ÿÿr®   Ú__main__)r   r   )Ú
__future__r   Útypingr   ÚnumpyrM   rz   r]   Úcollections.abcr   r   r®   rˆ   r   r   r   r   Ú<module>   s     
!
ÿ