Ë
    êñiÿ  ã                  ó~   — 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	 d dl
mZ  G d„ d«      Zd
d„Zed	k(  r e«        yy)é    )Úannotations)ÚTYPE_CHECKINGN)ÚIterable)ÚFigurec                  ój   — e Zd ZdZ	 	 	 d
	 	 	 	 	 	 	 dd„Zdd„Zdd„Z	 d	 	 	 	 	 dd„Zd„ Zd„ Z	ddd	„Z
y)ÚTablePlotterzg
    Layout some DataFrames in vertical/horizontal layout for explanation.
    Used in merging.rst
    c                ó.   — || _         || _        || _        y ©N)Ú
cell_widthÚcell_heightÚ	font_size)Úselfr   r   r   s       úW/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/pandas/util/_doctools.pyÚ__init__zTablePlotter.__init__   s   € ð %ˆŒØ&ˆÔØ"ˆ�ó    c                ó„   — |j                   \  }}||j                  j                  z   ||j                  j                  z   fS )zA
        Calculate table shape considering index levels.
        )ÚshapeÚcolumnsÚnlevelsÚindex)r   ÚdfÚrowÚcols       r   Ú_shapezTablePlotter._shape   s:   € ð —8‘8‰ˆˆSØ�R—Z‘Z×'Ñ'Ñ'¨¨r¯x©x×/?Ñ/?Ñ)?Ð?Ð?r   c                óâ  ‡ — |r]t        t        ˆ fd„|D «       «      ‰ j                  |«      d   «      }t        ˆ fd„|D «       «      ‰ j                  |«      d   z   }||fS t        |D �cg c]  }‰ j                  |«      d   ‘Œ c}‰ j                  |«      d   gz   «      }t        |D �cg c]  }‰ j                  |«      d   ‘Œ c}‰ j                  |«      d   gz   «      }||fS c c}w c c}w )zQ
        Calculate appropriate figure size based on left and right data.
        c              3  óF   •K  — | ]  }‰j                  |«      d    –— Œ y­w©r   N©r   ©Ú.0r   r   s     €r   ú	<genexpr>z*TablePlotter._get_cells.<locals>.<genexpr>,   s   øè ø€ Ò?°B˜TŸ[™[¨›_¨QÕ/Ñ?ùó   ƒ!r   c              3  óF   •K  — | ]  }‰j                  |«      d    –— Œ y­w©é   Nr   r   s     €r   r!   z*TablePlotter._get_cells.<locals>.<genexpr>-   s   øè ø€ Ò;°˜Ÿ™ R›¨Õ+Ñ;ùr"   r%   )ÚmaxÚsumr   )r   ÚleftÚrightÚverticalÚvcellsÚhcellsr   s   `      r   Ú
_get_cellszTablePlotter._get_cells&   sä   ø€ ñ äœÓ?¸$Ô?Ó?ÀÇÁÈUÓASÐTUÑAVÓWˆFÜÓ;°dÔ;Ó;¸d¿k¹kÈ%Ó>PÐQRÑ>SÑSˆFð �vˆ~Ðô °tÖ<°˜$Ÿ+™+ b›/¨!Ó,Ò<ÀÇÁÈEÓ@RÐSTÑ@UÐ?VÑVÓWˆFÜ°tÖ<°˜$Ÿ+™+ b›/¨!Ó,Ò<ÀÇÁÈEÓ@RÐSTÑ@UÐ?VÑVÓWˆFØ�vˆ~Ðùò =ùÚ<s   Á*C'Â+C,c           	     ó  ‡ — ddl m} ddlm} t	        |t
        «      s|g}|D �cg c]  }‰ j                  |«      ‘Œ }}‰ j                  |«      }‰ j                  |||«      \  }}	|r‰ j                  |z  ‰ j                  |	z  f}
n‰ j                  |z  ‰ j                  |	z  f}
|j                  |
¬«      }|rÞ|j                  t        |«      |«      }t        ˆ fd„|D «       «      }t        ˆ fd„|D «       «      }t        t        ||d¬«      «      D ]8  \  }\  }}|j!                  ||d|…f   «      }‰ j#                  |||d	|z  ¬
«       Œ: |j%                  |dd…|d…f   «      }‰ j#                  ||dd|	z  ¬
«       |j'                  dddd¬«       |S t        ˆ fd„g |¢|‘D «       «      }d	t)        j                  |«      z  }|j                  d|«      }d}t        ||d¬«      D ]Q  \  }}‰ j+                  |«      }|j!                  |d|||d   z   …f   «      }‰ j#                  ||||¬
«       ||d   z  }ŒS |j%                  |d|d…f   «      }‰ j#                  ||d|¬
«       |j'                  dddd¬«       |S c c}w )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   )ÚgridspecN)Úfigsizec              3  óF   •K  — | ]  }‰j                  |«      d    –— Œ y­wr$   r   r   s     €r   r!   z$TablePlotter.plot.<locals>.<genexpr>U   ó   øè ø€ ÒB°r §¡¨B£°Õ 2ÑBùr"   c              3  óF   •K  — | ]  }‰j                  |«      d    –— Œ y­wr   r   r   s     €r   r!   z$TablePlotter.plot.<locals>.<genexpr>V   r2   r"   T)Ústrictç      ð?)ÚtitleÚheightÚResultgÍÌÌÌÌÌð?gÍÌÌÌÌÌì?gš™™™™™©?gffffffî?)ÚtopÚbottomr(   r)   c              3  óF   •K  — | ]  }‰j                  |«      d    –— Œ y­wr   r   r   s     €r   r!   z$TablePlotter.plot.<locals>.<genexpr>_   s   øè ø€ ÒG°"˜4Ÿ;™; r›?¨1Õ-ÑGùr"   r%   g333333ë?)Ú
matplotlibr/   Úmatplotlib.pyplotÚpyplotÚ
isinstanceÚlistÚ_convr-   r   r   ÚfigureÚGridSpecÚlenr&   Ú	enumerateÚzipÚadd_subplotÚ_make_tableÚsubplotÚsubplots_adjustÚnpr   )r   r(   r)   Úlabelsr*   r/   Úpltr   r,   r+   r0   ÚfigÚgsÚmax_left_colsÚmax_left_rowsÚiÚ_leftÚ_labelÚaxÚmax_rowsr7   Úsps   `                     r   ÚplotzTablePlotter.plot3   s¢  ø€ õ 	(Ý'ä˜$¤Ô%Ø�6ˆDØ)-Ö. 2�—
‘
˜2•Ð.ˆÐ.Ø—
‘
˜5Ó!ˆàŸ™¨¨u°hÓ?‰ˆ�áØ—o‘o¨Ñ.°×0@Ñ0@À6Ñ0IÐI‰Gð —o‘o¨Ñ.°×0@Ñ0@À6Ñ0IÐIˆGØ�j‰j ˆjÓ)ˆáØ×"Ñ"¤3 t£9¨fÓ5ˆBäÓB¸TÔBÓBˆMÜÓB¸TÔBÓBˆMÜ&/´°D¸&ÈÔ0NÓ&Oò VÑ"�‘?�E˜6Ø—_‘_ R¨¨1¨]¨?Ð(:Ñ%;Ó<�Ø× Ñ   U°&ÀÀ}ÑATÐ ÕUðVð —‘˜R¢ =¡>Ð 1Ñ2Ó3ˆBØ×Ñ˜R ¨h¸tÀf¹}ÐÔMØ×Ñ C°¸4ÀtÐÔLð" ˆ
ô ÓG¸¸$¸À¸ÔGÓGˆHØœ2Ÿ6™6 (Ó+Ñ+ˆFØ×"Ñ" 1 fÓ-ˆBàˆAÜ! $¨°tÔ<ò ‘
��FØ—[‘[ “_�Ø—_‘_ R¨¨1¨q°2°a±5©y¨=Ð(8Ñ%9Ó:�Ø× Ñ   R¨v¸fÐ ÔEØ�R˜‘U‘
‘ð	ð —‘˜R  1¡2 ™YÓ'ˆBØ×Ñ˜R ¨h¸vÐÔFØ×Ñ D°¸DÈÐÔMàˆ
ùòQ /s   ¥Jc                óº   — t        |t        j                  «      r/|j                  €|j	                  d¬«      }n|j	                  «       }|j                  d«      }|S )zF
        Convert each input to appropriate for table outplot.
        Ú )ÚnameÚNaN)r?   ÚpdÚSeriesr[   Úto_frameÚfillna)r   Údatas     r   rA   zTablePlotter._convp   sJ   € ô �dœBŸI™IÔ&Ø�y‰yÐ Ø—}‘}¨"�}Ó-‘à—}‘}“�Ø�{‰{˜5Ó!ˆØˆr   c                óŒ  — |j                  «       }|j                  j                  }|dk(  r|j                  dd|j                  «       n?t	        |«      D ]1  }|j                  |d|› �|j                  j                  |«      «       Œ3 |j                  j                  }|dkD  r›|j                  j                  d«      }t	        d|«      D �cg c]'  }|j                  j                  |«      j                  ‘Œ) }}t        j                  |«      }|j                  |_        t        j                  ||g«      }||_        |S c c}w )Nr%   r   ÚIndex)Úcopyr   r   ÚinsertÚrangeÚ_get_level_valuesr   Ú_valuesr]   Ú	DataFrameÚconcat)r   ra   Úidx_nlevelsrR   Úcol_nlevelsr   ÚvaluesÚcol_dfs           r   Ú_insert_indexzTablePlotter._insert_index|   s  € à�y‰y‹{ˆØ—j‘j×(Ñ(ˆØ˜!ÒØ�K‰K˜˜7 D§J¡JÕ/ä˜;Ó'ò M�Ø—‘˜A  q c˜{¨D¯J©J×,HÑ,HÈÓ,KÕLðMð —l‘l×*Ñ*ˆØ˜Š?Ø—,‘,×0Ñ0°Ó3ˆCäCHÈÈKÓCXöØ>?�—‘×.Ñ.¨qÓ1×9Ó9ðˆFð ô —\‘\ &Ó)ˆFØ!Ÿ>™>ˆDŒLÜ—9‘9˜f d˜^Ó,ˆDØˆDŒLØˆùòs   Ã,ENc                ó¬  — |€|j                  d«       y ddlm} |j                  j                  }|j
                  j                  }| j                  |«      }|j                  ||d¬«      }|j                  | j                  «       |€dt        |«      dz   z  }|j                  «       }	|	d   j                  «       D ]g  \  \  }
}}|d	k(  r|j                  d«       n7|
|k  r||k  r|j                  d«       n|
|k  s||k  r|j                  d
«       |j                  |«       Œi |j                  || j                  ¬«       |j!                  d«       y )NFr   )Úplottingé	   )Úlocr5   r%   Úcelldéÿÿÿÿz#AAAAAA)ÚsizeÚoff)Úset_visibleÚpandasrq   r   r   r   ro   ÚtableÚset_fontsizer   rD   Ú
propertiesÚitemsÚset_facecolorÚ
set_heightÚ	set_titleÚaxis)r   rU   r   r6   r7   rq   rk   rl   ÚtbÚpropsÚrÚcÚcells                r   rH   zTablePlotter._make_table’   s)  € Øˆ:Ø�N‰N˜5Ô!Øå#à—h‘h×&Ñ&ˆØ—j‘j×(Ñ(ˆà×Ñ Ó#ˆØ�^‰^˜B ¨ˆ^Ó*ˆØ
�‰˜Ÿ™Ô'àˆ>ØœC ›G a™KÑ(ˆFà—‘“ˆØ! '™N×0Ñ0Ó2ò 	$‰L‰FˆQ��DØ�BŠwØ× Ñ  Õ'Ø�[’ Q¨¢_Ø× Ñ  Õ'Ø�[’ A¨¢OØ×"Ñ" 9Ô-Ø�O‰O˜FÕ#ð	$ð 	�‰�U §¡ˆÔ0Ø
�‰��r   )g®Gáz®×?g      Ð?g      @)r   Úfloatr   r‡   r   r‡   ÚreturnÚNone)r   zpd.DataFramerˆ   útuple[int, int])rˆ   rŠ   )© T)rL   zIterable[str]r*   Úboolrˆ   r   r
   )r6   Ústrr7   zfloat | Nonerˆ   r‰   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r-   rX   rA   ro   rH   r‹   r   r   r   r      s|   „ ñð !Ø!Øð	#àð#ð ð#ð ð	#ð
 
ó#ó@óð IMð;Ø#0ð;ØAEð;à	ó;òz
òõ,r   r   c                 óæ  — dd l m}  t        «       }t        j                  g d¢g d¢g d¢dœ«      }t        j                  ddgdd	gd
œ«      }|j                  ||gt        j                  ||g«      ddgd¬«       | j                  «        t        j                  ddgdd	gdœ«      }|j                  ||gt        j                  ||gd¬«      ddgd¬«       | j                  «        t        j                  j                  g d¢«      }t        j                  j                  ddg«      }t        j                  g d¢g d¢dœ|¬«      }||_
        |j                  ||dg¬«       | j                  «        y )Nr   )é
   é   é   )é   é   é   )é   é   é    )ÚAÚBÚCr“   r•   r™   r›   )rœ   rž   Údf1Údf2T)rL   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)rL   )r=   r>   r   r]   ri   rX   rj   ÚshowÚ
MultiIndexÚfrom_tuplesr   )rM   ÚprŸ   r    r®   ÚidxÚcolumns          r   Úmainrµ   ±   s4  € Ý#ä‹€Aä
�,‰,š\²Â<ÑPÓ
Q€CÜ
�,‰,˜b "˜X¨R°¨HÑ5Ó
6€Cà‡F�FˆC�ˆ:”r—y‘y # s Ó,°e¸U°^Èd€FÔSØ‡H�H„Jä
�,‰,˜b "˜X¨R°¨HÑ5Ó
6€Cà‡F�FØ	ˆcˆ
”B—I‘I˜s C˜j¨qÔ1¸5À%¸.ÐSXð ô ð ‡H�H„Jä
�-‰-×
#Ñ
#ÚDó€Cô �]‰]×&Ñ&¨°(Ð';Ó<€FÜ
�,‰,Ò0Ò8KÑLÐTWÔ
X€CØ€C„KØ‡F�Fˆ3�˜U˜G€FÔ$Ø‡H�H…Jr   Ú__main__)rˆ   r‰   )Ú
__future__r   Útypingr   ÚnumpyrK   ry   r]   Úcollections.abcr   Úmatplotlib.figurer   r   rµ   rŽ   r‹   r   r   ú<module>r¼      s@   ðÝ "å  ã ã áÝ(å(÷_ñ _óDð8 ˆzÒÙ…Fð r   